php生成小程序二维码出现40001的情况
发表时间:2020-10-21
发布人:葵宇科技
浏览次数:96
php生成小程序二维码出现40001的情况
获取二维码时,小程序的access_token莫名奇妙失效了?
生成小程序二维码时遇到的坑,明明刚获取到的access_token,生成二维码时总是提示说 "errcode: 40001, errmsg: “invalid credential, access_token is invalid or not latest hint: [IUwBwa07644522]”。这个access_token时灵时不灵
不废话,直接说解决方案
出现获取小程序二维码经常失败偶尔成功或者偶尔失败的情况,并提示40001。这个很大程度上是因为你的程序中有多个地方使用了获取access_token的方法 会失效是其它地方刷新了assess_token导致在当前页面刷新时和另一个地方冲突,导致token失效
解决方式就是将获取access_token的方法统一管理,这样将不会存在冲突
附上本人生成二维码的部分代码(使用tp5.1框架)
/**
* @descr 得到小程序二维码
*/
public function getQrCode(){
header('content-type:text/html;charset=utf-8');
if (Session::get('access_token')){
$token=Session::get('access_token');
}else{
$token = access_token();
}
$qcode ="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$token."";
$param = json_encode([
//"scene"=>"uid=".$this->app['userID'],
"scene"=>"uid=21",
"path"=>"pages/active-receive/index",
//"width"=> 430
]);
$result = Common::httpRequest($qcode,$param,"POST");
//file_put_contents("qrcode.png", $result);
$base64_image ="data:image/jpeg;base64,".base64_encode($result);
return $base64_image;
}
function access_token(){
$config = Config('weChat.');
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=". $config['WX_APPID']."&secret=".$config['WX_SECRET']."";
$json = \tool\Common::httpRequest($url);
$json = json_decode($json,true);
Session::set('access_token',$json['access_token'],7200);
return $json['access_token'];
}
//curl
public static function httpRequest($url, $data='', $method='GET'){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
if($method=='POST')
{
curl_setopt($curl, CURLOPT_POST, 1);
if ($data != '')
{
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
}
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
分享一下自己的采坑经历,目的是为了大家不再重复我的错误。
写的不好,请大家不要介意,谢谢