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

一、验证服务器



微信获取token几个步骤一定不要错,否则坑的你不要不要的_第1张图片


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

%s

"

微信获取token几个步骤一定不要错,否则坑的你不要不要的_第2张图片
信息模板

 //详见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几个步骤一定不要错,否则坑的你不要不要的)