PHP实现微信对账单处理
时间:2022-07-27
本文章向大家介绍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 个字段为账单的汇总信息。因此通过循环就可以遍历整个账单。
大家有更好的解决方案,欢迎把代码贴出来一起交流!
以上就是本文的全部内容,希望对大家的学习有所帮助。
- HUDOJ-----1394Minimum Inversion Number
- 提升 Node.js 应用性能的 5 个技巧
- HDUOJ-----1166敌兵布阵
- HDUOJ------2492Ping pong
- HDUOJ----2489 Minimal Ratio Tree
- HDUOJ----2487Ugly Windows
- HDUOJ--------1003 Max Sum
- HDUOJ -----1864 最大报销额(动态规划)
- 行受影响 是什么意思
- c++课程设计(日历)
- 一个程序,让你理解运算符重载操作
- HDUOJ ---1423 Greatest Common Increasing Subsequence(LCS)
- 在运算符重载++,--,+=,-=...
- 排序一栏(总结帖)
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC