EasyWeChat版本是6.18,使用的是比较新的版本,网上的代码已经不适用了
try {
// 获取前端传递的code
$code = Request::param('code', '');
if (empty($code)) {
return JsonRes::throw('缺少code参数',[],1001);
}
// 初始化微信小程序实例(使用Application替代Factory)
$config = Config::get('wechat.mini_program.default');
$appId = $config['app_id'];
$secret = $config['secret'];
// 2. 初始化小程序应用并获取基础客户端
$app = new Application($config);
$client = $app->getClient(); // 获取基础HTTP客户端
// 3. 手动调用微信官方的jscode2session接口
// 文档参考:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
$response = $client->post('sns/jscode2session', [
'query' => [
'appid' => $appId,
'secret' => $secret,
'js_code' => $code,
'grant_type' => 'authorization_code'
]
]);
// 4. 解析响应结果(返回格式为JSON)
$result = $response->toArray(); // 转换为数组
// 5. 处理微信返回的错误
if (isset($result['errcode']) && $result['errcode'] != 0) {
return JsonRes::throw($result['errmsg'], $result,$result['errcode']);
}
// 6. 提取session_key和openid(处理成功)
$sessionKey = $result['session_key'];
$openid = $result['openid'];
$sessionId = md5(uniqid($openid, true) . $sessionKey);
cache($sessionId, ['openid' => $openid, 'session_key' => $sessionKey], 86400);
// 7. 生成session_id并缓存(同之前的逻辑)
return JsonRes::data([
'openid' => $openid,
'token' => $sessionId
]);
} catch (Exception $e) {
return JsonRes::fail('服务器错误:' . $e->getMessage());
}
主要的就是初始化的这部分,原来版本的easywechat包含了逻辑,可以通过auth直接获取,但新版的没有逻辑,需要自己发起请求,然后解析数据。
评论0
暂时没有评论