在给自己的小程序添加工具页面时想到可以添加展示30天的微信运动数据,查阅相关文档后发现,可以使用阿里云开发,先是创建云函数,把自己的appId和secret填写获取session_key,引入crypto解密模块,想了解该解密模块可以自行查阅解密的过程。
'use strict';
exports.main = async (event, context) => {
const { encryptedData,iv,code } = event;
const res = await uniCloud.httpclient.request('https://api.weixin.qq.com/sns/jscode2session?appid=小程序的appId&secret=小程序的secret&js_code='+code+'&grant_type=authorization_code',{ dataType:'json'});
const session_key = res.data.session_key;//根据官方文档的2,3,4条我们先对这三个数据进行base64解码
const buf_session_key = new Buffer(session_key, 'base64');
const buf_encryptedData = new Buffer(encryptedData, 'base64');
const buf_iv = new Buffer(iv, 'base64')
// 解密模块
var crypto = require('crypto');
try {
var decipher = crypto.createDecipheriv('aes-128-cbc', buf_session_key, buf_iv);
decipher.setAutoPadding(true);
var decoded = decipher.update(buf_encryptedData, 'binary', 'utf8');
decoded += decipher.final('utf8');
decoded = JSON.parse(decoded);
}catch(err){
return {
code:-1
msg:err
}
}
//返回三十天的运动数据数据给客户端
return {
code:0,
data:decoded
}
};
uniapp的前端调用代码
uni.login({
success: (res) => {
const code = res.code;
wx.getWeRunData({
success: (res) => {
uniCloud.callFunction({
name: "decryptwerun",
data: {
code: code,
iv: res.iv,
encryptedData: res.encryptedData
},
success: (res) => {
console.log(res);
}
})
}
})
}
})
返回的是时间戳和步数,下一步就是将其渲染出来