官网地址

类代码如下

use app\ks\controller\errorCode AS ErrorCode;

class WXBizDataCrypt extends \app\ks\controller\Base

{

private $appid;

private $sessionKey;

private $appsecret;

/**

* 构造函数

* @param $sessionKey string 用户在小程序登录后获取的会话密钥

* @param $appid string 小程序的appid

*/

public function __construct($code)

{

$wechat = config("wechat");

$this->appid = $wechat['appkey'];

$this->appsecret = $wechat['appsecret'];

$this->sessionKey = $this->getSessionKey($code);

}

/**

* 检验数据的真实性,并且获取解密后的明文.

* @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;

}

public function getSessionKey($code)

{

$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$this->appid.'&secret='.$this->appsecret.'&js_code='.$code.'&grant_type=authorization_code';

$data = self::http_request($url);

$data = json_decode($data,true);

if($data['errcode'] == 0){

$sessinKay = $data['session_key'];

}else{

ajaxError('获取步数失败',$data['errmsg']);

}

return $sessinKay;

}

}

ErrorCode

/**

* error code 说明.

*

*

-41001: encodingAesKey 非法

*

-41003: aes 解密失败

*

-41004: 解密后得到的buffer非法

*

-41005: base64加密失败

*

-41016: base64解密失败

*

*/

class ErrorCode

{

public static $OK = 0;

public static $IllegalAesKey = -41001;

public static $IllegalIv = -41002;

public static $IllegalBuffer = -41003;

public static $DecodeBase64Error = -41004;

}

?>

调用

public static function getStep($input)

{

$pc = new WXBizDataCrypt($input['code']);

$errCode = $pc->decryptData($input['encryptedData'], $input['iv'], $data );

if ($errCode == 0) {

$stepList = json_decode($data,true);

return $stepList

} else {

$result['error'] = $errCode;

return $result;

}

}

php如何实现记录步数,微信步数获取-PHP后端部分相关推荐

  1. uni-app利用uniCloud获取微信步数并将数据写入数据库

    uni-app利用uniCloud获取微信步数并将数据写入数据库 本项目依赖了uni-id 只是毕业设计,想法不完善,没有对用户授权失败做处理,如果编写的时候需要注意 第一步:调用wx.login() ...

  2. 开发笔记 | JAVA获取微信步数+日周月排行榜的实现

    目录 功能描述 微信步数同步 获取我当日的步数 日排行,周排行,月排行榜的实现 功能描述 实现微信步数的同步(也就是获取当前的微信步数更新至数据库) 实现获取我当日的微信步数的查询 实现按照日排行,周 ...

  3. uniapp+egg.js获取微信步数(wx.getWeRunData)

    uniapp 调用uni.login()获取code 调用wx.getWeRunData()获取encryptedData.iv 请求后端接口,传递code.encryptedData.iv参数 cr ...

  4. 小程序获取用户微信步数

    在我们开发小程序过程中,可能会用到用户的微信步数 wx.login({success: login => {/*** 获取步数*/wx.getWeRunData({success(runRes) ...

  5. 使用cryptojs解密encryptedData,获取微信步数

    使用cryptojs解密encryptedData,获取微信步数 这个方法在新的微信开发者工具不能用了,因为为了安全,不能把appsecrect写在前端代码里面.后面使用了云函数获取微信步数,很方便. ...

  6. 2022-05-05随手更新文章,以及记录一下新的微信步数接口

    本来不想写这个文章的,但好像不写点东西发一下,似乎没法引起大家的注意. 然后最近刚好更新了一下微信步数的API接口,那就顺便也水个文章,露一下脸. 关于微信步数API接口 其实这个也没啥好说的,接口用 ...

  7. ios11修改微信步数_你会时常去看他的微信步数吗?

    在这个社交的网络圈子里,就算你一言不发,你的轨迹也会被默默地记录. 今天的你,给他的微信步数点赞了吗? 1 小洋和她的男友是异地恋,和其他的异地情侣天天煲电话粥的恋爱方式不同,由于社团工作以及学业压力 ...

  8. 微信Android如何实现计步数,微信运动步数是怎样计算的?终于有人研究出来了......

    原标题:微信运动步数是怎样计算的?终于有人研究出来了... 微信运动每天都记录着你走路的步数,他会形成榜单,走的多收到很多赞,走的少则无人关注,如果你走到第一,你的照片将霸占排行榜封面. 所以一段时间 ...

  9. 微信步数日历打卡小程序

    微信步数日历打卡小程序 背景 碳达峰.碳中和.垃圾分类.减塑.反食品浪费等绿色低碳生活正日渐成为社会新风尚."低碳生活,绿建未来"活动采取"线上线下"相结合的方 ...

  10. 傻瓜式操作更改微信步数

    更改微信运动步数的简单原理 很多网络上面的教程大多是从更改微信的数据库入手,不仅非常麻烦,而且工具不好找. 不妨换一个思路,不去费尽心思更改微信的数据,我们可以更改其他运动APP的数据,再导入到微信运 ...

最新文章

  1. python对excel某一列求和-96、python操作excel求和
  2. php和python对比-从PHP与Python的语言比较去了解什么是图灵完备
  3. ZOJ 2849 Attack of Panda Virus (优先队列 priority_queue)
  4. Condition类必须配合Mutex使用,why?
  5. Docker运行tensorflow试试
  6. hihoCoder #1104 Suzhou Adventure
  7. 教你如何使用flask实现ajax数据入库
  8. java对象的我可变属性,不可变对象的所有属性都必须是最终的吗?
  9. Normalizing Flows Tutorial(标准化流教程)第一部分
  10. java 过滤js事件_java中的过滤器与监听器
  11. 入门需掌握的20个python代码
  12. sap abap开发从入门到精通_SAP顾问≠程序员
  13. 微软:将向安卓和苹果iOS平台推出杀毒软件Defender
  14. js 百度坐标和火星坐标的转换
  15. NWR,Gossip,Paxos分布式一致性协议
  16. Ubuntu下安装GParted并分区,进行虚拟机内存扩展
  17. Zabbix 5.0 配置短信报警
  18. c语言程序设计入门教程视频教学
  19. 使用easypoi导入导出excel,SSM和SpringBoot通用代码
  20. 一零二一、ERROR StandaloneSchedulerBackend: Application has been killed. Reason: All masters are unrespon

热门文章

  1. hibernate必须知道的知识
  2. 从一个小Demo看React的diff算法
  3. 用ssh2连接linux实现putty功能范例代码
  4. 或许是介绍Android Studio使用Git最详细的文章
  5. 大集训的第二个小总结
  6. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platf...
  7. SAP WM Stock Removal Strategy - StringentFIFO 在仓库号级别下的先进先出
  8. Java常见面试题收集
  9. 使用用VMware Workstation   实现DNS服务器之间的委派和区域传送
  10. JSP字符集编码集合