uniapp怎么获取微信步数

微信步数获取的背景

微信步数是指用户在微信运动中记录的步数数据。微信提供了开放能力,允许第三方应用获取用户授权后的微信步数数据,以便进行进一步的数据分析和展示。使用时报错: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 = appId
  this.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
  }
})

注意

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/253297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

雷电4.0.50模拟器Android7.1.2安装xposed框架

官方论坛:https://xdaforums.com/t/official-xposed-for-lollipop-marshmallow-nougat-oreo-v90-beta3-2018-01-29.3034811/ Xposed 有分支 [EdXposed 和 LSPosed] 。 Edxposed框架现在支持android 8.0 - android 9.0 ,如果是android 7.0或更早的版本&…

1.3 第一个C程序

一、Dev-C的安装 下载地址:https://sourceforge.net/projects/orwelldevcpp/ 二、Dev-C简单的使用 2.1 首次打开配置 2.2 第一个程序的编辑、编译、运行 三、Hello Word程序讲解 3.1 程序框架 几乎所有的程序都需要这一段代码 3.2 输出 printf("Hello World…

大数据机器学习深度解读ROC曲线:技术解析与实战应用

大数据机器学习深度解读ROC曲线:技术解析与实战应用 一、引言ROC曲线简介 二、ROC曲线的历史背景二战雷达信号检测在医学和机器学习中的应用横跨多个领域的普及 三、数学基础False Positive Rate(FPR)计算方法 四、Python绘制ROC曲线导入所需…

广受好评的开源基础大模型最全梳理,你最钟意哪一个?

2023 年即将过去。一年以来,各式各样的大模型争相发布。当 OpenAI 和谷歌等科技巨头正在角逐时,另一方「势力」悄然崛起 —— 开源。 开源模型受到的质疑一向不少。它们是否能像专有模型一样优秀?是否能够媲美专有模型的性能? 迄…

全套SpringBoot讲义01

hello,我是小索奇,全套SpringBoot教程~一起来学习叭 文章目录 SpringBoot文档更新日志前言课程内容说明课程前置知识说明 SpringBoot基础篇JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作(一)JC-1-2.SpringBoot入门程序制…

Unity中URP下的菲涅尔效果实现(URP下的法线和视线向量怎么获取)

文章目录 前言一、实现思路二、实现原理我们可以由下图直观的感受到 N 与 L夹角越小,点积越接近(白色)1。越趋近90,点积越接近0(黑色) 三、实现URP下的菲涅尔效果1、我们新建一个Shader,修改为最…

beebox靶场A1 low 命令注入通关教程(上)

一:html注入 get HTML注入,就是当用户进行输入时,服务器没有对用户输入的数据进行过滤或转义,导致所有输入均被返回前端,网页解析器会将这些数据当作html代码进行解析,这就导致一些恶意代码会被正常执行。 首先进行简…

lv12 交叉开发环境搭建 3

1 ubuntu网络环境配置 目的:让Ubuntu可以上外网,让开发板可以与ubuntu互通 2 tftp 服务器环境搭建 tftp(Trivial File Transfer Protocol)即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件 传输…

人工智能知识蒸馏:模型精简与迁移的奇妙之旅

导言 在人工智能领域,知识蒸馏作为一种模型精简和知识迁移的技术手段,逐渐成为提高模型效能和适应更广泛场景的关键工具。知识蒸馏是近年来在深度学习领域备受瞩目的技术,其通过将大模型的知识传递给小模型,旨在实现模型的轻量化与…

实验报告九、使用枚举法验证6174猜想

一、实验目的: 1、了解6174猜想的内容。 2、熟练使用选择结构和循环结构。 3、了解标准库itertools中combinations()函数的用法。 4、熟练使用字符串的join(方法。 5、熟练使用内置函数int()、str()、 sorted()。 二、实验内容: 1955…

使用邮件群发平台,轻松实现高效沟通的4大优势!

新媒体带动着众多线上平台的发展,使得流量为企业带来了可观的营收。但是,随着短视频市场的饱和,想要再次获得初始时的流量就变得越发困难。在这个时候,企业不妨将眼光往邮件群发这个传统的营销方式上倾斜,特别是出海、…

HTTP 403错误:禁止访问,如何解除

“HTTP 403错误,禁止访问!”这句话是不是听起来就像是在告诉你:“嘿,你没有权限进这个房间!”没错,这就是你尝试访问某个网站或资源时可能会遇到的问题。别急,这里有一份秘籍,教你如…

【设计模式-2.4】创建型——抽象工厂模式

说明:本文介绍设计模式中,创建型设计模式的抽象工厂设计模式; 工厂模式的问题 在【设计模式-2.2】创建型——简单工厂和工厂模式这篇博文中,介绍过飞机大战游戏里,使用简单工厂和工厂模式来创建坦克、飞机、Boss对象…

解读Amazon Q | 用AI聊天机器人连接你与未来的无限可能

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 在美国当地时间11月28日,亚马逊云科技在拉斯维加斯举办…

vue中实现使用相框点击拍照,canvas进行前端图片合并下载

拍照和相框合成,下载图片dome 一、canvas介绍 Canvas是一个HTML5元素,它提供了一个用于在网页上绘制图形、图像和动画的2D渲染上下文。Canvas可以用于创建各种图形,如线条、矩形、圆形、文本等,并且可以通过JavaScript进行编程操作。 Canvas元素本身是一个矩形框,可以通…

【JavaScript】闭包的理解

闭包是指在一个函数内部创建另一个函数,并且内部函数可以访问外部函数的变量、参数以及其他内部函数,即使外部函数已经执行完毕。这种机制使得内部函数保留了对外部作用域的引用,即使外部作用域已经不再活跃。 为什么闭包重要? 闭…

Python之初识类与对象

类的概念与定义 在生活中,我们走在路边,看到一辆车,大脑中首先想到的是“这是一辆车,然后才是这是一辆什么牌子的车”,在这里,我们就用到了编程中的类的概念。同样的,看到一条小狗,…

php 使用box打包

1.安装box 2.检查是否安装成功 3.查看路径,把路径添加到环境变量,方便使用 4.php项目根目录增加box.json配置文件 5.运行命令生成。这个是在cmd中运行的,记得切换到php源码目录 6.使用 php FastAdmin.phar运行。 说明:如果是常驻…

LVS-DR模式部署

实验准备: 节点服务器 192.168.116.20 #web1 192.168.116.30 #web2 1.部署NFS共享存储 2.部署Web节点服务器 将两台服务器的网关注释掉 #重启网卡 systemctl restart network 修改节点服务器的内核参数|vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ign…

WPF——命令commond的实现方法

命令commond的实现方法 属性通知的方式 鼠标监听绑定事件 行为:可以传递界面控件的参数 第一种: 第二种: 附加属性 propa:附加属性快捷方式