一、遇到的问题
1、获取手机号授权时报错:getPhoneNumber:fail no permission
原因是公众号没有进行企业认证
2、流程
1)登录拿session并保存
var that = thiswx.login({success: async function (res) {const res2 = await loginStart({method: "POST",query: {code:res.code},headerType: "application/json",});var sessions = res2.datas.sessionKeythat.setData({sessionkey:sessions})}})
2)授权拿手机号
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>
async getPhoneNumber(e){var phone = this.decryptData(this.data.sessionkey,e.detail.encryptedData,e.detail.iv)// 用获取的手机号来进行其他操作const res2 = await loginGet({method: "get",suffix:'?phone='+phone.phoneNumber,query: {},headerType: "application/json",});this.setData({position:res2.datas. position,shopAddr:res2.datas.shopAddr,shopName:res2.datas.shopName,userId:res2.datas.userId,userName:res2.datas.userName})},
3)解码
import CryptoJS from 'crypto-js'import {Base64} from 'js-base64'decryptData(sessionKey, encryptedData, iv) {let key = CryptoJS.enc.Base64.parse(sessionKey)let ivv = CryptoJS.enc.Base64.parse(iv)let decrypt = CryptoJS.AES.decrypt(encryptedData, key, {iv: ivv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7})return JSON.parse(Base64.decode(CryptoJS.enc.Base64.stringify(decrypt)))},
用到的两个包引入在终端里安装:npm install crypto-jsnpm install js-base64
另外,也可以把参数传给后端解析(sessionKey, encryptedData, iv))