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注释实例技巧
Oct 03 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
php数组一对一替换实现代码
Aug 31 PHP
php去除HTML标签实例
Nov 06 PHP
测试php函数的方法
Nov 13 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
Apr 27 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 PHP
PHP新手指南
Apr 01 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安装为Apache DSO
2006/10/09 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
详解js的六大数据类型
2016/12/27 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
几种响应式文字详解
2017/05/19 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vue登录注册及token验证实现代码
2017/12/14 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
python定义类self用法实例解析
2020/01/22 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
食堂个人先进事迹
2014/01/22 职场文书
员工团队活动方案
2014/08/28 职场文书
争先创优个人总结
2015/03/04 职场文书
商场收银员岗位职责
2015/04/07 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
Python词云的正确实现方法实例
2021/05/08 Python