php生成小程序二维码出现40001的情况

it2024-04-21  57

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; }

分享一下自己的采坑经历,目的是为了大家不再重复我的错误。 写的不好,请大家不要介意,谢谢

最新回复(0)