php生成小程序二维码出现40001的情况 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

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

发表时间:2020-10-21

发布人:葵宇科技

浏览次数:65

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

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

相关案例查看更多