微信支付之下载账单

应用场景

商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。


官方在线文档:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_6

注意:

1.微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致,bill_type为REVOKED;

2.微信在次日9点启动生成前一天的对账单,建议商户10点后再获取;

3.对账单中涉及金额的字段单位为“元”。

接口链接

https://api.mch.weixin.qq.com/pay/downloadbill

参考代码如下

package com.wingo.action.config;

 

import java.util.SortedMap;

import java.util.TreeMap;

 

import com.wingo.util.CommonUtil;

import com.wingo.util.ConfigUtil;

import com.wingo.util.PayCommonUtil;

 

/**

 *

 * @author 李欣桦

 * @date 2015-1-6下午5:13:34

 *

 * 对账接口

 */

public class DownloadBillAction {

    /*注意:

     * 微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致, bill_type 为 REVOKED

     * 微信在次日 9 点启动生成前一天的对账单,建议商户 9 点半后再获取;

     * 对账单中涉及金额的字段单位为“元”。

     * 该接口对应的数据为服务号--->微信支付---->订单流水(退款订单的日期不是发起退订请求的日期,目前没测出是哪个日期)

     */

     /*第一行数据:

     * 当日所有订单 :

     * 交易时间, 公众账号ID, 商户号, 子商户号, 设备号, 微信订单号, 商户订单号, 用户标识,交易类型, 交易状态, 付款银行, 货币种类, 总金额, 现金券金额, 微信退款单号, 商户退

     * 款单号, 退款金额, 现金券退款金额, 退款类型, 退款状态, 商品名称, 商户数据包, 手续费,费率

     *

     * 当日成功支付的订单:

     * 交易时间, 公众账号ID, 商户号, 子商户号, 设备号, 微信订单号, 商户订单号, 用户标识,交易类型, 交易状态, 付款银行, 货币种类, 总金额, 现金券金额, 商品名称, 商户数据包,

     * 手续费, 费率

     *

     * 当日退款的订单:

     * 交易时间, 公众账号ID, 商户号, 子商户号, 设备号, 微信订单号, 商户订单号, 用户标识,交易类型, 交易状态, 付款银行, 货币种类, 总金额, 现金券金额, 退款申请时间, 退款成功

     * 时间, 微信退款单号, 商户退款单号, 退款金额, 现金券退款金额,退款类型,退款状态,商品名称, 商户数据包, 手续费, 费率

     *

     */

   

     /*

     * 第二行为数据记录,各参数以逗号分隔,参数前增加`符号,为标准键盘 1 左边键的字符,字段顺序与表头一致

     *

     */

   

     /*

     * 倒数第二行为订单统计标题,最后一行为统计数据,顺序:总交易单数,总交易额,总退款金额,总现金券退款金额,手续费总金额

     */

    public static void main(String[]args) throws Exception {

        SortedMap<Object,Object> parameters =new TreeMap<Object,Object>();

        parameters.put("appid",ConfigUtil.APPID);

        parameters.put("mch_id",ConfigUtil.MCH_ID);

//     parameters.put("device_info", "");//微信支付分配的终端设备号,填写此字段,只下载该设备号 的对账单

        parameters.put("nonce_str",PayCommonUtil.CreateNoncestr());

        parameters.put("bill_date","20141231");//下载对账单的日期,格式:20140603,日期不可为当天。

        //bill_type:ALL返回当日所有订单信息,默认值SUCCESS返回当日成功支付的订单。REFUND,返回当日退款订单

        parameters.put("bill_type","ALL");

        String sign =PayCommonUtil.createSign("utf-8", parameters);

        parameters.put("sign", sign);

        String reuqestXml =PayCommonUtil.getRequestXml(parameters);

        

        String result=CommonUtil.httpsRequest(ConfigUtil.DOWNLOAD_BILL_URL, "POST",reuqestXml);

        if(result.startsWith("<xml>")){//查询日期为当天时,错误信息提示日期无效

            System.out.println(result);

            System.out.println("无订单");

        }else {  

           String tradeMsg =  result.substring(result.indexOf("`"));

           String tradeInfo =  tradeMsg.substring(0,tradeMsg.indexOf("总"));

           String tradeTotalMsg =tradeMsg.substring(tradeMsg.indexOf("总"));

           String tradeTotalInfo =tradeTotalMsg.substring(tradeTotalMsg.indexOf("`"));

          

           System.out.println(result);

           System.out.println(tradeMsg);

           System.out.println(tradeInfo);

           System.out.println(tradeTotalMsg);

           System.out.println(tradeTotalInfo);

       }

    }

}


上述代码中相关工具类的下载地址如下:

http://download.csdn.net/detail/u011160656/8354883


微信支付之下载账单

上一篇:微信支付之退款查询


下一篇:微信分享JS接口失效说明及解决方案