更新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}";
|
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 使用 GuzzleHttp 发送请求
|
// 使用 GuzzleHttp 发送请求,禁用SSL验证
|
||||||
$client = new Client();
|
$client = new Client([
|
||||||
$response = $client->get($url);
|
'verify' => false
|
||||||
$data = json_decode($response->getBody(), true);
|
]);
|
||||||
$response = $client->get($url);
|
$response = $client->get($url);
|
||||||
$data = json_decode($response->getBody(), true);
|
$data = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
@ -158,46 +158,70 @@ class WechatController extends BaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取登录二维码的 ticket
|
/**
|
||||||
|
* 获取微信登录二维码
|
||||||
|
* @return \think\response\Json
|
||||||
|
*/
|
||||||
public function getLoginTicket()
|
public function getLoginTicket()
|
||||||
{
|
{
|
||||||
// 获取access_token
|
try {
|
||||||
$access_token = $this->getGZHAccessToken();
|
// 获取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
|
// 发送请求获取ticket
|
||||||
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={$access_token}&type=image";
|
$client = new Client(['verify' => false]);
|
||||||
|
$response = $client->post($url, [
|
||||||
|
'body' => $postData,
|
||||||
|
'headers' => [
|
||||||
|
'Content-Type' => 'application/json'
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
// 准备二维码图片文件
|
$result = json_decode($response->getBody(), true);
|
||||||
$file = request()->file('qrcode');
|
|
||||||
if (!$file) {
|
if (isset($result['errcode']) && $result['errcode'] != 0) {
|
||||||
return json(['code' => 1, 'msg' => '请上传二维码图片']);
|
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