Web端通过微信扫码登录,可以使用微信官方方案,但它属于付费方案。本篇中,我们总结了一种非付费方案,通过扫码微信小程序二维码进行登录。两者对比如下:
小程序登录需要具备的条件:
小程序涉及三个端:
Web端的工作主要包括:
Web端的功能比较简单也比较复杂,我们在此处不做代码列举。
在登录这一环节,后台主要做两件事情:
第一步:获取access_token
// 获取小程序access_token
async queryAccessToken() {
try {
return new Promise(async(resolve, reject) => {
let requestParams = {
grant_type: 'client_credential', // 指定值
appid: '', // 请填写自己小程序的appid
secret: '' // 请填写自己小程序的appsecret
}
let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=${requestParams.grant_type}&appid=${requestParams.appid}&secret=${requestParams.secret}`
request.get(url, async function(err, response, body) {
resolve(JSON.parse(body))
})
})
} catch(e) {
console.log(e)
}
}
第二步:获取小程序二维码
// 获取小程序二维码
async queryQRCode(access_token: string) {
try {
return new Promise(async (resolve, reject) => {
const params = {
path: 'pages/card/index', // 小程序登录功能的页面
}
const url = `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`
request({
url: `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
method: 'post',
body: JSON.stringify(params),
encoding: null,
}, async function(error, response, body) {
let data = body
var base64Img = "data:image/png;base64," + data.toString('base64'); // base64图片编码字符串
resolve(base64Img)
})
})
} catch(e) {
console.log(e)
}
}
说明:
我们只需要在后台:
之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
将上述微信官方平台的接口封装成服务,供小程序端调用即可。
小程序端开发一个微信小程序登录的页面,在Web端扫码成功后,就可在手机端弹出该登录页面,并在手机上确认登录。
<!--index.wxml-->
<view class="container">
<view>
<button bindtap="getUserLogin">点击登录</button>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
</view>
在getUserLogin
方法中,调用后端服务登录接口。登录成功后,Web端会携带用户信息一起,返回给客户端。