/**
* 获取用户信息
* @throws \Exception
* @return array
*/
public static function getUserInfo(string $code = '')
{
$appid = config('site.wechat_app_id');
$secret = config('site.wechat_app_secret');
$query = http_build_query([
'appid' => $appid,
'secret' => $secret,
'code' => $code,
'grant_type' => 'authorization_code'
]);
// 常量值GET_USER_ACCESS_TOKEN_URL :'https://api.weixin.qq.com/sns/oauth2/access_token?'
$oauth2Url = self::GET_USER_ACCESS_TOKEN_URL . $query;
$oauth2 = json_decode(\fast\Http::get($oauth2Url), true);
$query = http_build_query([
'access_token' => $oauth2['access_token'],
'openid' => $oauth2['openid'],
'lang' => 'zh_CN',
]);
// 常量值GET_USERINFO_URL :'https://api.weixin.qq.com/sns/userinfo?'
$get_user_info_url = self::GET_USERINFO_URL . $query;
$respone = \fast\Http::get($get_user_info_url);
$userinfo = json_decode($respone, true);
if (empty($userinfo['openid'])) {
// 在这里会记录大量日志
\think\Log::record($respone, 'wechat_auth_log');
throw new \Exception('授权失败!');
}
return $userinfo;
}
上图是代码,每次都是重新获取网页授权access_token ,会频繁的提示 (对了这是一个公众号投票应用,无需关注公众号投票,目前总票数371482,总投票人数193070,每人每天可以给不同参赛者投5票)
[ wechat_auth_log ] {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: JIbDMzmoRa-luCf ]"}
公众号appid: wxb67f2683fbfb45f6
目测是在在获取 userinfo 时没有很正确拼接 access_token 到 url 上。
1.检查是否获取到 access_token
2.检查在 /sns/userinfo 接口上是否正确拼接 access_token 参数
在这一块的返回值进行了日志记录,\fast\Http::get($oauth2Url)。
有时候又是数据,有时候什么都没有,(如下图,未进行json_deconde转换前的原始数据)。
应该是这一块的问题,既然出错了,也不给错误码。但是这一块应该怎么解决呐。