PHP之 微信走步数据解析处理
情景简述:
最近公司在做"通过微信走步排名,领取活动相关奖励"的功能,中间,自然就涉及到了,微信走步数据的相关解密操作,功能已做完,做个总结。注意,下文只涉及到后端数据处理,怎么获取,这里是由前端提供!
一、基础部分,准备相关的参数
/*** 每次进入小程序,把前端推送的走步数据,存入到【组成员表】*/
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之 微信走步数据解析处理相关推荐
- PHP之 “微信走步数据” ,获取并解密处理的实践操作(关键代码)
应用场景 在微信小程序的开发中,我们经常需要从微信端获取一些处理,以方便我们的程序操作处理,如"从微信端获取走步数据","从微信端获取手机号"等,而这些数据,考 ...
- 微信蓝牙协议一:协议文档查阅方法和空中数据解析示例
目录 一.概述 二.抓取数据 三.包头解析 四.包体解析 4.1 第一部分 4.2 第二部分 4.3 第三部分 一.概述 本文主要是记录下微信蓝牙数据的分析过程.需要使用两份文档: <微信蓝牙外 ...
- 微信小程序PHP文件建在哪里,微信小程序解析H5文件方法
经常有网友问怎么让微信小程序解析H5文件或者类似封装H5网页到APP里面?我一开始觉得这是不可能的,因为官方的解答是这样的: 每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index. ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- python+appium爬取微信运动数据,并分析好友的日常步数情况
python+appium爬取微信运动数据,并分析好友的日常步数情况 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python+appium爬取微信运动数据,并 ...
- dio java,Flutter基础(十一)网络请求(Dio)与JSON数据解析
本文首发于微信公众号「后厂技术官」 前言 在Android开发中如果我们想要请求网络,可以使用HttpClent.HttpURLConnection,但在项目中一般都会使用OkHttp和Retrofi ...
- 微信小程序解析unionid
微信小程序解析用户unionid等信息 调用wx.login获取 用户临时登录凭证code(有效期5分钟); 调用wx.getUserInfo获取加密过的数据encryptedData和解密参数iv: ...
- java数组里套数组_用JAVA进行Json数据解析(对象数组的相互嵌套)
这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相 ...
- golang 微信支付全解析
由于项目需要,对接了一下最新的apiv3版的微信支付,花了不少时间,为避免大家走弯路,把详细的对接过程给大家分析一下. 首先上官网开发者文档copy一下代码!由于我们这次接通的是小程序的支付,所以基本 ...
最新文章
- 使用SharedPreferences进行数据存储
- windows ping默认参数
- gj12-1 协程和异步io
- unix 网络编程卷2 第43页 管道:open竟然会阻塞?
- C 多线程的互斥锁应用RAII机制
- 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?
- RabbitMQ添加新用户并支持远程访问
- python数据可视化的包怎么安装_数据可视化包 - matplotlib
- mysql可视化工具路径访问_windows开启3306端口并用可视化工具访问远程mysql(授权访问)...
- 基于PYTHON语言的工资管理系统制作(前言计划)
- python爬取统计局数据_利用Python抓取行政区划码的方法
- 基于STM32单片机的远程智能浇花花盆GSM短信浇水补光方案原理图程序设计
- 工信部公开大数据试点名单;Canalys发布报告,三大云厂商保持领导地位;谷歌收购网络安全公司Mandiant | 每日大事件...
- 2022年临床执业医师资格考试《系统解剖学》习题及答案
- 原生openwrt+极路由4+路由模式光猫+中继光猫wifi+设置ipv6上网
- 21、TWS API和IB中的新闻和公告
- 毕设笔记01-解决树莓派烧写系统显示屏不显示问题
- 转载:android开源项目汇总
- OCR技术系列之一 字符识别技术总览
- 智慧检务大数据平台 电子检务大数据整体解决方案解决方案