微信小程序获取三十天运动数据

279 阅读1分钟

在给自己的小程序添加工具页面时想到可以添加展示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);
                    }
                })
            }
	})
    }
})

返回的是时间戳和步数,下一步就是将其渲染出来

image.png