微信支付之下载账单
应用场景
商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。
官方在线文档: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