微信对账单功能开发(V2)

下载交易账单接口开发

应用场景:

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

注意:

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

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

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

4、对账单接口只能下载三个月以内的账单。

5、对账单是以商户号维度来生成的,如一个商户号与多个appid有绑定关系,则使用其中任何一个appid都可以请求下载对账单。对账单中的appid取自交易时候提交的appid,与请求下载对账单时使用的appid无关。

6、自2018年起入驻的商户默认是开通免充值券后的结算对账单,且汇总数据为总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额。

接口链接

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

1.传入的参数:

 

基本代码如下:

 String nonceStr = sdf.format(date).toString();
        wx.setAppid(wechatAPIConstant.APP_ID);// APPid
        wx.setMch_id(wechatAPIConstant.MCH_ID);// 商户id
        //加密类型
        wx.setSign_type("MD5");
        wx.setNonce_str(nonceStr);
        //查询日期
        wx.setBill_date(qDate.replace("-", ""));
        wx.setBill_type("ALL");
        //MD5加密
        String MD5 = getEncryptionMD5(wx);//加密签名
        //设置签名
        wx.setSign(MD5);
        //转换为xml类型
        String xml = changeToXML(wx);
        log.info("debug对账单xml: xml={}", xml);

        //向微信平台发送xml数据
        StringBuffer buffer = HttpUtil.httpsRequest(wechatAPIConstant.WX_API_CHECK_ACCOUNT, "POST", xml);

        //微信平台账单数据
        String s = buffer.toString();

        // 去掉汇总数据,并且去掉'`'
        String tradeInfo = s.substring(0, s.indexOf("总")).replace("`", "");
        //以27个数据为一组
        int rowNum = 27;
        //以日期来分割数据
        List<String> splitGroup = Arrays.asList(tradeInfo.split(qDate));
        List<WechatBillAcount> billGroup =new ArrayList<>();

        for (int i = 0; i < splitGroup.size(); i++) {
            //把第一行表头去掉
            if (i == 0) {
                continue;
            }
            //取到微信账单数据
            List<String> tempSplit = Arrays.asList(splitGroup.get(i).split(","));
            WechatBillAcount bill = new WechatBillAcount();
            bill.setDate(qDate + tempSplit.get(0));
            bill.setAppId(tempSplit.get(1));
            bill.setMch_id(tempSplit.get(2));
            bill.setSubMch_id(tempSplit.get(3));
            bill.setDevice_info(tempSplit.get(4));
            bill.setWeiXinOrderNo(tempSplit.get(5));
            bill.setMchOrderNo(tempSplit.get(6));
            bill.setUserId(tempSplit.get(7));
            bill.setType(tempSplit.get(8));
            bill.setStatus(tempSplit.get(9));
            bill.setBank(tempSplit.get(10));
            bill.setCurrency(tempSplit.get(11));
            bill.setAmount(tempSplit.get(12));
            bill.setEnvelopeAmount(tempSplit.get(13));
            bill.setWxRefundNo(tempSplit.get(14));
            bill.setBusinessRefundNo(tempSplit.get(15));
            bill.setRefundAmount(tempSplit.get(16));
            bill.setRedEnvelopesRefundAmount(tempSplit.get(17));
            bill.setRefundType(tempSplit.get(18));
            bill.setRefundStatus(tempSplit.get(19));
            bill.setName(tempSplit.get(20));
            bill.setPacket(tempSplit.get(21));
            BigDecimal poundage = new BigDecimal(tempSplit.get(22));
            bill.setPoundage(poundage);
            bill.setRate(tempSplit.get(23));
            BigDecimal orderAmount = new BigDecimal(tempSplit.get(24));
            bill.setOrderAmount(orderAmount);
            bill.setAskRefundAmount(tempSplit.get(25));
            billGroup.add(bill);
        }
        addVOToEntity(billGroup);
    }

以xml形式传给微信对账单接口而后接口会返回值:

<xml>
  <appid>wx2421b1c4370ec43b</appid>
  <bill_date>20141110</bill_date>
  <bill_type>ALL</bill_type>
  <mch_id>10000100</mch_id>
  <nonce_str>21df7dc9cd8616b56919f20d9f679233</nonce_str>
  <sign>332F17B766FC787203EBE9D6E40457A1</sign>
</xml>

失败示例:

<xml><return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[require POST method]]></return_msg>
<error_code><![CDATA[20001]]></error_code></xml>

成功示例:

交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,代金券或立减优惠金额,微信退款单号,商户退款单号,退款金额,代金券或立减优惠退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率
`2014-11-1016:33:45,`wx2421b1c4370ec43b,`10000100,`0,`1000,`1001690740201411100005734289,`1415640626,`085e9858e3ba5186aafcbaed1,`MICROPAY,`SUCCESS,`CFT,`CNY,`0.01,`0.0,`0,`0,`0,`0,`,`,`被扫支付测试,`订单额外描述,`0,`0.60%
`2014-11-1016:46:14,`wx2421b1c4370ec43b,`10000100,`0,`1000,`1002780740201411100005729794,`1415635270,`085e9858e90ca40c0b5aee463,`MICROPAY,`SUCCESS,`CFT,`CNY,`0.01,`0.0,`0,`0,`0,`0,`,`,`被扫支付测试,`订单额外描述,`0,`0.60%
总交易单数,总交易额,总退款金额,总代金券或立减优惠退款金额,手续费总金额
`2,`0.02,`0.0,`0.0,`0

最后解析响应的数据即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值