利用 node.js 云函数解密获取微信小程序的手机号码等加密信息 encryptedData 的内容。
首先你必须会用微信小程序的云函数功能:
1、创建一个名为token的云函数
2、在云开发的云函数管理中添加对应的token云函数
3、在开发工具中编辑云函数token
4、点击右键,安装并部署
大致是以上流程吧。
获取微信小程序 encryptedData 加密信息需要以下必须的常变量:
appid:可以通过 wxContext.APPID 获取;
secret:当初自己生成的密钥;
encryptedData:加密串,open-type授权时都可获得;
iv:同时还可以获得一个iv
js_code:用户登录时产生的code,用于生成sessionKey
sessionKey:自己生成;
标题创建云函数:
在微信开发者工具的cloudfuntions中,创建一个名为 token 的 云函数;
然后我们先在 token 目录下创建两个 Js 模块文件。
requestSync.js 的内容为:
const request = require("request");const requestSync = async (url) =>new Promise((resolve, reject) => {request(url, (err, response, body) => {if (err) {reject(err);} else {resolve(body);}})})
module.exports = requestSync
requestSync.js 用于从后端url中生成 sessionKey。
WXBizDataCrypt.js 的内容为(官方文件,未修改):
var crypto = require('crypto')function WXBizDataCrypt(appId, sessionKey) {this.appId = appIdthis.sessionKey = sessionKey
}WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {// base64 decodevar sessionKey = new Buffer(this.sessionKey, 'base64')encryptedData = new Buffer(encryptedData, 'base64')iv = new Buffer(iv, 'base64')try {// 解密var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)// 设置自动 padding 为 true,删除填充补位decipher.setAutoPadding(true)var decoded = decipher.update(encryptedData, 'binary', 'utf8')decoded += decipher.final('utf8')decoded = JSON.parse(decoded)} catch (err) {throw new Error('Illegal Buffer')}if (decoded.watermark.appid !== this.appId) {throw new Error('Illegal Buffer')}return decoded
}module.exports = WXBizDataCrypt
然后我们编辑一下index.js的内容:
// 云函数入口文件
const cloud = require('wx-server-sdk')
const WXBizDataCrypt = require('./WXBizDataCrypt')
const requestSync = require('./requestSync')
cloud.init()/*
该云函数需要传入的参数
{data:{js_code,encryptedData,iv}
}
*/
exports.main = async (event, context) => {const wxContext = cloud.getWXContext();const appid = wxContext.APPID;const encryptedData = event.encryptedData;const js_code = event.js_code;const iv = event.iv;const secret = 'eeeeeeeeeeeeeeee'const url = {url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + js_code+'&grant_type=authorization_code'}const req = await requestSync(url);const session = JSON.parse(req);const sessionKey = session.session_key;const pc = new WXBizDataCrypt(appid, sessionKey);const data = pc.decryptData(encryptedData, iv);return {data,event,wxtext: wxContext,openid: wxContext.OPENID,appid,unionid: wxContext.UNIONID,}
}
云函数创建好了,在token目录上点击右键,选择安装并部署,上传到云端。
使用云函数token获取解密信息
在使用的页面js文件中:
//我使用的是获取手机,原理一样。if (e.detail.errMsg == "getPhoneNumber:ok") {wx.login({success: function (res) {//获取codeconsole.log('code-->' + res.code)wx.cloud.callFunction({name: 'token',data: {js_code: res.code, //传入参数js_codeencryptedData: e.detail.encryptedData, //传入参数encryptedDataiv: e.detail.iv //传入参数iv},success: function (res) {console.log(res); //查看云函数返回的内容。},fail: function (err) {console.log('Err: ' + JSON.stringify(err))}})},fail:function (res){wx.showToast({icon: 'none',title: '失败',})}})console.log(e.detail.errMsg)console.log(e.detail.encryptedData)console.log(e.detail.iv)} else{wx.showToast({icon: 'none',title: '必须允许',})}
搞定。
利用 node.js 云函数解密获取微信小程序的手机号码等加密信息 encryptedData 的内容。相关推荐
- 小程序 node.js mysql_基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...
高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...
- node 小程序 php,基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...
高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...
- 基于Node.js+MySQL开发的开源微信小程序商城(微信小程序)部署环境
在网上搜到小程序设计的项目,下载前辈的代码到本地环境,接下来需要如何部署代码到本地,并能够看到完整的效果展示. 服务器端: https://github.com/tumobi/nideshop Nid ...
- 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)
高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...
- 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选) 1
高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...
- 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程)
本篇记录说明 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程,详细内容可私信交流) (第一次写博客,写得不好的地方见谅,面向新手,大佬请无视,不喜勿喷 ...
- 小程序步数解密php,微信小程序--获取微信运动步数的实例代码
如今运动计步很火,不管是蚂蚁森林,仍是微信上都很火爆,本文介绍了微信小程序微信运动步数的实例代码,分享给你们php 思路:wx.login获取的code请求获取的session_key,wx.getW ...
- uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限
方法1.uni-app登录加获取手机号解密-直接看此篇即可解决 微信小程序获取手机号注意点: 1.需要先登录,微信小程序登录看这篇 2.手机号获取到时加密的,需要后端解密或者前端自己解密(解密时候就会 ...
- 云开发口袋工具箱微信小程序源码(已更新)
介绍: 这是一款云开发口袋工具箱微信小程序源码,,该版本的口袋工具箱涵盖了13个功能 分别为圣诞帽头像生成.二维码生成.日语50音图.汉字拼音查询.计算器.程序员黄历.娱乐摇骰子. 身材计算.所在地天 ...
最新文章
- 群晖系统挂载NTFS硬盘
- 优化老手分享网络优化中的4大方法
- Ubuntu14.04桥接网络设置与SSH登陆
- 《BI那点儿事》Microsoft 聚类分析算法——三国人物身份划分
- SpringData核心数据访问接口--PagingAndSortingRepository
- 虚拟搭建局域网模拟器_巧用虚拟局域网,快速搭建私有云,一步就能搞定
- JavaScript 删除Cookie
- [Spark] - HashPartitioner RangePartitioner 区别
- spring boot 2.0.3+spring cloud (Finchley)6、配置中心Spring Cloud Config
- 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
- x11/xwindow GUI窗口代码范例
- 命令行 笔记本键盘禁用_Panasonic(松下)笔记本 使用技巧资料整理
- 基于spss的非线性回归(non-linear regression)
- 混合引用制作 九九乘法表
- 当ChatGpt接入微信群之后。。。
- 13.3断流_更新13.3.1后,用WiFi王者荣耀断流,时不时460.飞在天上的解决办法。
- HDU1068Girls and Boys
- PowerBuilder 11.x .NET开发视频教程
- Java、JSP汽车销售售后服务系统
- 魅族手机安装apk失败问题