微信支付开发(3) 对账单
作者:方倍工作室
原文: http://www.cnblogs.com/txw1958/p/wxpayv3-bill.html
本文介绍微信支付下的对账单的开发实现流程。
注意
微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请的为v3版。V3版的微信支付没有paySignKey参数。v2的相关介绍请参考方倍工作室的其他文章。本文介绍的为微信支付v3。
一、对账单数据接口
微信支付v3提供了对账单的数据接口,其使用的接口为
https://api.mch.weixin.qq.com/pay/downloadbill
请求的参数如下
字段名 |
变量名 |
必填 |
类型 |
示例值 |
描述 |
---|---|---|---|---|---|
公众账号ID |
appid |
是 |
String(32) |
wx8888888888888888 |
微信分配的公众账号ID |
商户号 |
mch_id |
是 |
String(32) |
1900000109 |
微信支付分配的商户号 |
设备号 |
device_info |
否 |
String(32) |
013467007045764 |
微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单 |
随机字符串 |
nonce_str |
是 |
String(32) |
5K8264ILTKCH16CQ2502SI8ZNMTM67VS |
随机字符串,不长于32位。推荐随机数生成算法 |
签名 |
sign |
是 |
String(32) |
C380BEC2BFD727A4B6845133519F3AD6 |
签名,详见签名生成算法 |
对账单日期 |
bill_date |
是 |
String(8) |
20140603 |
下载对账单的日期,格式:20140603 |
账单类型 |
bill_type |
否 |
String(8) |
ALL |
ALL,返回当日所有订单信息,默认值 SUCCESS,返回当日成功支付的订单 REFUND,返回当日退款订单 REVOKED,已撤销的订单 |
Demo中的实现代码如下
1 include_once("../WxPayPubHelper/WxPayPubHelper.php"); 2 3 //对账单日期 4 if (!isset($_POST["bill_date"])){ 5 $bill_date = "20150401"; 6 } 7 else{ 8 $bill_date = $_POST["bill_date"]; 9 10 //使用对账单接口 11 $downloadBill = new DownloadBill_pub(); 12 //设置对账单接口参数 13 //设置必填参数 14 //appid已填,商户无需重复填写 15 //mch_id已填,商户无需重复填写 16 //noncestr已填,商户无需重复填写 17 //sign已填,商户无需重复填写 18 $downloadBill->setParameter("bill_date","$bill_date");//对账单日期 19 $downloadBill->setParameter("bill_type","ALL");//账单类型 20 //非必填参数,商户可根据实际情况选填 21 //$downloadBill->setParameter("device_info","XXXX");//设备号 22 //$downloadBill->setParameter("device_info","方倍工作室1");//设备号 23 //对账单接口结果 24 $downloadBillResult = $downloadBill->getResult(); 25 echo $downloadBillResult['return_code']; 26 27 if ($downloadBillResult['return_code'] == "FAIL") { 28 echo "通信出错:".$downloadBillResult['return_msg']; 29 }else{ 30 print_r('<pre>'); 31 echo "【对账单详情】"."</br>"; 32 print_r($downloadBill->response); 33 print_r('</pre>'); 34 } 35 }
上述对账单一次只能查询一天的数据。
其返回的账单结果如下
交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率 `2015-04-12 20:27:22,`wx554f0b3e56067c9d,`10024142,`0,`WJ4,`1000690206201504120059461630,`wx554f0b3e56067c9d1428841627,`oMfX0jgJjSPVvYOz3p_BP8LclWO0,`NATIVE,`SUCCESS,`CMB_CREDIT,`CNY,`71.00,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.42600,`0.60% `2015-04-12 18:08:38,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1001370206201504120059259734,`wx554f0b3e56067c9d1428833308,`oMfX0jhbQ1xd0B6Vm-kuizH9e9rs,`NATIVE,`SUCCESS,`COMM_DEBIT,`CNY,`92.00,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.55200,`0.60% `2015-04-12 19:12:06,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1001520206201504120059346120,`wx554f0b3e56067c9d1428837103,`oMfX0jj6h2ls1TsZEORs8WXRtSrE,`NATIVE,`SUCCESS,`CEB_CREDIT,`CNY,`69.60,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.41760,`0.60% `2015-04-12 13:03:25,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1002120206201504120058869224,`wx554f0b3e56067c9d1428814993,`oMfX0jtHOXPrCCWebdJEYl1eIzVg,`NATIVE,`SUCCESS,`CFT,`CNY,`16.80,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.10080,`0.60% `2015-04-12 12:20:39,`wx554f0b3e56067c9d,`10024142,`0,`WJ2,`1002560206201504120058795541,`wx554f0b3e56067c9d1428812423,`oMfX0jhBckNfxRDHp2lUiFxXlCYE,`NATIVE,`SUCCESS,`CCB_DEBIT,`CNY,`126.60,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.75960,`0.60% `2015-04-12 09:35:03,`wx554f0b3e56067c9d,`10024142,`0,`WJ6,`1003310206201504120058568869,`wx554f0b3e56067c9d1428802486,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CMBC_DEBIT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `2015-04-12 09:23:20,`wx554f0b3e56067c9d,`10024142,`0,`WJ6,`1003310206201504120058569203,`wx554f0b3e56067c9d1428801789,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CMBC_DEBIT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `2015-04-12 10:15:27,`wx554f0b3e56067c9d,`10024142,`0,`WJ5,`1003310206201504120058606779,`wx554f0b3e56067c9d1428804915,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `2015-04-12 10:10:09,`wx554f0b3e56067c9d,`10024142,`0,`WJ5,`1003310206201504120058610924,`wx554f0b3e56067c9d1428804597,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `2015-04-12 10:06:19,`wx554f0b3e56067c9d,`10024142,`0,`WJ6,`1003310206201504120058617007,`wx554f0b3e56067c9d1428804368,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `2015-04-12 11:07:04,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1003310206201504120058692567,`wx554f0b3e56067c9d1428808013,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `2015-04-12 11:27:07,`wx554f0b3e56067c9d,`10024142,`0,`WJ6,`1003310206201504120058735881,`wx554f0b3e56067c9d1428809215,`oMfX0jmQtv9nBfol_-e83xYdXacM,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% `2015-04-12 16:24:48,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1003310206201504120059131508,`wx554f0b3e56067c9d1428827074,`oMfX0jk-zqqeyv7yZYEc4W1lWPVg,`NATIVE,`SUCCESS,`CFT,`CNY,`15.80,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.09480,`0.60% `2015-04-12 14:56:41,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1005430206201504120058999894,`wx554f0b3e56067c9d1428821791,`oMfX0jnw_NpAlwgSuJsyR8ocGSjI,`NATIVE,`SUCCESS,`CCB_DEBIT,`CNY,`42.00,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.25200,`0.60% `2015-04-12 13:00:00,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1006120206201504120058836372,`wx554f0b3e56067c9d1428814787,`oMfX0jnVvUaoR84XV8cP4ugcd9dk,`NATIVE,`SUCCESS,`PAB_CREDIT,`CNY,`16.80,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.10080,`0.60% `2015-04-12 16:13:48,`wx554f0b3e56067c9d,`10024142,`0,`WJ4,`1007560206201504120059119673,`wx554f0b3e56067c9d1428826408,`oMfX0jlf4aVHBY1nel1XuNvb2m1A,`NATIVE,`SUCCESS,`ABC_DEBIT,`CNY,`120.00,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.72000,`0.60% `2015-04-12 09:49:04,`wx554f0b3e56067c9d,`10024142,`0,`WJ1,`1009550206201504120058567546,`wx554f0b3e56067c9d1428803335,`oMfX0juZ58OdofLgirvkqK0FPq-w,`NATIVE,`SUCCESS,`CFT,`CNY,`0.10,`0.00,`0,`0,`0,`0,`,`,`微信公众平台开发最佳实践,`,`0.00060,`0.60% 总交易单数,总交易额,总退款金额,总企业红包退款金额,手续费总金额 `17,`571.40,`0.00,`0.00,`3.42840
如果当天没有账单,则返回XML如下
<xml> <return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[No Bill Exist]]></return_msg> </xml>
二、账单入库
上述的账单数据是个字符串,且只是一天的数据,不利于统计及查询。还需要下载到数据库中来。
1. 建表
账单的字段有这些
交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,代金券或立减优惠金额,微信退款单号,商户退款单号,退款金额, 代金券或立减优惠退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率
根据上述字段,建表如下
CREATE TABLE IF NOT EXISTS `wx_bill` ( `id` int(10) NOT NULL AUTO_INCREMENT, `tradetime` varchar(20) NOT NULL, `ghid` varchar(20) NOT NULL, `mchid` varchar(20) NOT NULL, `submch` varchar(10) NOT NULL, `deviceid` varchar(16) NOT NULL, `wxorder` varchar(30) NOT NULL, `bzorder` varchar(30) NOT NULL, `openid` varchar(30) NOT NULL, `tradetype` varchar(10) NOT NULL, `tradestatus` varchar(10) NOT NULL, `bank` varchar(16) NOT NULL, `currency` varchar(20) NOT NULL, `totalmoney` varchar(20) NOT NULL, `redpacketmoney` varchar(20) NOT NULL, `wxrefund` varchar(10) NOT NULL, `bzrefund` varchar(10) NOT NULL, `refundmoney` varchar(20) NOT NULL, `redpacketrefund` varchar(20) NOT NULL, `refundtype` varchar(10) NOT NULL, `refundstatus` varchar(10) NOT NULL, `productname` varchar(30) NOT NULL, `bzdatapacket` varchar(10) NOT NULL, `fee` varchar(10) NOT NULL, `rate` varchar(10) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `wxorder` (`wxorder`), UNIQUE KEY `bzorder` (`bzorder`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=272 ;
2. 入库
将微信账单的数据插入到数据库中,实现如下
INSERT INTO `wx_bill` (`id`, `tradetime`, `ghid`, `mchid`, `submch`, `deviceid`, `wxorder`, `bzorder`, `openid`, `tradetype`, `tradestatus`, `bank`, `currency`, `totalmoney`, `redpacketmoney`, `wxrefund`, `bzrefund`, `refundmoney`, `redpacketrefund`, `refundtype`, `refundstatus`, `productname`, `bzdatapacket`, `fee`, `rate`) VALUES (32, '1428843600', 'wx554f0b3e56067c9d', '10024142', '0', 'WJ1', '1006120206201504120058836372', 'wx554f0b3e56067c9d1428814787', 'oMfX0jnVvUaoR84XV8cP4ugcd9dk', 'NATIVE', 'SUCCESS', 'PAB_CREDIT', 'CNY', '16.80', '0.00', '0', '0', '0', '0', '', '', '微信公众平台开发最佳实践', '', '0.10080', '0.60%'), (31, '1428850601', 'wx554f0b3e56067c9d', '10024142', '0', 'WJ1', '1005430206201504120058999894', 'wx554f0b3e56067c9d1428821791', 'oMfX0jnw_NpAlwgSuJsyR8ocGSjI', 'NATIVE', 'SUCCESS', 'CCB_DEBIT', 'CNY', '42.00', '0.00', '0', '0', '0', '0', '', '', '微信公众平台开发最佳实践', '', '0.25200', '0.60%'), (30, '1428855888', 'wx554f0b3e56067c9d', '10024142', '0', 'WJ1', '1003310206201504120059131508', 'wx554f0b3e56067c9d1428827074', 'oMfX0jk-zqqeyv7yZYEc4W1lWPVg', 'NATIVE', 'SUCCESS', 'CFT', 'CNY', '15.80', '0.00', '0', '0', '0', '0', '', '', '微信公众平台开发最佳实践', '', '0.09480', '0.60%');
二、统计分析
有了本地数据,就可以进行各种统计分析了。
1. 条件组合
下面是一种进行组合查询账单的界面实现。需要查询使用的设备,使用的支付类型,及指定的时间范围。
其查询的结果如下所示