更新wechat,增加获取登陆二维码
This commit is contained in:
parent
c1038b7337
commit
9b981b68e7
@ -140,10 +140,10 @@ class WechatController extends BaseController
|
||||
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
|
||||
|
||||
try {
|
||||
// 使用 GuzzleHttp 发送请求
|
||||
$client = new Client();
|
||||
$response = $client->get($url);
|
||||
$data = json_decode($response->getBody(), true);
|
||||
// 使用 GuzzleHttp 发送请求,禁用SSL验证
|
||||
$client = new Client([
|
||||
'verify' => false
|
||||
]);
|
||||
$response = $client->get($url);
|
||||
$data = json_decode($response->getBody(), true);
|
||||
|
||||
@ -158,46 +158,70 @@ class WechatController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
//获取登录二维码的 ticket
|
||||
/**
|
||||
* 获取微信登录二维码
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function getLoginTicket()
|
||||
{
|
||||
// 获取access_token
|
||||
$access_token = $this->getGZHAccessToken();
|
||||
try {
|
||||
// 获取access_token
|
||||
$access_token = $this->getGZHAccessToken();
|
||||
|
||||
// 构建请求URL - 使用正确的接口生成临时二维码
|
||||
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$access_token}";
|
||||
|
||||
// 准备请求数据 - 生成临时二维码,有效期5分钟
|
||||
$postData = json_encode([
|
||||
'expire_seconds' => 300, // 5分钟有效期
|
||||
'action_name' => 'QR_STR_SCENE',
|
||||
'action_info' => [
|
||||
'scene' => [
|
||||
'scene_str' => md5(uniqid() . time()) // 生成唯一场景值
|
||||
]
|
||||
]
|
||||
]);
|
||||
|
||||
// 构建请求URL
|
||||
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={$access_token}&type=image";
|
||||
// 发送请求获取ticket
|
||||
$client = new Client(['verify' => false]);
|
||||
$response = $client->post($url, [
|
||||
'body' => $postData,
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json'
|
||||
]
|
||||
]);
|
||||
|
||||
// 准备二维码图片文件
|
||||
$file = request()->file('qrcode');
|
||||
if (!$file) {
|
||||
return json(['code' => 1, 'msg' => '请上传二维码图片']);
|
||||
$result = json_decode($response->getBody(), true);
|
||||
|
||||
if (isset($result['errcode']) && $result['errcode'] != 0) {
|
||||
return json(['code' => 1, 'msg' => '获取二维码失败:' . $result['errmsg']]);
|
||||
}
|
||||
|
||||
// 使用ticket获取二维码图片URL
|
||||
$ticket = urlencode($result['ticket']);
|
||||
$qrcodeUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={$ticket}";
|
||||
|
||||
// 将场景值保存到缓存中,用于后续验证
|
||||
Cache::set('wx_login_scene_' . $result['ticket'], [
|
||||
'scene_str' => $postData['action_info']['scene']['scene_str'],
|
||||
'create_time' => time(),
|
||||
'expire_time' => time() + 300
|
||||
], 300);
|
||||
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '获取二维码成功',
|
||||
'data' => [
|
||||
'ticket' => $result['ticket'],
|
||||
'expire_seconds' => $result['expire_seconds'],
|
||||
'url' => $qrcodeUrl,
|
||||
'scene_str' => $postData['action_info']['scene']['scene_str']
|
||||
]
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::error('获取微信登录二维码失败:' . $e->getMessage());
|
||||
return json(['code' => 1, 'msg' => '获取二维码失败:' . $e->getMessage()]);
|
||||
}
|
||||
|
||||
// 将文件转换为CURLFile对象
|
||||
$file_path = $file->getPathname();
|
||||
$file_name = $file->getOriginalName();
|
||||
$file_type = $file->getMime();
|
||||
|
||||
$data = [
|
||||
'media' => new \CURLFile($file_path, $file_type, $file_name)
|
||||
];
|
||||
|
||||
// 发送请求获取ticket
|
||||
$result = $this->curlPost($url, $data);
|
||||
$response = json_decode($result, true);
|
||||
|
||||
if (isset($response['errcode']) && $response['errcode'] != 0) {
|
||||
return json(['code' => 1, 'msg' => '获取ticket失败:' . $response['errmsg']]);
|
||||
}
|
||||
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '获取ticket成功',
|
||||
'data' => [
|
||||
'media_id' => $response['media_id'],
|
||||
'created_at' => $response['created_at'],
|
||||
'type' => $response['type']
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user