情景简述:

最近公司在做"通过微信走步排名,领取活动相关奖励"的功能,中间,自然就涉及到了,微信走步数据的相关解密操作,功能已做完,做个总结。注意,下文只涉及到后端数据处理,怎么获取,这里是由前端提供!

一、基础部分,准备相关的参数

/*** 每次进入小程序,把前端推送的走步数据,存入到【组成员表】*/
public function save_member_steps()
{$request = $this->get;//$request['step_data'] = "M4OKJ5Q6yR0dwVtDX/P+/DJJuFs1oWmjZ9I8h8HJFSn6WslrGcxUXpXxq46W1g28AAaDGAf0z79zycv/g5VqY";//$request['iv'] = "QUzF4rjjsKhakdjjE8Px9w==";//$request['openid'] = "oqahZ5LbBsdf099ikjdKoruXtPI";// 获取相关的参数,并判断$userid = isset($request['userid']) ? $request['userid'] : 0;if(!$userid){return $this->export->get_export($this->errors[506]['error_code'], $this->errors, []);}// 从微信获取步数$step_data_str = isset($request['step_data']) && !empty($request['step_data']) ? strval($request['step_data']) : '';if(!$step_data_str){return $this->export->get_export($this->errors[512]['error_code'], $this->errors, []);}// 获取步数微信端参数$iv = !empty($request['iv']) ? strval($request['iv']) : '';// 获取步数微信端参数$openid = !empty($request['openid']) ? strval($request['openid']) : '';$this->load->dao('active_step_dao');// 解密微信端获取步数数据$step_datas = $this->process_wx_step_data($openid, $iv, $step_data_str);// 步数数据更新到user_step_everyday_log表$update_everyday_log = $this->update_step_log_data($userid, $step_datas);return  $update_everyday_log ? true : false;
}/*** 获取用户的走步数据,更新到成员表* @param $openid* @param $iv* @param $step_data_str* @return array*/
public function process_wx_step_data($openid, $iv, $step_data_str)
{// 从微信记录里获取数据,比对一下,是否正确,如果不正确,更新【组成员步数】,团表里的总步数累加$this->load->service('user_wechat_service');$step_data = $this->user_wechat_service->auth_step_data($openid, $iv, $step_data_str, 1);$stepInfoList = [];if(isset($step_data['stepInfoList']) && !empty($step_data['stepInfoList'])){$stepInfoList = $step_data['stepInfoList'];foreach ($stepInfoList as $key=>$val) {$stepInfoList[$key]['time'] = date('Y-m-d', $val['timestamp']);}$stepInfoList = array_column($stepInfoList, null, 'time');}return $stepInfoList;
}

二、核心部分,负责处理微信端数据

/*** 获取微信端用户【走步】数据* @param $openid 用户小程序openid* @param $iv 小程序返回的iv字段* @param $step_data_str 小程序返回的走步加密字段* @param $plat_type 1 用户端  2 教练端* @return array*/
public function auth_step_data($openid, $iv, $step_data_str, $plat_type)
{if (empty($openid) || empty($iv) || empty($step_data_str) || empty($plat_type)) {return [];}$decrypt_data = $this->_get_encrypted_data($openid, $step_data_str, $iv, $plat_type);return $decrypt_data;
}/*** 对微信加密的数据进行解密* @param $openid* @param $encrypted_data* @param $iv* @return string*/
private function _get_encrypted_data($openid, $encrypted_data, $iv, $plat_type)
{$result = '';if (empty($openid) || empty($encrypted_data) || empty($iv) || empty($plat_type)) {return $result;}$this->load->dao('user_wechat_dao');$user = $this->user_wechat_dao->get_userid($openid, $plat_type);if (empty($user)) {return $result;}$this->load->config('dict/wechat_config');$dict_name = $plat_type == self::PLAT_TYPE_USER ? 'dict_wechat_user' : 'dict_wechat_coach';$app_config = $this->config->item($dict_name);$result = $this->_decrypt_data($app_config['app_id'], $user['sessionkey'], $encrypted_data, $iv);return $result;
}/*** 解密数据 * @desc VALIDATE_LEN_NUM = 24;* @param $appid* @param $session_key* @param $encrypted_data* @param $iv* @return mixed|string*/
private function _decrypt_data($appid, $session_key, $encrypted_data, $iv)
{$result = '';if (strlen($session_key) != self::VALIDATE_LEN_NUM || strlen($iv) != self::VALIDATE_LEN_NUM) {return $result;}$aes_key = base64_decode(str_replace(' ','+',$session_key));$aes_iv = base64_decode(str_replace(' ','+',$iv));$aes_cipher = base64_decode(str_replace(' ','+',$encrypted_data));$data = openssl_decrypt($aes_cipher, "AES-128-CBC", $aes_key, 1, $aes_iv);$data = json_decode($data, TRUE);if (empty($data)) {return $result;}if (!isset($data['watermark']['appid']) || $data['watermark']['appid'] != $appid) {return $result;}return $data;
}

