700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信小程序获取手机号并解密详解

微信小程序获取手机号并解密详解

时间:2020-04-05 02:06:47

相关推荐

微信小程序获取手机号并解密详解

微信小程序获取手机号并解密

1 获取手机号2 解密2.1 获取所需数据2.2 解密返回数据

1 获取手机号

获取手机号的过程官方文档有详细的介绍。参考官方链接

要注意的是,此功能只对非个人且完成认证的开发者开发,个人开发者无法使用该功能。获取微信用户绑定的手机号,需先调用wx.login接口。

//wxml文件使用button按钮触发获取手机号事件,open-type="getPhoneNumber" 不能少<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>//js文件调用获取事件Page({getPhoneNumber (e) {console.log(e.detail.errMsg)console.log(e.detail.iv)console.log(e.detail.encryptedData)}})

这里主要使用到的数据为e.detail.iv和e.detail.encryptedData。此时返回的数据为加密过的手机号码数据,若想显示或者进行验证则需进行数据解密。

2 解密

2.1 获取所需数据

手机号码解密主要使用到的数据为:appId(开发者appid)、 session_key、 encryptedData(上边方法中获取的e.detail.encryptedData)、iv(上边方法中获取的e.detail.iv)。

所以在所需数据方面主要要获取的就是session_key。参考官方链接

获取session_key所需的主要参数为:appid、secret(这两个参数都可以在小程序官方-开发-开发设置中获取)、js_code。

//获取js_codewx.login({success (res) {console.log(res.code);}})

最终获取session_key。

wx.request({url: 'https://api./sns/jscode2session?appid=' + 开发者appid + '&secret=' + 开发者secret + '&js_code=' + 获取的code + '&grant_type=authorization_code',method: 'POST',header: {'content-type': 'application/json'},success: function (res) {console.log(res.data.session_key);}})

该官方接口只推荐在测试过程中使用,使用该接口需开启微信开发者工具-详情-本地设置-不校验合法域名…,投入使用时需在服务器端进行配置,具体方法可参考最下方文章链接。

2.2 解密返回数据

手机号码解密主要使用的是 CryptoJS 包,点击下载。

微信官方提供了多种编程语言的示例代码,(点击下载)但是没有js包,这里根据参考进行了稍微修改。

WXBizDataCrypt.js文件:

/*** Created by rd on /5/4.*/// 引入CryptoJS 路径依个人导入情况变动var Crypto = require('./cryptojs-master/cryptojs.js').Crypto;var app = getApp();function RdWXBizDataCrypt(appId, sessionKey) {this.appId = appIdthis.sessionKey = sessionKey}RdWXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码var encryptedData = Crypto.util.base64ToBytes(encryptedData)var key = Crypto.util.base64ToBytes(this.sessionKey);var iv = Crypto.util.base64ToBytes(iv);// 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);try {// 解密var bytes = Crypto.AES.decrypt(encryptedData, key, {asBpytes:true,iv: iv,mode: mode});var decryptResult = JSON.parse(bytes);} catch (err) {console.log(err)}return decryptResult}module.exports = RdWXBizDataCrypt

在需要解密的页面进行引入WXBizDataCrypt.js。

var WXBizDataCrypt = require('../../utils/WXBizDataCrypt')//需解密的事件中添加下边代码获取解密后的手机号码var appId = 开发者appidvar sessionKey = 获取的sessionkeyvar encryptedData = encryptedDatavar iv = ivvar pc = new WXBizDataCrypt(appId, sessionKey)var data = pc.decryptData(encryptedData , iv)console.log('解密后 data: ', data)

ps:在查看网上教程时有一篇比较详细的文章,可以参考借鉴,文章链接。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。