微信公众号开发踩坑指南(1)——服务器验证与Token获取失败原因

最近在做公司的微信公众号开发,微信官方的wiki写的也不是很详细,一不小心就入了一个坑。一开始入手的时候觉得有点混乱,开发完成之后发现其实不难,很多功能都是获取access token然后到微信指定的URL去换取你需要的东西,比如自定义菜单,带参二维码,模板消息等等。此文记录一下开发过程中遇到的坑,希望有缘看到这篇文章的人可以少踩些坑。

微信开发首先要进行服务器接口的验证,微信要确定填写的域名是你自己的服务器地址,所以这个部分只需要把微信服务器发给你的str返回就可以验证成功了。

微信公众号开发踩坑指南(1)——服务器验证与Token获取失败原因_第1张图片

这里我用的是公司的服务器地址,个人开发的话买个云服务器就可以了。AESKey随机,加密模式默认明文模式,Token自己随便设置即可。

微信公众号开发踩坑指南(1)——服务器验证与Token获取失败原因_第2张图片

根据上述的验证方法:

private function checkSignature()
{
    _GET["signature"];
    _GET["timestamp"];
    _GET["nonce"];

tmpArr = array(timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( signature ){
return true;
}else{
return false;
}
}

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

controller中的handler_reques()函数直接调用valid函数即可完成验证。

坑1:这个验证的过程中是不能用浏览器打开URL的,不然会验证失败,这个坑了我好久。(为什么呢?我也不知道)

完成服务器接口验证之后,就可以用这个服务器URL去获取access_token了。

 public function gettoken(){
      
        $mem = new Memcache;
        $mem->connect('127.0.0.1', 11211);   //本地memcache
        $appid = APPID;
        $secret= SECRET;
        $getTokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
        $accessTokenJson=file_get_contents($getTokenUrl);
        $accessTokenArr=json_decode($accessTokenJson,true);
        $accessToken=$accessTokenArr['access_token'];
        $mem->set('businesskfs_wx_access_token',$accessToken,0,6000);
        return   $accessToken;
    }
    public function Token(){
        $mem = new Memcache;
        $mem->connect('127.0.0.1', 11211);
        $res = $mem->get('access_token');
        if(empty($res)){
            $res = $this->gettoken();
        }
        return $res;
    }

坑2:Access_token会2小时过期一次,每天有限制次数,所以不能一直请求获取。这里把获取的access_token存在memcache中,设置过期时间为6000(小于7200即可)。

坑3:有时候会显示token missing40001报错,这个时候有两种可能:

1,IP白名单没添加

2,重置一下secretID

拿到access_token后就可以调用微信接口去实现自己想要的功能啦。

你可能感兴趣的:(公众号开发,PHP)