zoukankan      html  css  js  c++  java
  • 微信支付开发(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. 条件组合

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

    其查询的结果如下所示

  • 相关阅读:
    项目
    Cache Code
    是什么限制了我们面向对象
    程序设计语言本质
    不要迷失在技术的海洋中
    程序是给自己看的还是给别人看的
    程序员的春天
    新手如何学习一门新的语言
    无废话C#设计模式之二十:Mediator
    (原创)代码分析-DataGrid实现增删(带提示)改和分页
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467396.html
Copyright © 2011-2022 走看看