uni小程序获取手机号 及nodejs解密

按照官网要求:从基础库 2.21.2 开始,对获取手机号的接口进行了安全升级 ;因为需要用户主动触发才能发起获取手机号接口,所以该功能不由api来调用,需用 button 组件的点击来触发 。

HTML部分

需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取iv和encryptedData

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">一键登录</button>

JS部分

        getPhoneNumber(e) {
			// 点击触发的回调
			console.log(e);
			// 开发者兼容用户点击了拒绝的使用场景
			if (e.target.errMsg == 'getPhoneNumber:fail user deny') {
				console.log('用户点击了拒绝');
				uni.showToast({
					title: '您取消了授权!!!',
					icon: 'none'
				});
			} else {
				console.log('点击了允许', e.target);
				// 利用后台去解密
				let { iv, encryptedData } = e.target;
				//利用uni.login方法获取临时登录凭证code
				uni.login({
					success: (res) => {
						console.log(res);
						let code = res.code;
						// 向后端发起网络请求
						uni.request({
							url: 'http://localhost:3000/registration/getToken', //服务器地址
							method: 'GET', //请求方式
							data: {
								//接口参数
								iv,
								encryptedData,
								code,
							},
							success: (res) => {
								console.log('手机号', res);
							}
						});
					}
				});
			}
		},

需要在微信官方文档下载解密文件微信官方文档

解压后将node里面的  WXBizDataCrypt.js放在对应的目录里面

nodejs后端部分

const express = require('express');
const router = express.Router();
const request = require('request')
// 引入从微信官方文档中下载的请求模块
var WXBizDataCrypt = require('../utils/WXBizDataCrypt')

const ART_APP_ID = 'xxxxxxxxxxxxx'//AppID(小程序ID)
const ART_APP_SECRET = 'xxxxxxxxx'//AppSecret(小程序密钥)

// 获取手机号
router.get('/getToken', (req, res) => {
    console.log('请求参数req:', req.query)
    // 后台需要参数appid encryptedData code(临时登录凭证)
    let { iv, encryptedData, code } = req.query
    request("https://api.weixin.qq.com/sns/jscode2session?appid=" + ART_APP_ID + "&secret=" + ART_APP_SECRET + "&js_code=" + code + "&grant_type=authorization_code", (e, r, b) => {
        let vals = JSON.parse(b)
        var sessionKey = vals.session_key
        var pc = new WXBizDataCrypt(ART_APP_ID, sessionKey)
        var data = pc.decryptData(encryptedData, iv)
        res.send(data)
    })
})

module.exports = router;

 最后当然就拿到了啊,拜拜

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序中的手机号解密文件cryptojs是一个可以实现加密和解密的JavaScript库。这个库提供了一些加密算法,包括AES、DES、Rabbit、RC4、SHA-1/SHA-2/SHA-3等。它的主要特点是轻量级、可扩展性好、安全性高、性能优秀等。 在微信小程序中,我们可以使用cryptojs来解密手机号码。首先,我们需要从微信服务器获取到加密后的手机号码和密钥。然后,通过cryptojs提供的解密算法,将加密后的手机号码和密钥作为参数传入,得到解密后的手机号码。 具体实现流程如下: 1. 获取加密后的手机号码和密钥 在微信小程序中,我们可以使用wx.login()接口获取到临时登录凭证以及session_key。然后,再调用wx.getUserInfo()接口获取到用户的加密数据,其中就包含了加密后的手机号码和密钥。 2. 加载cryptojs库 我们可以在小程序中导入cryptojs库的JS文件,也可以在CDN上加载库文件。当然,我们也可以将库文件下载到本地,然后在小程序中引用。 3. 解密手机号码 在获取到加密后的手机号码和密钥后,我们可以调用cryptojs提供的解密算法,将加密后的手机号码和密钥作为参数传入即可。具体的代码实现可以参考下面的示例代码: var decrypted = CryptoJS.AES.decrypt(encryptedData, sessionKey, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}); var phoneNumber = decrypted.toString(CryptoJS.enc.Utf8); 通过以上步骤,我们就可以在微信小程序中使用cryptojs库来解密手机号码了。需要注意的是,在使用cryptojs解密时,需要确保加密算法、密钥和初始向量都正确,否则解密会失败。同时,我们也需要注意保护好加密数据和密钥,避免泄露给不法分子。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值