在前一文章我讲了如何通过php后端解密encryptedData获得过去三十一天微信运动步数,这对于已有自己服务器者来说是个不错的选择,在服务器上需要进行十分复杂的配置,但如果仅为了实现这一个功能,去租用服务器,显然成本太高,微信小程序开发工具本身就为提供了更“轻”成本的方案——nodejs云函数。要运行云函数,要安装nodejs,百度十分容易搜索到,如果在开始本文前你还没有接触过云函数,请自行阅读官方小程序开发文档,云函数是微信小程序开发的一个重要内容且并不难学,有编程基础的人最多半天就可入门。
好了,正式开讲。
微信小程序通过wx.getWeRunData获得用户过去三十一天微信运动步数,获取成功后,会得到一个叫encryptedData的参数,它对将用户涉及用户隐私的信息进行了加密,如此处的微信步数,需要通过后端解密,才能得到有用信息,encryptedData的解密算法可参考官方文档https://developers.weixin.qq.com/minigame/dev/guide/open-ability/signature.html#加密数据解密算法。官方文档还提供示例代码https://res.wx.qq.com/wxdoc/dist/assets/media/aes-sample.eae1f364.zip下载。下载后得到一个压缩包,解压后里面有C++、Node、php、Python四种语言的后端语言示例代码,这里用Nodej.js用后端来解密数据。下面就对nodejs后端来解密微信步数数据。
首先,你得有一个正式appid,然后在这个appid下请申请一个密钥secret,测试账号是不能用于云开发的。
有了appid和secret,我们就可以新建项目了,打开开发工具,新建项目,这里选择云开发基础模板,可以看到开发工具已经为我们生成了一个quickstartFunctions的云函数,为了检测我们的含有云函数的小程序是否配置正确,可以将quickstartFunctions上传,然后任意测试一个官方的例程,比如获得openid,如果能正确输出结果,就说明我们配置是正确的,可以下一步了。
接下来就可以新建一个获得微信步数的云函数,在云函数根目录中新建一个文件夹,这里取名getrundata,在此文件下新建一个nodejs云函数,然后将WXBizDataCrypt.js文件也复制到这个目录下备用。
我们先将官方demo打开,将代码复制到刚建立的云函数中,可以看到解密需要encryptedData、iv和sessionKey,官方示例是静态的变量,我们要将它们换成“动态的”。encryptedData、iv可以通过wx.getWeRunData获得,sessionKey要复杂,我们先执行wx.login来获得res.code,然后来访问https://api.weixin.qq.com来获得,这里需要注意的是这个访问此地址也要在后端,在此处即nodejs,因为里面要提供你的appid和secret,前端容易反编译,那么你appid和secret便暴露了,具体说明可查看https://kf.qq.com/faq/1706236NjINj1706236VRZBR.html。
因此将云函数代码修改如下,保存上传云函数getrundata。
const cloud = require('wx-server-sdk');
const WXBizDataCrypt = require('./WXBizDataCrypt')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
// 获取openId云函数入口函数
exports.main = async (event, context) => {
// 获取基础信息
const wxContext = cloud.getWXContext();
var appid = "你的appid";
var secret = "你的secret";
var rescode=event.rescode;
var encryptedData=event.encryptedData;
var iv=event.iv;
var sessionKey = ''
const axios