微信小程序用户数据的签名校验和加解密 - 后端nodejs
在本文 微信小程序用户数据的签名校验和加解密 之前需要先看看
微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
代码封装是在上文添加的。
小程序代码:
1、在utils下的wechat.js文件里添加代码
/*** 获取微信加密的数据,传递给后端*/static getCryptoData2() {let code = "";return this.login().then(data => {code = data.code;console.log("login接口获取的code:", code);return this.getUserInfo();}).then(data => {console.log("getUserInfo接口", data);let { encryptedData, iv, rawData, signature } = data;let obj = {js_code: code,rawData,signature,encryptedData,iv};return Promise.resolve(obj);}).catch(e => {console.log(e);return Promise.reject(e);})};/*** 从后端获取解密后的数据* @param {object} params */static getMyData(params) {let url = 'https://xx.xxxxxx.cn/api/cryptdata';return this.request(url, params, "POST", "application/x-www-form-urlencoded");};
2、app.js修改
let wechat = require('./utils/wechat.js');
App({onLaunch() {this.getUserInfo();},getUserInfo() {wechat.getCryptoData2().then(d => {return wechat.getMyData(d);}).then(d => {console.log("从后端获取解密的数据", d.data);}).catch(e => {console.log(e);})}
})
后端 nodejs代码
解密实例代码在官网有:有python,nodejs,PHP,C++版本, 下载地址
1、解压后把nodejs里的WXBizDataCrypt.js文件放到common文件夹下;
2、新增一个路由,router,需要用到sha1模块
router.post("/cryptdata", async (req, res) => {let WXBizDataCrypt = require('../common/WXBizDataCrypt')const sha1 = require("sha1");try {let appId = "wx70XXXXXXXed01b";let secret = "5ec6e1cXXXXXXXXXbf161a79dd4";let { encryptedData, iv, js_code, rawData, signature } = req.body;// 获取session_keylet opts = {url: `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${secret}&js_code=${js_code}&grant_type=authorization_code`}let r1 = await Ut.promiseReq(opts);let { session_key } = JSON.parse(r1);if (!session_key) return res.json('');// 数据签名校验let signature2 = sha1(rawData + session_key);if (signature != signature2) return res.json("数据签名校验失败");// 解密let pc = new WXBizDataCrypt(appId, session_key)let data = pc.decryptData(encryptedData, iv)console.log('解密后 data: ', data)res.json(data);}catch (e) {console.log(e);res.json('');}
})
结果:
可以看出和上文很像,其实这2步一般都是一起做的,如果不需要数据校验,上文
就可以,需要数据校验就要用到本文的代码了。
参考地址:
https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
意外金喜的博客:http://blog.csdn.net/zzwwjjdj1
微信小程序用户数据的签名校验和加解密 - 后端nodejs相关推荐
- 微信java 签名验证_JAVA版微信小程序用户数据的签名验证和加解密
签名验证和加解密 数据签名校验 为了确保 开放接口 返回用户数据的安全性,微信会对明文数据进行签名.开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性. 签名校验算法涉及用户的session ...
- 微信小程序用户数据解密
概述 通过微信web开发者工具创建登录,获取用户信息,发送至后台,进行用户数据解密 详细 代码下载:http://www.demodashi.com/demo/10705.html 一.准备工作 1. ...
- 微信小程序数据拼接_微信小程序用户数据解密算法Java版
打开官方文档,开心~ 腾讯爸爸竟然给提供了解密算法 然而我下载解压后人傻了 可能鹅厂没养Java程序猿吧 那就看这C++改造吧 public class AnthCodeVerify { privat ...
- vue和小程序哪个好学一点_litemall,Spring Boot后端,微信小程序用户前端 + Vue用户移动端...
litemall 又一个小商场系统. litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端 注意: 由于第一次加载数据量较大,建议wif ...
- webform窗体怎么实现session唯一标识_微信小程序用户登录和登录态维护的实现_javascript技巧...
这篇文章主要介绍了微信小程序用户登录和登录态维护的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 让用户登录,标识用户和获取 ...
- 获取小程序用户信息+java_java获取微信小程序用户信息
第一步:获取openid.session_key等信息. /** * 获取微信小程序的用户openid和session_key/unionid * 返回格式:{"session_key&qu ...
- 小程序素材抓取软件_如何抓取微信小程序的数据?
2017年1月份备受关注的微信小程序功能正式上线了,好多知名平台纷纷推出了自己的微信小程序,例如大众点评.美团外卖.京东购物.对于我们爬虫开发者来说这绝对是好事情,意味着又多了一个数据来源,又多了一种 ...
- 微信小程序用户信息解
微信小程序用户信息解密 问题描述 当小程序在获取用户信息或者获取手机号的时候,用户微信接口返回的是AES加密之后的数据,所以需要解决 方法 就拿获取手机号来讲,前端通过微信接口: Page({getP ...
- 微信小程序用户登录信息过期处理
微信小程序用户登录信息过期处理 由于小程序对获取用户信息的新规定,获取用户信息必须通过一个button调出获取窗口,然而用户的token会过期,而本地存在的缓存可能会让用户误以为自己仍处于登录状态,但 ...
最新文章
- jmeter内存溢出处理方式记录
- 20175316 盛茂淞 实验一 Java开发环境的熟悉
- 绝了!一个妹子 rm -rf 把公司整个数据库删没了
- 32个最热CPLD-FPGA论坛
- Centos7常用命令[挂载文件系统]
- Qt工作笔记-正则表达式QProcess::startDetached中正则表达式的使用
- java 的 provider_Java里的Provider是什么?
- 串口通信工具android,Android串口通信工具
- A Story of One Country (Hard) CodeForces - 1181E2 (分治)
- matlab中各种线型-颜色-标记点
- 什么事件必须要我王二狗来处理?
- 【博学谷学习记录】超强总结,用心分享 | shell基础
- 2017年最新基于hexo搭建个人免费博客——从零开始
- 三大视角,聊聊我眼中的广告系统
- 数据中心交换机基础自学系列 | MAC简介
- 问题解决:inittramfs unpacking failed:Decoding failed
- signature=501807407682dd47ffe7345fc7b18d2e,Signature-Free Intrusion Detection
- STM8L 读写EEPROM(24LC64)
- android音乐播放器开发 SweetMusicPlayer 载入歌曲列表
- 浅析技能音效制作思路