600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 微信公众号开发踩坑指南(1)——服务器验证与Token获取失败原因

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

时间:2021-12-24 00:44:31

相关推荐

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

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

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

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

根据上述的验证方法:

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./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后就可以调用微信接口去实现自己想要的功能啦。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。