微信运动接口(获取自己的微信运动数据)

举报
别团等shy哥发育 发表于 2023/01/09 18:44:51 2023/01/09
【摘要】 @toc 1、微信运动接口wx.getWeRunData() 1.1 实现步骤  该接口获取用户过去30天微信运动步数。该接口比较复杂,具体操作步骤如下:先调用wx.login()接口获取code使用wx.request()接口向地址https://api.weixin.qq.com/sns/jscode2session?appid= appid &secret= secret &js_co...

@toc

1、微信运动接口wx.getWeRunData()

1.1 实现步骤

  该接口获取用户过去30天微信运动步数。该接口比较复杂,具体操作步骤如下:

  • 先调用wx.login()接口获取code

  • 使用wx.request()接口向地址https://api.weixin.qq.com/sns/jscode2session?appid= appid &secret= secret &js_code= res.code &grant_type=authorization_code发送网络请求,此时需要发送appid、secret和code3个参数,返回session_key。

  • 调用wx.getWeRunData()接口返回encryptedData和iv,其中encryptedData是加密的步数信息,需要解密为明文。

  • 在小程序中使用CryptoJS组件对encryptedData进行解密,此时需要用到appid、session_key和iv,解密得到明文的步数信息是小程序的可读信息。

1.2 接口参数

属性 类型 默认值 必填 说明
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数(调用成功、失败都会执行)

object.success回调函数:

属性 类型 说明 最低版本
encryptedData string 包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法。解密后得到的数据结构见后文
iv string 加密算法的初始向量,详细见加密数据解密算法
cloudID string 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据 2.7.0

官网示例代码:

wx.getWeRunData({
  success (res) {
    // 拿 encryptedData 到开发者后台解密开放数据
    const encryptedData = res.encryptedData
    // 或拿 cloudID 通过云调用直接获取开放数据
    const cloudID = res.cloudID
  }
})

2、获取运动数据案例

  本例使用wx.getWeRunData()接口获取用户的运动步数并显示。解密的CryptoJS组件可以在https://www.npm.js.com/package/crypto-js下载得到。如下图圈起来的所示:

image-20220322195752366

  getWeRunData.wxml:

<view wx:for="{{stepInfoList}}">{{30-index}}天前你运动了{{item.step}}步</view>

  getWeRunData.js:

var DataCrypt = require('../../utils/DataCrypt.js');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    stepInfoList:[]
  },


  onLoad: function (options) { 
    var that = this;
     wx.login({ 
       success: function (res) { 
         var appid = "你的appid"; 
         var secret = "你的小程序密钥"; 
         if (res.code) { 
           wx.request({ 
             url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + res.code + '&grant_type=authorization_code', 
             header: { 'content-type': 'json' }, 
             success: function (res) {
                  var session_key = res.data.session_key; 
                  console.log("seccion_key:"+session_key); 
               that.getWeRunData(appid, session_key); } 
                   }) 
                  }
             } 
             }) 
   }, 
                   //获取encryptedData(没有解密的步数)和iv(加密算法的初始向量) 
  getWeRunData: function (appid,session_key) {
      var that=this
      wx.getSetting({ success: function (res) {
         console.log(res); 
         if (!res.authSetting['scope.werun']) 
         {
           wx.authorize({
             scope: 'scope.werun',
             success:()=>{
               console.log("授权测试成功!!!")
             }
           })
            wx.getWeRunData({ 
                 success: function (res) {
                    console.log(res); 
                    var encryptedData = res.encryptedData; 
                    var iv = res.iv;
                    var pc = new DataCrypt(appid, session_key); 
                    console.log(pc); 
                    var data = pc.decryptData(encryptedData, iv) 
                   console.log("------" + data.stepInfoList[30].step)
                 that.setData({
                   stepInfoList: data.stepInfoList})
                 },
                fail: function (res) { console.log("获取数据失败") }
            })
          //  wx.showModal
          // ({ 
          //    title: '权限提示', 
          //    content: '获取微信运动步数需要开启计步权限', 
          //    success: function (res) 
          //     { 
          //      if (res.confirm) { 
          //        //跳转去设置 
          //        wx.openSetting({ 
          //          success: function (res) 
          //          {
          //            console.log("authSetting:"+res.authSetting)
          //          }
          //      })
          //      } 
          //     }
          // })
        } else {
               wx.getWeRunData({ 
                 success: function (res) {
                    console.log(res); 
                    var encryptedData = res.encryptedData; 
                    var iv = res.iv;
                    var pc = new DataCrypt(appid, session_key); 
                    console.log(pc); 
                    var data = pc.decryptData(encryptedData, iv) 
                   console.log("------" + data.stepInfoList[30].step)
                 that.setData({
                   stepInfoList: data.stepInfoList})
                 },
          fail: function (res) { console.log("获取数据失败") }
        })
      }
    }
    })
  },





  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    
  }
})

   这里我并没有给出我的appid和secret,敏感数据不要给别人看,你去你小程序后台用自己的。

   本例中CryptoJS组件属于网络开源项目,下载之后引入到小程序项目中,DataCrypt.js文件的作用是吧CryptoJS组件引入到小程序项目。wx.getWeRunData()接口获取的encryptedData经过CryptoJS组件解密之后得到的明文数据data中包含了微信运动数据,具体的数据在data.stepInfoList数组中,该数组共31条记录,对应当日和前30天的运动步数数据。其中,stepInfoList[0]是30天前的运动步数数据,setpInfoList[30]是当日的运动步数数据。

2.1 真机调试

image-20220322200347839

  点击允许之后,可以看到我们的微信运动数据就出来了。

image-20220322200405912

  验证下今天的数据是否正确,查看下自己的微信运动数据:

image-20220322200601678

可以看到,今天的数据和接口获取到的第0天的数据都是14972步,演示完毕。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。