【小程序+ 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 接口不会弹窗询问 }
})
}
【小程序+ thinkphp5】 获取微信运动数据的更多相关文章
- 【最新】破解微信小程序,获取微信小程序源码,破解微信wxapkg,仅需5秒
一个后端第一次接触iview,就简单写了个网站. 之前看到有人发解析wx小程序源码包的软件,但是因为微信的升级,之前的办法已经不行了.现在重新改了js文件,适配了最新的版本. 之前微信wxapkg包获 ...
- 微信小程序后台获取用户的opeid
1.微信小程序后台获取登录用户的openid,首先微信小程序将code传给后台服务器 wx.login({ success: function (res) { var code = res.code ...
- 微信小程序添加外部地图服务数据
先上效果: 缘起 使用微信小程序做地图相关功能的时候,有个需求是需要接入自己发布的地图服务.查看微信小程序地图组件文档,发现它对地图相关的支持很少,只有一些基础功能,比如添加点.线.面.气泡和一些常规 ...
- nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId
nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ...
- 微信小程序unionid获取问题
微信小程序使用login获取unionid时可能获取不到,原因可能是该微信账号没有关注小程序所在公众号等.但在微信小程序中使用微信注册,必须要用unionid注册时,大部分用户就会因此无法注册成功. ...
- 微信小程序如何获取openid
微信小程序如何获取openid wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId // ...
- 微信小程序验证码获取倒计时
wxml <button disabled='{{disabled}}' bindtap="goGetCode">{{code}}</button> js ...
- 【微信小程序】获取用户地理位置权限,二次请求授权,逆解析获取地址
摘要:微信小程序内获取用户地理位置信息授权,被拒绝后二次获取,获取权限后逆解析得到用户所在省市区等.. 场景:商城类小程序,在首页时需展示附近门店,即用户刚进入小程序时就需要获取到用户位置信息 ste ...
- 微信小程序,获取二维码
微信小程序,获取二维码 找到一篇很实用的博客,他已经写得很详细了,自己也懒得写,亲测有效 参考网址
随机推荐
- e831. 从JTabbedPane中删除一个卡片
// To create a tabbed pane, see e828 创建JTabbedPane // Remove the last tab pane.remove(pane.getTabCou ...
- EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))
一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...
- 【经验之谈】Git使用之TortoiseGit配置VS详解;国内几大Git代码托管网站
转载自: http://www.cnblogs.com/xishuai/p/3590705.html http://www.cnblogs.com/shanyou/p/3662482.html
- Yii2 cache的用法(1)
数据缓存需要缓存组件提供支持,它代表各种缓存存储器, 例如内存,文件,数据库. 'components' => [ 'cache' => [ 'class' => 'yii\cach ...
- Spring定时器的两种实现方式
有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz. 1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 imp ...
- SharePoint PowerShell创建一个GUID
在编辑SharePoint后台XML架构时常需要在ID属性上填写一个GUID (Globally Unique Identifiers 全局唯一标识的简称): 我们可以打开SharePoint管理控制 ...
- 11gR2 RAC:更换OCR、votedisk
要点: ocrconfig 备份-恢复 ocrconfig 导出-导入 crsctl querry css votedisk crsctl replace votedisk {+dsikgroup|s ...
- 二维码生成:使用 JavaScript 库QRCode.js生成二维码
QRCode.js:跨浏览器的javascript二维码生成库,支持html5的Canvas画布,没有任何依赖. Github 地址:https://github.com/davidshimjs/qr ...
- redis队列操作
PHP版: <?php /** * Redis * 配置 $redis_host,$redis_port * 队列操作 * @author win 7 */ class RQueue{ priv ...
- 史上最强大的python selenium webdriver的包装
1.之前已经发过两次使用单浏览器了,但是这个最完美,此篇并没有使用任何单例模式的设计模式,用了实例属性结果缓存到类属性. 2.最简单的控制单浏览器是只实例化一次类,然后一直使用这个对象,但每个地方运行 ...