PHP实现微信对账单处理
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致,具体字段说明可查阅相应接口。
Ps:至于如何调用微信接口下载对账单,在微信的官方SDK包中就有现成的方法,直接调用即可。注意对账单接口一次只能查询一天的数据。代码大致如下:
- // 引入微信sdk文件
- require_once APP_DIR . '/ome/lib/wxpay/lib/WxPay.Api.php';
- require_once APP_DIR . '/ome/lib/wxpay/log.php';
- // 实列化下载对账单对象
- $input = new WxPayDownloadBill();
- // 对账单日期
- $input->SetBill_date(date("Ymd", strtotime("-1 day")));
- // 对账单类型
- $input->SetBill_type('ALL');
- // 获取账单信息
- $downloadBillResult = WxPayApi::downloadBill($input);
打印$downloadBillResult就会发现他是一个数据文本(string),本文程序需要实现的功能就是从这个字符串从提取每一笔订单中的有效信息,参考代码如下:
- /**
- * 微信对账单数据处理
- * @param $response 对账单数据
- * @return array 返回结果
- */
- public function deal_WeChat_response($response){
- $result = array();
- $response = str_replace(","," ",$response);
- $response = explode(PHP_EOL, $response);
- foreach ($response as $key=>$val){
- if(strpos($val, '`') !== false){
- $data = explode('`', $val);
- array_shift($data); // 删除第一个元素并下标从0开始
- if(count($data) == 24){ // 处理账单数据
- $result['bill'][] = array(
- 'pay_time' => $data[0], // 支付时间
- 'APP_ID' => $data[1], // app_id
- 'MCH_ID' => $data[2], // 商户id
- 'IMEI' => $data[4], // 设备号
- 'order_sn_wx' => $data[5], // 微信订单号
- 'order_sn_sh' => $data[6], // 商户订单号
- 'user_tag' => $data[7], // 用户标识
- 'pay_type' => $data[8], // 交易类型
- 'pay_status' => $data[9], // 交易状态
- 'bank' => $data[10], // 付款银行
- 'money_type' => $data[11], // 货币种类
- 'total_amount' => $data[12], // 总金额
- 'coupon_amount' => $data[13], // 代金券或立减优惠金额
- 'refund_number_wx' => $data[14], // 微信退款单号
- 'refund_number_sh' => $data[15], // 商户退款单号
- 'refund_amount' => $data[16], // 退款金额
- 'coupon_refund_amount' => $data[17], // 代金券或立减优惠退款金额
- 'refund_type' => $data[18], // 退款类型
- 'refund_status' => $data[19], // 退款状态
- 'goods_name' => $data[20], // 商品名称
- 'service_charge' => $data[22], // 手续费
- 'rate' => $data[23], // 费率
- );
- }
- if(count($data) == 5){ // 统计数据
- $result['summary'] = array(
- 'order_num' => $data[0], // 总交易单数
- 'turnover' => $data[1], // 总交易额
- 'refund_turnover' => $data[2], // 总退款金额
- 'coupon_turnover' => $data[3], // 总代金券或立减优惠退款金额
- 'rate_turnover' => $data[4], // 手续费总金额
- );
- }
- }
- }
- return $result;
- }
返回的数据分为2部分,bill节点下存放的是具体流水数据,summary节点下存放的是统计数据
主要的思路是微信账单返回的结果格式是固定的,可以用 '`',换行符(PHP_EOL)实现字符串的分割,然后每 24 个 字段为一个订单的描述信息,最后 6 个字段为账单的汇总信息。因此通过循环就可以遍历整个账单。
转自“php自学中心 - PHP实现微信对账单处理”
PHP实现微信对账单处理的更多相关文章
- 微信对账单处理-PHP
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款 ...
- php 处理微信账单
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,微信账单接口返回为一个字符串类似如下结果: 交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单 ...
- C#开发微信门户及应用(32)--微信支付接入和API封装使用
在微信的应用上,微信支付是一个比较有用的部分,但也是比较复杂的技术要点,在微商大行其道的年代,自己的商店没有增加微信支付好像也说不过去,微信支付旨在为广大微信用户及商户提供更优质的支付服务,微信的支付 ...
- ***CodeIgniter集成微信支付(转)
微信支付Native扫码支付模式二之CodeIgniter集成篇 http://www.cnblogs.com/24la/p/wxpay-native-qrcode-codeigniter.html ...
- 微信支付Native扫码支付模式二之CodeIgniter集成篇
CI:3.0.5 微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/ ...
- JAVA实现的微信扫描二维码支付
吐槽一下 支付项目采用springMvc+Dubbo架构实现,只对外提供接口. 话说,为什么微信支付比支付宝来的晚了那么一点,一句话,那一阵挺忙的,然后就没有时间整理,最近做完支付宝支付,顺便也把微信 ...
- VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启)
VopSdk一个高逼格微信公众号开发SDK(源码下载) VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启) 针对第一版,我们搞了第二版本,老规矩先定个目标. 一 我们的目标 a.移 ...
- .net core 支付宝,微信支付 二
源码: https://github.com/aspros-luo/Qwerty.Payment/tree/develop 今天开始微信支付 微信支付坑比较多,支付流程也不太一样,微信支付需要先生成预 ...
- PHP微信商户支付 - 企业付款到零钱功能(即提现)技术资料汇总
PHP实现微信开发中提现功能(企业付款到用户零钱) 一.实现该功能目的 这几天在小程序里要实现用户从系统中提现到零钱的功能,查了一下文档可以使用 企业付款到用户零钱 来实现: 官方文档:https:/ ...
随机推荐
- 【转】Redis哨兵(Sentinel)模式
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用.这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式. 一.哨兵 ...
- IDEA光标类的操作
1.Ctrl+Alt+Left/Right 光标定位到上一个/下一个浏览位置处: 2.Ctrl+Shift+Backspace 光标定位到上次修改的地方: 3.Alt+Up/Down 移动 ...
- Jenkins build 后 tomcat 启不来
Jenkins build 后 war 包复制到 tomcat 下,启不来 添加 :export BUILD_ID=dontKillMe /usr/local/iron/tomcat8085/bin/ ...
- 【HBase】HBase 单机版安装及使用
HBase介绍 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了 ...
- k8s记录-安装ansible
##1.安装1) python版本需要2.6以上,不过通过centos7都会默认安装上python2.7.5,查看方法:python -V2) 添加yum 源a.vim /etc/yum.repos. ...
- ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞
ThinkPHP 5.0.x.5.1.x.5.2.x 全版本远程代码执行漏洞 作者:SoulCat. 来源:CSDN 原文:https://blog.csdn.net/csacs/article/de ...
- Xcode中opengl的配置
1. GLUT + GLTools + SDL2 Frameworks Search Paths :Framework + Library ( $(PROJECT_DIR)/build ) Searc ...
- IntelliJ IDEA破解教程汇总
IDEA是一款很好用的工具,若资金允许,请点击https://www.jetbrains.com/idea/buy/购买正版,谢谢合作. 目前破解的方式主要有三种,注册机.破解补丁.注册码,下面分别介 ...
- MySQL5.7修改wait_timeout参数
参考:https://blog.csdn.net/ivory_town1/article/details/77702357 1.修改参数配置文件 vi /etc/my.cnf [mysqld] wai ...
- vim设定Tab缩进长度
在Linux系统中,vim是一款非常好用的文本编辑器,那么,如何在Linux下的vim编辑器设定Tab的缩进长度呢? Linux系统下,vim编辑器Tab键的默认长度为8个空格,在vim中可以通过修改 ...