微信小程序获取用户微信运动步数数据

微信小程序获取用户微信运动步数数据

微信<a href='/tag/miniprogram.html'>小程序</a>获取用户微信运动步数数据

如何通过小程序来获取微信运动的步数数据呢,这个api腾讯是开放的,今天我们来讲讲如何编写前后端代码实现这个功能。

一、小程序端代码

我们先获取sessionkey这个值,这个值是参与微信运动的数据解密的,所以要提前获取,那么怎么获取呢

wx.login({
  success(res) {
   console.log(res);
   var code = res.code
   wx.request({
   url: '后端url',
   method: "post",
   data: {
    code
   },
   success: function (res) {
    console.log(res.data.openid);
     if(res.code==200){
          that.setData({sessionkey:res.data});
     }
   
    }
   })
 }
})

后端的php返回sessionkey
<?php

$appid = "wx1231312321";
$appsecret = "12312334343534534535";


$code = $_GET['code'];
if ($code == '') {
echo json_encode([
'code' => '201',
'data' => 'code不能为空'
]);
exit();
}

$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$appsecret.'&js_code='.$code.'&grant_type=authorization_code';
$result = http_curl($url);
$token = json_decode($result, 1);
if (isset($token['session_key'])) {
$sessionkey = $token['session_key']; //拿到openid
echo json_encode([
'code' => '200',
'data' => $sessionkey
]);
exit();
}
echo json_encode([
'code' => '201',
'data' => "登陆失败"
]);
function http_curl($url) {
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, $url);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curlobj, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($curlobj);
curl_close($curlobj);
return $output;
}

?>


ok,获取sessionkey后放在上下文中存储,下面来编写获取微信运动步数的代码我:

在js中onload中获取微信运动的加密数据
onLoad() {
    var that = this
    wx.getWeRunData({
      success(res){
        console.log(res)
         
  wx.request({
   url: '后端解密url',
   data: {
    encrypteddata: res.encryptedData,
    iv: res.iv,
    session: that.data.sessionkey
   },
   method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
   // header: {}, // 设置请求的 header
   success: function (res) {
    let todayStep = res.data.stepInfoList.pop()
    that.setData({
     step: todayStep.step
    });
   }
  })
      }
    })

  },


二、后端php

后端主要是对数据进行解密
<?php

class Wxbizdatacrypt
{
private $appid;
private $sessionKey;

/**
* 构造函数
* @param $sessionKey string 用户在小程序登录后获取的会话密钥
* @param $appid string 小程序的appid
*/
public function __construct($appid, $sessionKey) {
$this->sessionKey = $sessionKey;
$this->appid = $appid;
}


/**
* 检验数据的真实性,并且获取解密后的明文.
* @param $encryptedData string 加密的用户数据
* @param $iv string 与用户数据一同返回的初始向量
* @param $data string 解密后的原文
*
* @return int 成功0,失败返回对应的错误码
*/
public function decryptData($encryptedData, $iv, &$data) {
if (strlen($this->sessionKey) != 24) {
return ErrorCode::$IllegalAesKey;
}
$aesKey = base64_decode($this->sessionKey);


if (strlen($iv) != 24) {
return ErrorCode::$IllegalIv;
}
$aesIV = base64_decode($iv);

$aesCipher = base64_decode($encryptedData);

$result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

$dataObj = json_decode($result);
if ($dataObj == NULL) {
return ErrorCode::$IllegalBuffer;
}
if ($dataObj->watermark->appid != $this->appid) {
return ErrorCode::$IllegalBuffer;
}
$data = $result;
return ErrorCode::$OK;
}

}


/**
* error code 说明.
* <ul>
* <li>-41001: encodingAesKey 非法</li>
* <li>-41003: aes 解密失败</li>
* <li>-41004: 解密后得到的buffer非法</li>
* <li>-41005: base64加密失败</li>
* <li>-41016: base64解密失败</li>
* </ul>
*/
class ErrorCode
{
public static $OK = 0;
public static $IllegalAesKey = -41001;
public static $IllegalIv = -41002;
public static $IllegalBuffer = -41003;
public static $DecodeBase64Error = -41004;
}

$pc = new Wxbizdatacrypt($appid, $sessionkey);
$errCode = $pc->decryptData($encrypteddata, $iv, $data);

if ($errCode == 0) {
print($data . "\n");
} else {
print($errCode . "\n");
}
?>

好了,可以获取到数据了。

微信<a href='/tag/miniprogram.html'>小程序</a>获取用户微信运动步数数据
好了,整个过程就这么简单。

{{collectdata}}

网友评论0