目录
扫码登录解决方案
快速接入文档马上接入

 

提供微信扫一扫登录能力。支持个人网站接入,无需企业认证,无需另外申请微信公众号, 也能即刻拥有微信 [扫一扫] 登录能力

 

1、登录时序图

登录时序图

2、生成登录二维码相关信息

 

注:登录二维码在开发者服务器直接生成,只需按指定规则生成即可

 

2.1、获取密钥secret

 

微信扫码登录本网站后,进入个人中心的“我的应用”页面,点击“创建应用”,输入应用名称回调URL地址 (回调URL用于接收登录成功后的用户信息)

 

 

 

2.2二维码参数规则如下:

 

示例:http://i.0526.xyz/qr?appid=64255e8f8&key=8oQXVpd2GBNiCdhz&expire=1681111339&sign=32d3f2e58a89c9c42b8a

 

参数说明

参数 类型 必填 说明
appid string 应用的appid
key string 随机字符串
expire int 二维码有效期(时间戳-2分钟以内)
sign string 签名

 

注:二维码参数直接在开发者服务器生成,二维码使用JS渲染展示即可

 

签名算法:MD5(appid+key+expire+secret)

 

3、用户扫码、登录成功后回调给开发者服务器

 

用户登录成功后,登录服务器会给开发者服务器推送通知,该请求是一个“POST”类型,内容格式是application/json,参数如下

 

3.1、开发者服务器接收到的返回参数

·请求类型 POST

·内容格式 application/json

 

参数 类型 必填 说明
event string 事件:扫码、登录
data object 事件信息:手机号等
timestamp int 时间戳

 

3.2开发者服务器返回状态码

当开发者服务器接收到登录服务器回调通知后,开发者服务器需要向登录服务器返回响应信息

·内容格式 JSON

·返回字段

参数 类型 必填 说明
state string SUCCESS,FAIL

 

示例代码:

    ## 前端代码
    <div class="qr"></div>

    function showLoginQr() {
        const API_URL = `/api/base/login/qr`
        fetch(`${API_URL}`)
            .then(res => {
                if (res.ok) {
                    res.json().then(rs => {
                        if (rs.code === 1000) {
                            let url = 'http://i.0526.xyz/qr?appid=' + rs.data.appid + '&key=' + rs.data.key + '&expire=' + rs.data.expire + '&sign=' + rs.data.sign;
                            // 二维码渲染,示例使用kjua渲染,这里可使用其他JS渲染方案替代
                            document.querySelector('.qr').appendChild(kjua({text: url}))
                            const t = setInterval(function () {
                                if (rs.data.expire > parseInt(new Date().getTime() / 1000)) {
                                    queryState(rs.data.key) // 轮询查询
                                } else {
                                    clearInterval(t)
                                }
                            }, 1000)
                        }
                    })
                }
            })
    }
    function queryState(key) {
        const API_URL = `/api/base/login/qr/` + key
        fetch(`${API_URL}`)
            .then(res => {
                if (res.ok) {
                    res.json().then(rs => {
                        if (rs.code === 1000) {
                            switch (rs.data) {
                                case 'SCAN':
                                    console.log('扫码成功');// 已经扫码的效果
                                    break
                                default:
                                    console.log('登录成功');// 此次处理登录成功逻辑,如cookie,token等
                                    clearInterval(1)
                            }
                        }
                    })
                }
            })
    },

                    
    ### 后端逻辑
    后端代码这里不做具体示例,只做实现逻辑描述。后端需实现3个接口
    1. 二维码参数生成接口
    2. 登录状态轮询接口
    3. 回调接口

    平台把当前扫码的状态通过回调接口推送给开发者服务器,开发者服务器处理登录逻辑并缓存,前端通过登录状态轮询接口获取登录状态
                    

联系我们

Contact us

深圳市零伍贰陆科技有限公司

微信扫码登录