三、写在最后的话

代码中部分地方属于文件配置,不便贴出来,但也不影响看。微信"走步数据"解析处理,关键点在于"解密数据",这里是个难点,涉及到一些函数,需理解认真分析,其他就没有了!

PHP之 微信走步数据解析处理相关推荐

  1. PHP之 “微信走步数据” ,获取并解密处理的实践操作(关键代码)

    应用场景 在微信小程序的开发中,我们经常需要从微信端获取一些处理,以方便我们的程序操作处理,如"从微信端获取走步数据","从微信端获取手机号"等,而这些数据,考 ...

  2. 微信蓝牙协议一:协议文档查阅方法和空中数据解析示例

    目录 一.概述 二.抓取数据 三.包头解析 四.包体解析 4.1 第一部分 4.2 第二部分 4.3 第三部分 一.概述 本文主要是记录下微信蓝牙数据的分析过程.需要使用两份文档: <微信蓝牙外 ...

  3. 微信小程序PHP文件建在哪里,微信小程序解析H5文件方法

    经常有网友问怎么让微信小程序解析H5文件或者类似封装H5网页到APP里面?我一开始觉得这是不可能的,因为官方的解答是这样的: 每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index. ...

  4. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  5. python+appium爬取微信运动数据,并分析好友的日常步数情况

    python+appium爬取微信运动数据,并分析好友的日常步数情况 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python+appium爬取微信运动数据,并 ...

  6. dio java,Flutter基础(十一)网络请求(Dio)与JSON数据解析

    本文首发于微信公众号「后厂技术官」 前言 在Android开发中如果我们想要请求网络,可以使用HttpClent.HttpURLConnection,但在项目中一般都会使用OkHttp和Retrofi ...

  7. 微信小程序解析unionid

    微信小程序解析用户unionid等信息 调用wx.login获取 用户临时登录凭证code(有效期5分钟); 调用wx.getUserInfo获取加密过的数据encryptedData和解密参数iv: ...

  8. java数组里套数组_用JAVA进行Json数据解析(对象数组的相互嵌套)

    这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相 ...

  9. golang 微信支付全解析

    由于项目需要,对接了一下最新的apiv3版的微信支付,花了不少时间,为避免大家走弯路,把详细的对接过程给大家分析一下. 首先上官网开发者文档copy一下代码!由于我们这次接通的是小程序的支付,所以基本 ...

最新文章

  1. 使用SharedPreferences进行数据存储
  2. windows ping默认参数
  3. gj12-1 协程和异步io
  4. unix 网络编程卷2 第43页 管道:open竟然会阻塞?
  5. C 多线程的互斥锁应用RAII机制
  6. 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?
  7. RabbitMQ添加新用户并支持远程访问
  8. python数据可视化的包怎么安装_数据可视化包 - matplotlib
  9. mysql可视化工具路径访问_windows开启3306端口并用可视化工具访问远程mysql(授权访问)...
  10. 基于PYTHON语言的工资管理系统制作(前言计划)
  11. python爬取统计局数据_利用Python抓取行政区划码的方法
  12. 基于STM32单片机的远程智能浇花花盆GSM短信浇水补光方案原理图程序设计
  13. 工信部公开大数据试点名单;Canalys发布报告,三大云厂商保持领导地位;谷歌收购网络安全公司Mandiant | 每日大事件...
  14. 2022年临床执业医师资格考试《系统解剖学》习题及答案
  15. 原生openwrt+极路由4+路由模式光猫+中继光猫wifi+设置ipv6上网
  16. 21、TWS API和IB中的新闻和公告
  17. 毕设笔记01-解决树莓派烧写系统显示屏不显示问题
  18. 转载:android开源项目汇总
  19. OCR技术系列之一 字符识别技术总览
  20. 智慧检务大数据平台 电子检务大数据整体解决方案解决方案

热门文章

  1. 腾讯云 cos 字体在CDN上跨域处理
  2. c语言复数相加的程序,运用C语言编写复数的四则运算.docx
  3. 2020-01-17
  4. rmi 反序列化漏洞_java反序列化漏洞—被低估的破坏之王
  5. An Illustrated Guide to SSH Agent Forwarding
  6. 一文读懂 SOA 架构和微服务架构的区别
  7. dota全屏 去黑边 win7
  8. oracle mrp进程起不来,Run MRP不成功--急处理
  9. 曾鸣《智能商业》- 读书笔记
  10. 一小时制作java坦克大战小游戏