【小程序+ thinkphp5】 獲取微信運動數據


配置。請參看上篇文章。這里直接上代碼

 

PHP 代碼:

  //獲取微信運動數據:
        public  function test(){
            $code = input("code");
            $signature = input("signature"); //數據簽名
            $rawDate = $_GET['rawData']; //記住不應該用TP中的input方法,會過濾掉必要的數據
            $encryptedData = $_GET['encryptedData']; //微信運動數據
            $iv = $_GET['iv']; //初始向量
            $nickname = input("nickname"); //用戶昵稱
            $avatarurl = input("avatarurl"); //用戶頭像
            if(empty($code) || empty($signature)   || empty($rawDate)  ||empty($encryptedData)  || empty($iv)  || empty($nickname) || empty($avatarurl) ){
                return json(['code'=>'2','message'=>"參數錯誤","result"=>null]);
            }
            //開發者使用登陸憑證 code 獲取 session_key 和 openid
            $APPID = config::get("config.wx_appid"); 
            $AppSecret = config::get("config.wx_appsecret"); 
            $wx_request_url = config::get("wechat.wx_request_url"); 
            $param = array( 
              'appid' => $APPID, 
              'secret' => $AppSecret, 
              'js_code' => $code, 
              'grant_type' => 'authorization_code'
            ); 
            // 一個使用curl實現的get方法請求
            $arr = http_send($wx_request_url, $param, 'post'); 
            $arr = json_decode($arr,true);
            if(isset($arr['errcode']) && !empty($arr['errcode'])){
                return json(['code'=>'2','message'=>$arr['errmsg'],"result"=>null]);
            }
            $openid = $arr['openid'];
            $session_key = $arr['session_key'];
    
            // 數據簽名校驗
            $signature2 = sha1($rawDate.$session_key); 
            if ($signature != $signature2) {
                $msg = "shibai 1";
                return json(['code'=>'2','message'=>'獲取失敗',"result"=>$msg]);
            }
    
            //開發者如需要獲取敏感數據,需要對接口返回的加密數據( encryptedData )進行對稱解密
            include_once (EXTEND_PATH. 'Wxdev/wxBizDataCrypt.php');
            $pc = new \WXBizDataCrypt($APPID, $session_key);
            $errCode = $pc->decryptData($encryptedData, $iv, $data);  //其中$data包含用戶的所有數據
            if ($errCode != 0) {
                return json(['code'=>'2','message'=>'獲取失敗',"result"=>null]);
            }
            if(empty($data)){
                return json(['code'=>'2','message'=>'暫無數據',"result"=>null]);
            }
            $data = json_decode($data,true);
            $list = $data["stepInfoList"];
            foreach ($list as $key => $value) {
                $list[$key]['time'] = date("Y-m-d H:i:s",$value['timestamp']);
            }
            return json(['code'=>'1','message'=>'獲取成功',"result"=>$list]);
            
    
                    
    
    
        }

 

小程序代碼:

 //獲取微信運動
    wx.login({
      success: loginres=>{
         let code = loginres.code;
         if(code){
              wx.getWeRunData({
                success: runres => {
                  let encryptedData = runres.encryptedData
                  let iv = runres.iv
                  wx.getUserInfo({
                    success: infores => {
                        let userinfo = infores.userInfo
                        let signature = infores.signature;
                        let rawData = infores.rawData;
                        wx.request({
                          url: 'https://www.test.com/wechat/index/test',
                          data: {
                            "code": code,  
                            "signature": signature,
                            "rawData": rawData,
                            "nickname": userinfo.nickName,
                            "avatarurl": userinfo.avatarUrl,
                            'iv': iv,
                            'encryptedData': encryptedData
                          },
                          header:{
                              "content-type" : "application/x-www-form-urlencoded"
                          },
                          success: function (info) {
                            console.log(info);
                          },
                          fail:function(res){
                                console.log(res);
                          },
                          complete:function(res){
                            console.log(res);
                          }
                        })//request結束
                    }
                  }) //userinfo結束
                }
              })//微信運動結束
         }else{
           that.alert("獲取用戶登陸失敗" + loginres.errMsg)
         }

       }

    })  

授權代碼:

    // 獲取用戶信息
    wx.getSetting({
      success: res => {
        var code = res.code;  //獲取code
        //訪問用戶權限
        if (res.authSetting['scope.userInfo']) {
          // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框
         
        }
        //訪問微信運動
        if (!res.authSetting['scope.werun']) {
          wx.authorize({
            scope: 'scope.werun',
            success() {
              // 用戶已經同意小程序使用微信運動,后續調用 wx.getWeRunData 接口不會彈窗詢問
              
            }
          })
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM