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

一、验证服务器




这里需要加入一下你的服务器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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,154评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,399评论 19 139
  • 每个人,可能都会在十七岁里面遇到一个很投机的人。或许你希望每天都可以围绕他的身边,好像在培养一颗种子。 昨天,又做...
    Alice的拥抱阅读 2,224评论 0 0
  • 今天 《断舍离》修炼第九天,千里之行始于中下,只要您愿意与世界连接,世界就愿意与你连接,咱们修炼的目标是让自己更好...
    祖迩阅读 3,798评论 0 5
  • 也许,很多人都会说,我不是一个伟大的人,不能给国家带来进步和荣誉;我不是一个有能耐的人,不能给社会带来繁...
    玺玺公主阅读 4,005评论 1 1