uniapp怎么获取微信步数

news/2025/2/14 6:01:36/

微信步数获取的背景

微信步数是指用户在微信运动中记录的步数数据。微信提供了开放能力,允许第三方应用获取用户授权后的微信步数数据,以便进行进一步的数据分析和展示。使用时报错:fail api scope is not declared in the privacy agreement。出现这些问题是因为 隐私政策 需要更新!!!

后台设置

去小程序后台设置-服务内容声明里补充用户隐私协议,用到的api都需要加上,然后审核通过后再试试,如果还不行,重新提交发版小程序试试。

获取用户授权

要获取用户的微信步数数据,首先需要用户的授权。在UniApp中,可以使用uni.login()函数获取用户的登录凭证,然后将该凭证发送到后台服务器,再由后台服务器向微信服务器请求用户的授权。

uni.login({success: res => {if (res.code) {// 将res.code发送到后台服务器}}
});

后台服务器获取步数授权

后台服务器收到用户的res.code后,可以使用微信提供的登录凭证校验接口,获取用户的openid。然后,通过获取的openid,再向微信服务器请求步数授权。

获取用户微信步数

wx.getWeRunData({success: res => {const encryptedData = res.encryptedData;const iv = res.iv;// 解密步数数据并进行进一步处理}
});

数据解密和处理

由于微信步数数据是加密的,需要使用解密算法对数据进行解密。解密后的数据包括步数、时间戳等信息,可以根据需求进行进一步的数据处理和展示。有两种揭秘方式。

后端解密

将得到的数据传递给后台,由后台调用微信服务端接口解密

前端解密

云函数获取微信步数

通过cryptojs解密encryptedData,获取微信步数

1.安装  npm install crypto-js

2.在utils下创建WXDataCrypt.js文件

// 引入CryptoJS
var Crypto = require('cryptojs/cryptojs.js').Crypto;
var app = getApp();function WXDataCrypt(appId, sessionKey) {this.appId = appIdthis.sessionKey = sessionKey
}WXDataCrypt.prototype.decryptData = function (encryptedData, iv) {// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码var encryptedData = Crypto.util.base64ToBytes(encryptedData)var key = Crypto.util.base64ToBytes(this.sessionKey);var iv = Crypto.util.base64ToBytes(iv);// 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);try {// 解密var bytes = Crypto.AES.decrypt(encryptedData, key, {asBpytes:true,iv: iv,mode: mode});var decryptResult = JSON.parse(bytes);} catch (err) {console.log(err)}if (decryptResult.watermark.appid !== this.appId) {console.log(err)}return decryptResult
}module.exports = WXDataCrypt

3.解密信息的js页面

const app = getApp()
let WXDataCrypt= require('../../utils/WXDataCrypt.js');
let AppId = '你的appid'
let AppSecret = '你的appsecrect'
let session_key = '微信session_key'
let stepInfoList = []
//获取步数
const getRunData = () => {var pc = new WXDataCrypt(AppId, session_key)wx.getWeRunData({success: function (res) {var data = pc.decryptData(res.encryptedData , res.iv)console.log('解密后 data: ', data)stepInfoList = data.stepInfoList}
})

注意

用户的微信步数数据可能因为用户关闭微信运动或隐私设置而无法获取。

用户的微信步数数据不会实时更新。

这里有一篇持续更新的文章


http://www.ppmy.cn/news/1273135.html

相关文章

用XPath爬取Crossin教室的文章列表页信息示例

一、背景: 2023.12.12,经过本人的多日权衡比较,我决定购买了crossin老师的Python服务。主要实现了能够通过其编程教室提供的答疑群平台答疑解惑。基于其答疑服务感觉还是不错的。同时能够逐步扎实Python基础与爬虫等相关的技术。今日用xpath完成了一个爬…

加密的艺术:对称加密的奇妙之处(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

webpack详细教程

1,什么是webpackwebpack | webpack中文文档 | webpack中文网 Webpack 不仅是一个模块打包器(bundler),更完整的讲是一个前端自动化构建工具。在 Webpack 看来前端的所有资源文件(s/json/css/img/less/...)都会作为横块处理它将根据模块的依赖关系进行静…

14.Spring2.7.x 整合 Elasticsearch7.17

Elasticsearch:一个分布式的、Restful 风格的搜索引擎;支持对各种类型的数据的索引;搜索速度快,可以提供实时的搜索服务;便于水平扩展,每秒可以处理 PB 级海量数据 目录 1.Spring 整合 Elasticsearch 1.1…

前端已死?尊嘟假嘟?

随着人工智能和低代码的崛起,“前端已死”的声音逐渐兴起。前端已死?尊嘟假嘟?快来发表你的看法吧! 一、为什么会出现“前端已死”的言论 人工智能和低代码的崛起:随着人工智能和低代码技术的发展,越来越…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述: 我们平时说的java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器,可以编译出相同的字节码文件&…

C#基础——构造函数、析构函数

C#基础——构造函数、析构函数 1、构造函数 构造函数是一种特殊的方法,用于在创建类的实例时进行初始化操作。构造函数与类同名,并且没有返回类型。 构造函数在对象创建时自动调用,可以用来设置对象的初始状态、分配内存、初始化字段等操作…

【2023年公司智能工具降本增效分享总结】「智能工具的力量」总结分享我司通过AI提升软件开发效率与质量调研报告,问题踩坑之路

总结分享我司通过AI提升软件开发效率与质量调研报告,问题踩坑之路 调研背景调研目的调研方向,关注以下几个方面方向1:代码生成与优化(提升研发效率 节约时间)方向2:代码隐患审查Review(提升研发…