PHP实现微信对账单处理


Posted in PHP onOctober 01, 2018

最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致,具体字段说明可查阅相应接口。

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存储过程调用实例代码
Feb 03 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 PHP
php将xml转化对象的实例详解
Nov 17 PHP
php提取微信账单的有效信息
Oct 01 #PHP
YII分模块加载路由的实现方法
Oct 01 #PHP
php实现微信公众号企业转账功能
Oct 01 #PHP
详解json在php中的应用
Sep 30 #PHP
php实现数组重复数字统计实例
Sep 30 #PHP
PHP APP微信提现接口代码
Sep 30 #PHP
PHP实现微信提现功能
Sep 30 #PHP
You might like
PHP入门速成教程
2007/03/19 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
鸦片战争观后感
2015/06/09 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
nginx配置限速限流基于内置模块
2022/05/02 Servers