美文网首页
微信获取token几个步骤一定不要错,否则坑的你不要不要的

微信获取token几个步骤一定不要错,否则坑的你不要不要的

作者: 浮雲往事 | 来源:发表于2018-06-22 10:47 被阅读0次

一、验证服务器

这里需要加入一下你的服务器ip地址

文件valid.php   该文件存放位置要和上图URL对应

include 'token.php';//包含一下第二点的token验证文件

define("TOKEN", "weixin"); //对应上图的Token
$wechatObj = new wechatCallbackapiTest();

$wechatObj->valid();   //调用微信验证类方法,该类只需执行一次,目的其实就是”证明你就是你“,你操作的是你自己的服务器

所以验证成功后,就可以注释掉这一行  
 //$wechatObj->valid(); 

class wechatCallbackapiTest{
public function valid()  {

      $echoStr = $_GET["echostr"];
     if($this->checkSignature()){
            ob_clean();
            echo $echoStr;
            exit;
       }
}

private function checkSignature(){
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
         $token = TOKEN;
         $tmpArr = array($token, $timestamp, $nonce);
         sort($tmpArr);
         $tmpStr = implode( $tmpArr );
         $tmpStr = sha1( $tmpStr );
         if( $tmpStr == $signature ){
                 return true;
         }else{
                return false;
         }
}

//下面第三点的代码需要放到这里,

}

二、每次客户端和服务器端交互前都会要求验证access_token

//token.php,------用来判断access_token是否有效并且保存access_token到本地文件中,避免反复失效

ps:access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

if(exists_token()){

    if(expirse_token()){

        //token过期,重新获取token

        $token=get_token();

        unlink('token.txt');

        file_put_contents('token.txt',$token);

    }else{

        $token=file_get_contents('token.txt');

    }

}else{

    $token=get_token();

    file_put_contents('token.txt',$token);

}

//判断文件是否存在

function exists_token(){

    if(file_exists('token.txt')){

        return true;

    }else{

        return false;

    }

}

//或取token.txt的创建时间,并且与执行当前index.php的时间对比

function expirse_token(){

    $ctime=filectime('token.txt');

$time=time();

$s=$time-$ctime;

echo "现在时间:$time 创建时间:$ctime 计算结果:$s";

    if((time()-$ctime)>=7000){

        return true;

    }else{

        return false;

    }

}

function get_token(){

    $appid = 'wxdbf86fa6a4c38a41';

    $appsecret = '99d54a1936e35b88b40f5501cd5ca524';

    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,$url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);

    $data = curl_exec($ch);

    curl_close($ch);

    $obj=json_decode($data,true);

//file_put_contents('access.txt',$data);

    return $obj['access_token'];

}

三、消息处理

//接下来就是处理微信和客户端的交互了

 //启用微信服务器后,客户端所有的请求都会转向这里被执行(微信那边只是验证身份,和请求转发)

public function responseMsg(){

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

 if (!empty($postStr)){

 libxml_disable_entity_loader(true); //对信息模板进行错误处理

 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素

 $event=$postObj->Event;//通过上步骤取到的对象获取相关事件属性、发送用户、接受用户、以及内容等信息

 $fromUsername = $postObj->FromUserName;//发送用户

 $toUsername = $postObj->ToUserName;//接收用户

 $keyword = trim($postObj->Content); //内容

 $time = time();//消息发送时间

$textTpl="<xml>

<ToUserName><![CDATA[%s]]</ToUserName>

<FromUserName><![CAATA[%S]]></FromUserName>

<CreateTime>%s</CreateTime>

<MstType><![CDATA[%S]]></MsgType>

<Content><![CDATA[%S]]></Content>

</xml>

"

信息模板

 //详见https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453

//根据客户端发送过来的事件,做出不同的响应

if($event=="subscribe")

{

//subscribe(订阅),以下是一段示例代码,用户关注公众号后返回给用户一段友好信息,
$msgType = "text";

  $contentStr ="你好!感谢您关注";

  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

//上面$textTpl 是信息模板

  echo $resultStr;

}else if($event=="unsubscribe"){  

//unsubscribe(取消订阅) 

}else if($event=="LOCATION"){

//获取地理位置事件

}

}

详情请查阅官方文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454

相关文章

  • 微信获取token几个步骤一定不要错,否则坑的你不要不要的

    一、验证服务器 文件valid.php 该文件存放位置要和上图URL对应 include 'token.php'...

  • (十三)Vue获取到元素

    Vue获取元素步骤 (1) 第一步给元素加上ref属性。切记不要有- 因为数据是异步获取的所以不要加v-if否则为...

  • 微信小程序在Canvas上绘图的坑

    这几天在搞微信小程序开发,首先不说小程序的IDE shit的不要不要的。。就这个绘图。。也是有几个坑。。。搞的我好...

  • 优化并发获取微信token

    背景: 最近项目使用到了微信开发,获取微信token是必须可少的步骤。Redis是存储token的最佳方案,所以把...

  • 要记住,女生一定要矜持!!!也不要误错情,不到男生出手坚决不要出手!否则你会后悔很多!也要少点暗恋,多点学习,拿多...

  • 【php】Wordpress同步内容到微信公众号

    利用官方接口实现内容的同步的几个步骤:1.获取token接口,appid和secret可以从微信公众号后台查看。 ...

  • 微信登录

    1.微信公众号登录 基本步骤:1.获取code -->根据code获取access_token和openid --...

  • 不懂就请教

    不要抄近道,否则会白跑; 不要绕远道,否则会迟到; 不要走邪道,否则会坐牢; 不要走黑道,否则会挨刀; 不要只想要...

  • 不要总想着超近道

    不要抄近道,否则会白跑。不要绕远道,否则会迟到。不要走邪道,否则会坐牢。不要走黑道,否则会挨刀。不要只想要,付出不...

  • 30岁想法

    本事不大脾气就不要太大,否则你会很麻烦。 能力不大,欲望就不要太大。否则你会很痛苦,脾气永远不要大...

网友评论

      本文标题:微信获取token几个步骤一定不要错,否则坑的你不要不要的

      本文链接:https://www.haomeiwen.com/subject/cxwhyftx.html