收藏
回答

微信公众号api.weixin.qq.com/sns/userinfo接口异常

调用api.weixin.qq.com/sns/userinfo返回

errcode:41001

errmsg:"access_token missing, hints: [ req_id: HhECAh4FE-hc1YBa ]"

确定一定以及肯定不是代码的问题,不是新开的项目

上线跑了两个多月了,没有动过代码

看日志今天下午一点半的时候还可以成功调用的

生成环境和测试公众号两个环境都报这个错

代码逻辑:

1.调用https://api.weixin.qq.com/sns/oauth2/access_token

入参:"appid","secret","code","grant_type" => "authorization_code",

获得access_token,openid

2.调用https://api.weixin.qq.com/sns/userinfo

入参:"access_token","openid","lang"=>"zn_CN"

期望返回:用户信息

实际返回:errcode:41001,errmsg:"access_token missing, hints: [ req_id: HhECAh4FE-hc1YBa ]"

回答关注问题邀请回答
收藏

2 个回答

  • 谢颜鸿
    谢颜鸿
    2020-06-10
    哈哈,我刚从坑里爬出来。
    应该是官方改了限制,以前可以用post,现在必须要用get获取。
    
    
    2020-06-10
    有用 1
    回复 1
    • shady
      shady
      2020-06-10
      我啥也没改,过了两个多小时又可以调用了
      以防万一我也改一下吧
      谢了~
      2020-06-10
      回复
  • shady
    shady
    2020-06-10
              /**
         * 获取access_token
         * @param string code
         * @return array
         */
        public function getAccessToken($code = '')
        {
            if (!$code) {
                return [];
            }
            $queryarr = array(
                "appid" => $this->config['app_id'],
                "secret" => $this->config['app_secret'],
                "code" => $code,
                "grant_type" => "authorization_code",
            );
            $response = Http::post(self::GET_ACCESS_TOKEN_URL, $queryarr);
            $ret = (array) json_decode($response, true);
            return $ret ? $ret : [];
        }
    
    /**
         * 获取用户信息
         * @param array $params
         * @return array
         */
        public function getUserInfo($params = [])
        {
            $params = $params ? $params : request()->get();
            if (isset($params['access_token']) || (isset($params['state']) && $params['state'] == Session::get('state') && isset($params['code']))) {
                //获取access_token
                $data = isset($params['code']) ? $this->getAccessToken($params['code']) : $params;
                $access_token = isset($data['access_token']) ? $data['access_token'] : '';
                $refresh_token = isset($data['refresh_token']) ? $data['refresh_token'] : '';
                $expires_in = isset($data['expires_in']) ? $data['expires_in'] : 0;
                if ($access_token) {
                    $openid = isset($data['openid']) ? $data['openid'] : '';
                    $unionid = isset($data['unionid']) ? $data['unionid'] : '';
                    if (stripos($this->config['scope'], 'snsapi_userinfo') !== false) {
                        //获取用户信息
                        $queryarr = [
                            "access_token" => $access_token,
                            "openid" => $openid,
                            "lang" => 'zh_CN',
                        ];
    
    
                        $ret = Http::post(self::GET_USERINFO_URL, $queryarr);
                        $userinfo = (array) json_decode($ret, true);
                        if (!$userinfo || isset($userinfo['errcode'])) {
                            return [];
                        }
                        $userinfo = $userinfo ? $userinfo : [];
                        $userinfo['avatar'] = isset($userinfo['headimgurl']) ? $userinfo['headimgurl'] : '';
                    } else {
                        $userinfo = [];
                    }
                    $data = [
                        'access_token' => $access_token,
                        'refresh_token' => $refresh_token,
                        'expires_in' => $expires_in,
                        'openid' => $openid,
                        'unionid' => $unionid,
                        'userinfo' => $userinfo,
                    ];
                    return $data;
                }
            }
            return [];
        }
    
    2020-06-10
    有用
    回复 1
登录 后发表内容
问题标签