首先你必须会用微信小程序的云函数功能:

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 的内容。相关推荐

  1. 小程序 node.js mysql_基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...

    高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...

  2. node 小程序 php,基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...

    高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...

  3. 基于Node.js+MySQL开发的开源微信小程序商城(微信小程序)部署环境

    在网上搜到小程序设计的项目,下载前辈的代码到本地环境,接下来需要如何部署代码到本地,并能够看到完整的效果展示. 服务器端: https://github.com/tumobi/nideshop Nid ...

  4. 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)

    高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...

  5. 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选) 1

    高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...

  6. 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程)

    本篇记录说明 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程,详细内容可私信交流) (第一次写博客,写得不好的地方见谅,面向新手,大佬请无视,不喜勿喷 ...

  7. 小程序步数解密php,微信小程序--获取微信运动步数的实例代码

    如今运动计步很火,不管是蚂蚁森林,仍是微信上都很火爆,本文介绍了微信小程序微信运动步数的实例代码,分享给你们php 思路:wx.login获取的code请求获取的session_key,wx.getW ...

  8. uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限

    方法1.uni-app登录加获取手机号解密-直接看此篇即可解决 微信小程序获取手机号注意点: 1.需要先登录,微信小程序登录看这篇 2.手机号获取到时加密的,需要后端解密或者前端自己解密(解密时候就会 ...

  9. 云开发口袋工具箱微信小程序源码(已更新)

    介绍: 这是一款云开发口袋工具箱微信小程序源码,,该版本的口袋工具箱涵盖了13个功能 分别为圣诞帽头像生成.二维码生成.日语50音图.汉字拼音查询.计算器.程序员黄历.娱乐摇骰子. 身材计算.所在地天 ...

最新文章

  1. 群晖系统挂载NTFS硬盘
  2. 优化老手分享网络优化中的4大方法
  3. Ubuntu14.04桥接网络设置与SSH登陆
  4. 《BI那点儿事》Microsoft 聚类分析算法——三国人物身份划分
  5. SpringData核心数据访问接口--PagingAndSortingRepository
  6. 虚拟搭建局域网模拟器_巧用虚拟局域网,快速搭建私有云,一步就能搞定
  7. JavaScript 删除Cookie
  8. [Spark] - HashPartitioner RangePartitioner 区别
  9. spring boot 2.0.3+spring cloud (Finchley)6、配置中心Spring Cloud Config
  10. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
  11. x11/xwindow GUI窗口代码范例
  12. 命令行 笔记本键盘禁用_Panasonic(松下)笔记本 使用技巧资料整理
  13. 基于spss的非线性回归(non-linear regression)
  14. 混合引用制作 九九乘法表
  15. 当ChatGpt接入微信群之后。。。
  16. 13.3断流_更新13.3.1后,用WiFi王者荣耀断流,时不时460.飞在天上的解决办法。
  17. HDU1068Girls and Boys
  18. PowerBuilder 11.x .NET开发视频教程
  19. Java、JSP汽车销售售后服务系统
  20. 魅族手机安装apk失败问题

热门文章

  1. 前端微信小程序电影类仿淘票票微信小程序
  2. ffprobe 获取视频每秒总帧数或视频总帧数及视频总时长
  3. Learn English with M / 学习英语的十句经典名言
  4. 绘声绘影2023简体中文版新功能介绍
  5. 高端蓝牙耳机哪个牌子好?四款高音质不错的蓝牙耳机推荐
  6. 02、alex 说过“普通运维人员就是秋后的蚂蚱”
  7. python输入直角三角形的两直角边,求周长、面积和锐角度数
  8. 如何使用Nginx防御DDoS攻击?
  9. 【已解决】ansys打开没有主界面,只有output窗口怎么回事?
  10. 【邻接矩阵乘法】沼泽鳄鱼