1. 程式人生 > >微信小程式微信運動步數處理

微信小程式微信運動步數處理

微信小程式的微信運動每日步數獲取

  1. 第一步,獲取session_key,用來解密必須用到的

    ①這裡,獲取session_key就不敘述了,跟獲取openid的步驟是一樣的,詳見:

    注意:這裡要注意的是,在體驗版中,使用體驗版的appid和secret,微信小程式端是可以獲取到seesion_key和openid的,而在上線的正式版本中,使用正式的appid和secret,則會出現錯誤,具體原因,詳見上面一個連結

  2. 第二步,獲取encryptedData和iv,就是一些,微信步數加密後的資料

    ①這裡獲取這兩個資料,是呼叫wx.getWeRunData(OBJECT)這個介面獲取的,具體一些許可權的判斷和處理,詳見:

  3. 第三步,根據appid,session_key,iv來解密encryptedData,則會獲取到解密之後的資料

    ①到了這裡,請詳見:

    使用CryptoJS解決微信小程式使用者資訊解密

  4. 體驗版具體程式碼(正式版需在伺服器端處理資料):

    /**
      * 生命週期函式--監聽頁面載入
      */
     onLoad: function (options) {
       var that = this;
       wx.login({
         success: function(res){
           var 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(session_key); that.getData(appid,session_key); } }) } } }) }, //獲取encryptedData(沒有解密的步數)和iv(加密演算法的初始向量) getData: function (appid,session_key) { wx.getSetting({ success: function (res) { console.log(res); if (!res.authSetting['scope.werun']) { wx.showModal({ title: '提示', content: '獲取微信運動步數,需要開啟計步許可權', success: function (res) { if (res.confirm) { //跳轉去設定 wx.openSetting({ success: function (res) { } }) } else { //不設定 } } }) } else { wx.getWeRunData({ success: function (res) { console.log(res); console.log("appid:" + appid + "session_key:" + session_key + "encryptedData:" + res.encryptedData + "iv:" + res.iv); var encryptedData = res.encryptedData; var iv = res.iv; //使用解密工具,連結地址: //https://codeload.github.com/gwjjeff/cryptojs/zip/master var pc = new WXBizDataCrypt(appid, session_key); console.log(pc); var data = pc.decryptData(encryptedData, iv) console.log(data) }, fail: function (res) { wx.showModal({ title: '提示', content: '開發者未開通微信運動,請關注“微信運動”公眾號後重試', showCancel: false, confirmText: '知道了' }) } }) } } }) },

    ​得到的結果:

    流程時序圖: