IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 使用uniCloud云函数在小程序中解码微信运动步数 -> 正文阅读

[移动开发]使用uniCloud云函数在小程序中解码微信运动步数

前言

获取微信运动数据这个API很早就在微信小程序里支持了,相信大家在很多小程序里都见过用这个步数数据来开发的一些玩法。比如:步数换积分,步数排行榜,步数捐助等等。这一小节,我们就来实战一下在uniCloud云函数中读取并解码微信运动步数数据。

获取微信运动步数

此API可以获取用户过去三十天微信运动步数。使用前需要先调用 wx.login 接口。

调用方法:

wx.login({  
	success:()=>{    
		wx.getWerunData({      
			success:(res)=>{        
				console.log(res);     
			 }
	     }) 
	 }
})

success回调中res的数据结构

属性类型说明
encryptedDatastring包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法。解密后得到的数据结构见后文
ivstring加密算法的初始向量,详细见加密数据解密算法

通过这个API拿到的数据并不能直接使用,需要我们在云端解密。如果使用uniCloud腾讯云服务,那么解密非常简单。不过由于本课程中使用的都是uniCloud阿里云,所以我们接下来就学习如何解密这些数据。

uniCloud云函数解密微信步数

在云函数目录下新建一个云函数decryptwerun图片

根据微信官方文档中对解密的描述图片

我们可以得知,除了刚才getWerunData中获得的ivencryptedData外,还需要用code2session接口先换到session_key,在实战1:以小程序用户id建立会员系统中我们也已经学到过了,所以这个解密云函数要接受三个参数。

//code来自wx.login接口
const { encryptedData,iv,code } = event;

首先用code换取session_key

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')

然后我们使用crypto.js来帮我们解密数据

//需要先npm install crypto
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);    
	console.log(decoded);
}catch(err){  }

前端调用此云函数

btnGetWerun(){  
	wx.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);            
						}          
					})        
				}      
			})   
		 }  
	 })
 }

现在,我们已经成功获得了过去31天的微信运动步数数据,最新一天的数据在stepInfoList数组中最后一条图片

timestamp为步数最后更新的时间戳,step为当日步数。

小结

解码看上去很复杂,其实官方文档还是写得很清楚的。拿到步数之后,要怎么用,就看大家的创意了。我在2017年开发的社区小程序里设计过一个小区运动达人排行榜,每天需要用户来签到上传步数,然后统计一个月的总步数来做排名。

图片

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:40:09  更:2022-07-21 21:41:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:25:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码