当前位置: 首页> 房产> 建材 > 找附近的装修公司_高端网站设计优化建站_专业网站优化推广_优化推荐

找附近的装修公司_高端网站设计优化建站_专业网站优化推广_优化推荐

时间:2025/7/10 11:05:53来源:https://blog.csdn.net/qq_42822849/article/details/146422768 浏览次数:0次
找附近的装修公司_高端网站设计优化建站_专业网站优化推广_优化推荐

uniapp 微信小程序 手机号快速验证组件 解密 encryptedData 获取手机号

手机号快速验证组件

该能力旨在帮助开发者向用户发起手机号申请,并且必须经过用户同意后,开发者才可获得由平台验证后的手机号,进而为用户提供相应服务。
以下是旧版本组件使用指南,注意使用旧版本组件时,需先调用wx.login接口。建议开发者使用新版本组件,以增强小程序安全性。详情新版组件使用指南。
因为需要用户主动触发才能发起手机号快速验证,所以该功能不由 API 来调用,需用 button 组件的点击来触发。

使用方法

需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。

注意事项

在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

uniapp代码示例

注意原生的写法不一样

<button class="list-btn" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">立即购买</button>

接下来就是解密

第一步:

安装 crypto-js

pnpm install crypto-js

第二步:

新建WXBizDataCrypt.ts文件
创建 WXBizDataCrypt 类 :用于解密 encryptedData

import CryptoJS from 'crypto-js';export class WXBizDataCrypt {private appId: string;private sessionKey: string;constructor(appId: string, sessionKey: string) {this.appId = appId;this.sessionKey = sessionKey;}decryptData(encryptedData: string, iv: string) {// base64 decodeconst sessionKey = CryptoJS.enc.Base64.parse(this.sessionKey);const encryptedDataBuffer = CryptoJS.enc.Base64.parse(encryptedData);const ivBuffer = CryptoJS.enc.Base64.parse(iv);try {// 解密const cipherParams = CryptoJS.lib.CipherParams.create({ciphertext: encryptedDataBuffer});const decipher = CryptoJS.AES.decrypt(cipherParams, sessionKey, {iv: ivBuffer,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});const decoded = decipher.toString(CryptoJS.enc.Utf8);const decodedData = JSON.parse(decoded);if (decodedData.watermark.appid !== this.appId) {throw new Error('Invalid appId');}return decodedData;} catch (err) {throw new Error('Decrypt failed');}}
}

第三步:

在需要解密的页面中引入 WXBizDataCrypt 类,并使用 decryptData 方法解密 encryptedData

import { WXBizDataCrypt } from '../../utils/WXBizDataCrypt';
const decryptPhoneNumber = (e: any) => {const { encryptedData, iv } = e.detail;const appId = 'your_app_id';const sessionKey = 'your_session_key'; const wxBizDataCrypt = new WXBizDataCrypt(appId, sessionKey);const decryptedData = wxBizDataCrypt.decryptData(encryptedData, iv);console.log('Decrypted data:', decryptedData);
}

在这里插入图片描述

在这里插入图片描述

关键字:找附近的装修公司_高端网站设计优化建站_专业网站优化推广_优化推荐

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: