微信支付开发(3) 对账单

关键字:微信支付 微信支付v3  prepay_id 对账单
作者:方倍工作室
原文: 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. 条件组合

下面是一种进行组合查询账单的界面实现。需要查询使用的设备,使用的支付类型,及指定的时间范围。

其查询的结果如下所示

 

posted @ 2015-04-30 09:30  方倍工作室  阅读(46340)  评论(1编辑  收藏  举报