小程序获取运动步数,后端C#版

官方API:

小程序wx.WeRunData用法

实现思路:

调用获取微信步数方法获取加密后步数信息和解密密文,调用后端解密方法进行解密

实现步骤

1,登录获取Code
2,调用接口 用 Appid+Secret+Code换取session_key
3,获取微信运动权限得到步数信息 encryptedData (加密) + iv(解密用)
4,调用后台方法进行解密(需要参数encryptedData +iv+session_key)
5,解密后得到步数信息

实现代码:

1,小程序js代码

var time = require('../../utils/util.js');
Page({

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

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var that = this;
    //登录获取code 
    wx.login({
      success: function (data) {
        wx.request({
          //获取openid session_key接口
          url: 'https://api.weixin.qq.com/sns/jscode2session?appid=XXXXXXXXX&secret=XXXXXXXXX&js_code=' + data.code + '&grant_type=authorization_code',
          method: 'GET',
          success: function (res) {
            //获取运动信息 encryptedData iv
            wx.getWeRunData({
              success(resRun) {
              	//解密
                wx.request({
                  url: 'http://wechatservice.icrmchina.com/Service1.svc/AES_decrypt',
                  data: {
                    encryptedDataStr: resRun.encryptedData,
                    key: res.data.session_key,
                    iv: resRun.iv
                  },
                  success: function (res) {
                    //字符串转json
                    var jsonStr = res.data;
                    jsonStr = jsonStr.replace(" ", "");
                    if (typeof jsonStr != 'object') {
                      jsonStr = jsonStr.replace(/\ufeff/g, "");//重点
                      var jj = JSON.parse(jsonStr);
                      res.data = jj;
                    }
                    //设置日期格式
                    var runData = res.data
                    if (runData.stepInfoList) {
                      runData.stepInfoList = runData.stepInfoList.reverse()
                      for (var i in runData.stepInfoList) {
                        runData.stepInfoList[i].date = time.formatTime(new Date(runData.stepInfoList[i].timestamp * 1000))
                      }
                      that.setData({ runData: runData.stepInfoList });
                    }                    
                  },
                  fail: function (e) {
                    console.log(e)
                  }
                })
              }
            });
          },
          fail: function (e) {
            console.log('失败:' + e)
          }
        })
      }
    })
  },
})

2,C#版本解密方法

         public string AES_decrypt(string encryptedDataStr, string key, string iv)    
        {    
            RijndaelManaged rijalg = new RijndaelManaged();    
            //-----------------      
            //设置 cipher 格式 AES-128-CBC       
            rijalg.KeySize = 128;      
            rijalg.Padding = PaddingMode.PKCS7;    
            rijalg.Mode = CipherMode.CBC;     
            rijalg.Key = Convert.FromBase64String(key);    
            rijalg.IV = Convert.FromBase64String(iv);      
            byte[] encryptedData= Convert.FromBase64String(encryptedDataStr);    
            //解密      
            ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV);     
            string result;                   
            using (MemoryStream msDecrypt = new MemoryStream(encryptedData))    
            {    
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))    
                {    
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))    
                    {  
                        result= srDecrypt.ReadToEnd();    
                    }    
                }    
            }    
            return result;    
        } 

3,解密后返回结构

 data:{
  "stepInfoList": [
      {
      "timestamp": 1445866601,
      "step": 100
    },
    {
      "timestamp": 1445876601,
      "step": 120
    }
  ]
}

基本上就是这些东西,最重要的就是解密,我是用C#写的,也可以用别的语言写。

4,效果图
小程序获取运动步数,后端C#版_第1张图片

你可能感兴趣的:(小程序,小程序步数,C#)