php 小程序 运动步数_【小程序+ thinkphp5】 获取微信运动数据

本文详细介绍了如何通过PHP代码从微信小程序中获取并解密微信运动数据,包括用户授权、获取openid、session_key,以及使用WXBizDataCrypt进行数据解密的过程。同时,展示了小程序端的wx.login、wx.getWeRunData和wx.getUserInfo的调用逻辑,确保数据安全传输。
摘要由CSDN通过智能技术生成

配置。请参看上篇文章。这里直接上代码

PHP 代码:

//获取微信运动数据:

public functiontest(){$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 接口不会弹窗询问

}

})

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值