php 处理微信账单
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,微信账单接口返回为一个字符串类似如下结果:
交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率 `-- ::,`wx554f0b3e56067c9d,`,`,`WJ4,`,`wx554f0b3e56067c9d1428841627,`oMfX0jgJjSPVvYOz3p_BP8LclWO0,`NATIVE,`SUCCESS,`CMB_CREDIT,`CNY,`71.00,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.42600,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428833308,`oMfX0jhbQ1xd0B6Vm-kuizH9e9rs,`NATIVE,`SUCCESS,`COMM_DEBIT,`CNY,`92.00,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.55200,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428837103,`oMfX0jj6h2ls1TsZEORs8WXRtSrE,`NATIVE,`SUCCESS,`CEB_CREDIT,`CNY,`69.60,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.41760,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428814993,`oMfX0jtHOXPrCCWebdJEYl1eIzVg,`NATIVE,`SUCCESS,`CFT,`CNY,`16.80,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.10080,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ2,`,`wx554f0b3e56067c9d1428812423,`oMfX0jhBckNfxRDHp2lUiFxXlCYE,`NATIVE,`SUCCESS,`CCB_DEBIT,`CNY,`126.60,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.75960,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ6,`,`wx554f0b3e56067c9d1428802486,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CMBC_DEBIT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ6,`,`wx554f0b3e56067c9d1428801789,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CMBC_DEBIT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ5,`,`wx554f0b3e56067c9d1428804915,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ5,`,`wx554f0b3e56067c9d1428804597,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ6,`,`wx554f0b3e56067c9d1428804368,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428808013,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ6,`,`wx554f0b3e56067c9d1428809215,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428827074,`oMfX0jk-zqqeyv7yZYEc4W1lWPVg,`NATIVE,`SUCCESS,`CFT,`CNY,`15.80,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.09480,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428821791,`oMfX0jnw_NpAlwgSuJsyR8ocGSjI,`NATIVE,`SUCCESS,`CCB_DEBIT,`CNY,`42.00,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.25200,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428814787,`oMfX0jnVvUaoR84XV8cP4ugcd9dk,`NATIVE,`SUCCESS,`PAB_CREDIT,`CNY,`16.80,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.10080,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ4,`,`wx554f0b3e56067c9d1428826408,`oMfX0jlf4aVHBY1nel1XuNvb2m1A,`NATIVE,`SUCCESS,`ABC_DEBIT,`CNY,`120.00,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.72000,`0.60% `-- ::,`wx554f0b3e56067c9d,`,`,`WJ1,`,`wx554f0b3e56067c9d1428803335,`oMfX0juZ58OdofLgirvkqK0FPq-w,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`,`,`,`,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% 总交易单数,总交易额,总退款金额,总企业红包退款金额,手续费总金额 `,`571.40,`0.00,`0.00,`3.42840
程序需要实现的功能就是从这个字符串从提取每一笔订单中的有效信息,参考代码如下:
function deal_wechat_return_result($reponse)
{
$result = array();
$reponse = str_replace(","," ",$reponse);
$reponse = explode("`",$reponse);
$total_order_count =( count($reponse) - 6 ) / 24;
for($i = 0; $i< $total_order_count; $i++)
{
$base_index = 24 * $i;
$result[$reponse[$base_index + 7]] = array(
'wechat_order_no' => $reponse[$base_index + 6],
'order_count' => $reponse[$base_index + 13],
'order_discount' => $reponse[$base_index + 23]
);
}
return $result;
}
主要的思路是微信账单返回的结果格式是固定的,可以用 '`' 实现字符串的分割,然后每 24 个 字段为一个订单的描述信息,最后 6 个字段为账单的汇总信息。因此通过 for 循环就可以遍历整个账单,代码里面只取了我需要的字段,如果还需要其它的字段可按照此格式自行加入即可。
代码还有以下几点有待完善:
1. 没有考虑字符串特别大的情况,可能会导致 php 进程分配的内存耗尽,对于普通的商户订单,每天成交量不是特别大的情形是够用的。
2. 默认了微信返回的格式是固化的,其实可以根据微信返回的字符串头和尾进行动态的匹配。
大家有更好的解决方案,欢迎把代码贴出来一起交流!
php 处理微信账单的更多相关文章
- 微信对账单处理-PHP
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款 ...
- PHP实现微信对账单处理
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款 ...
- wechat 网页版通信全过程
想要记录总结一下自己在这个小项目中所遇到的坑,以及解决问题的思路. 首先我觉得这个小项目挺有实际市场的,市场上有一定的需求量,这个就是驱动力吧.这个小项目的关键点是wechat网页版通信全过程,讲真挺 ...
- 我自己收藏的 Windows 上好用的软件
已经在使用的工具就不会列出来了. 1. 截图 - Snipaste 截图在我们的生活中,可以算的上是非常频繁的操作了,但是很多人是不是都在使用腾讯聊天软件的聊天截图功能,或许是没有一款称心的.安全的截 ...
- Java+微信支付(下预购单+回调+退款+查询账单)
前言: 现在的APP的离不开微信支付, 现在项目里接入微信支付 , 微信支付的官方文档是:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chap ...
- 微信公开课发布微信官方教程:教你用好微信JS-SDK接口
微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获 ...
- 官方教程:教你用好微信JS-SDK接口
微信开放JS-SDK接口,开发者和行业用户可谓是欢欣鼓舞.奔走相告,目测将激起一大波第三方开发商的创新产品!真真是H5开发者的利好!但也有用户表示,还不了解JS-SDK接口到底是啥,究竟怎么用.现在, ...
- 【转】物业管理与移动互联网科技|微信公众平台,物业app,物业O2O
[导语]当下,物业管理行业正在接受新科技浪潮的冲击和洗礼,业界企业纷纷探索物业服务的新发展模式.云服务.微社区.微信公众平台.app等,这些本来陌生的词汇在物业管理行业变得耳熟能详.在借助科技手段拓展 ...
- asp.net微信开发第二篇----消息应答
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 请注意: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接 ...
随机推荐
- windows下查看 mysql二进制日志文件
有时候需要将linux中的mysql从线上linux种down到windows查看,但是这种binlog日志是二进制的,应该怎么查看呢? 使用window上的mysqlbinlog.exe将其转码到另 ...
- How to push master to QA branch in GIT
1. git branch -d QA2. git branch QA master3. git checkout QA4. git push origin QA(if push error, ...
- react-native学习之入门app
1.项目初始化: react-native init MyProject 2.启动项目: cd MyProject react-native start 新开cmd窗口: react-native r ...
- rabbitMQ windows 安装 入门(转)
rabbitMQ windows 安装 入门 1.下载,其实erlang不装也是可以的 下载 rabbitMQ :http://www.rabbitmq.com/download.html,安装r ...
- sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計)
---sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計) ---2014-08-26 塗聚文(Geovin Du) CREATE PROCEDURE proc_Select_BookKi ...
- 关于github改名问题
不喜欢github显示的目录名字于是百度了下,更改过程,记录下来,方便日后查看! 首页右上角点击出来菜单,找到Settings按钮点击 左侧找到Account账号菜单点击 找到change usern ...
- <Android 基础(二十)> CoordinatorLayout Behavior
介绍 Interaction behavior plugin for child views of {@link CoordinatorLayout}. A Behavior implements o ...
- ArcGIS for JavaScript 关于路径开发的一些记录(三)
最近被一个bug困扰了两天~ 我新发布了一个NAserver(路径分析服务),但是放在之前的代码里面发现不能生成路径.经过我的调试发现并没有代码并没有报错,并且能够返回所生成路径的Graphic la ...
- linux 设置git记住密码
linux下: 1.在~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入: https://{username}:{password}@github.com 注 ...
- linux常用命令(50个)
1. find 基本语法参数如下: find [PATH] [option] [action] # 与时间有关的参数: -mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件: - ...