首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

微信网页扫码登录 PHP SDK 实现:从获取二维码到获取用户信息

     編輯:PHP 綜合知識

核心流程

  1. 获取登录授权码:请求 https://login.weixin.qq.com/jslogin,解析返回的 window.QRLogin.uuid。
  2. 生成二维码图片:https://login.weixin.qq.com/qrcode/{uuid}?t=webwx。
  3. 轮询验证扫码状态:请求 https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid={uuid}&tip=1,解析 window.code:
    • 408:等待扫码
    • 201:已扫码未确认
    • 200:确认登录,携带 ticket
  4. 凭票换取登录 Cookie:访问 https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=...,响应头中提取 `Set-Cookie`。
  5. 获取用户信息:携带 Cookie 请求 https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit,解析 JSON 得到用户昵称、头像等。

SDK 关键类结构

class Wechatauth {
    private $cookie;           // 登录后的 Cookie 字符串
    private $_logincode;       // uuid
    private $_cookiename;      // 本地 Cookie 缓存文件路径
    private $_cookieexpired = 3600;

    public function __construct($options) { /* 初始化账号、路径、调试回调 */ }

    public function get_login_code() { /* 步骤1 */ }
    public function get_code_image($code='') { /* 步骤2 */ }
    public function verify_code() { /* 步骤3,返回 200/201/408/400 */ }
    public function get_login_cookie($is_array=false) { /* 步骤4 */ }
    public function get_login_info() { /* 步骤5 */ }
    public function get_avatar($url) { /* 下载头像 */ }
    public function logout() { /* 登出并清理 Cookie */ }
}

前端集成示例

<img id="qrcode" src="" width="200" height="200">
<script>
let auth = new Wechatauth({account: 'my_account'});
// 1. 获取 uuid 并显示二维码
fetch('api.php?act=get_uuid').then(r=>r.json()).then(d=>{
    document.getElementById('qrcode').src = d.qrcode_url;
    startPolling();
});

function startPolling() {
    fetch('api.php?act=verify').then(r=>r.json()).then(d=>{
        if (d.status === 200) {
            // 登录成功,跳转或获取用户信息
            location.href = 'dashboard.php';
        } else if (d.status === 201) {
            setTimeout(startPolling, 1000); // 继续轮询
        } else if (d.status === 408) {
            setTimeout(startPolling, 2000);
        } else {
            alert('二维码失效,请刷新');
        }
    });
}
</script>

依赖与部署

  • 需 Snoopy 类(纯 PHP HTTP 客户端)或替换为 cURL/Guzzle。
  • Cookie 缓存目录需可写权限。
  • 生产环境建议用 Redis 存储 Cookie,多实例共享。
  • 微信网页版登录接口**非官方文档**,可能随时失效,重要业务请申请**微信开放平台**官方扫码登录(OAuth2.0)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved