目录
一、示例
二、具体实现说明
一、示例
二、具体实现说明
属性说明 属性名 | 说明 | 生效时机 |
---|
@getphonenumber | 获取用户手机号回调 | open-type="getPhoneNumber" |
<template><view class="login"><view class="content"><button class="button_wx" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"><u-icon name="weixin-fill" color="#FFFFFF" size="50"></u-icon><text class="button_text">授 权 登 录</text></button></view></view>
</template>
接口说明 接口 | 说明 |
---|
wx.login() | 获取登录凭证(code),通过凭证进而换取用户登录态信息 |
auth.code2Session | 登录凭证校验 |
参数说明 参数 | 说明 |
---|
code | 用户登录凭证(有效期五分钟),只能消费一次 |
WXBizDataCrypt.js | 用于对称解密微信接口返回的敏感数据(底部标红处有下载地址) |
appid | 微信公众号平台申请的AppID(小程序ID) |
secret | 微信公众号平台申请的AppSecret(小程序密钥) |
js_code | 登录时获取的 code |
grant_type | 授权类型(只需填写 authorization_code) |
返回值说明 返回值 | 说明 |
---|
openid | 用户唯一标识 |
session_key | 会话密钥 |
unionid | 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回,详见 UnionID 机制说明 |
errcode | 错误码 |
errmsg | 错误信息 |
encryptedData | 包括敏感数据在内的完整用户信息的加密数据 |
iv | 加密算法的初始向量,详见 用户数据的签名验证和加解密 |
errcode的合法值 值 | 说明 |
---|
-1 | 系统繁忙,此时请开发者稍候再试 |
0 | 请求成功 |
40029 | code 无效 |
45011 | 频率限制,每个用户每分钟100次 |
40226 | 高风险等级用户,小程序登录拦截 。风险等级详见用户安全解方案 |
下载地址:WXBizDataCrypt.js
<script>import WXBizDataCrypt from "@/utils/WXBizDataCrypt.js";//必要解密jslet that;export default {data() {return {appid: '填写你自己的appid',//必要secret: '填写你自己的secret',//必要code: '',//临时登录凭证};},mounted() {that = this;that.isLogin();that.getWxCode();},methods: {isLogin() {try {const phoneNumber = uni.getStorageSync('phoneNumber');if (phoneNumber) {//自动登录// 业务登录方法}} catch (e) {// error}},// 获取临时登录凭证getWxCode() {wx.login({success: res => {console.log('获取用户临时登录凭证code:', res.code);that.code = res.code;}})},// 获取手机号的回调函数getPhoneNumber(e) {const {errMsg,encryptedData,iv} = e.detail;if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {console.log('用户拒绝授权=>');} else {console.log('用户同意授权=>', errMsg);console.log('用户手机号加密数据:', e.detail.encryptedData);console.log('加密算法的初始向量:', iv);console.log('开始校验登录凭证code=>');//登录凭证校验,返回用户唯一标识、会话密钥uni.request({url: 'https://api.weixin.qq.com/sns/jscode2session',//微信登录凭证校验接口data: {appid: that.appid,secret: that.secret,js_code: that.code,grant_type: 'authorization_code'},success(sessionRes) {console.log('登录凭证code校验成功=>');const {openid,session_key} = sessionRes.data;console.log('用户唯一标识:', openid);console.log('会话密钥:', session_key);console.log('开始解密用户手机号=>');var pc = new WXBizDataCrypt(that.appid, session_key);//解密用户数据var data = pc.decryptData(encryptedData, iv);if (data) {console.log('用户手机号解密成功: ', data.phoneNumber);uni.setStorageSync("phoneNumber", data.phoneNumber);// 业务登录方法// that.startLogin(data.phoneNumber);}}});}},}}
</script><style lang="scss" scoped>.login {min-height: 100vh;}.content {margin-top: 500rpx;}.button_wx {background-color: #07c160;display: flex;justify-content: center;align-items: center;color: #FFFFFF;font-size: 30rpx;width: 601rpx;height: 100rpx;border-radius: 2.5rem;}.button_text {font-size: 20px;margin-left: 0.5em;}
</style>