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 相关文章推荐
PHP4.04简明安装
Oct 09 PHP
php+mysql写的简单留言本实例代码
Jul 25 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
模板引擎正则表达式调试小技巧
Jul 20 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
thinkphp框架类库扩展操作示例
Nov 26 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版自动生成文章摘要
2008/07/23 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
详解PHP PDO简单教程
2019/05/28 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
Nodejs--post的公式详解
2017/04/29 NodeJs
精读《Vue3.0 Function API》
2020/05/20 Javascript
python实现从ftp服务器下载文件的方法
2015/04/30 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Python编程之string相关操作实例详解
2017/07/22 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
客户服务经理岗位职责
2014/01/29 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
泰山导游词
2015/02/02 职场文书
硕士学位申请报告
2015/05/15 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
Python中Selenium对Cookie的操作方法
2021/07/09 Python