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


    下载交易账单接口开发

    应用场景:

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

    注意:

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

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

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

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

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

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

    接口链接

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

    1.传入的参数:

     

    基本代码如下:

    1. String nonceStr = sdf.format(date).toString();
    2. wx.setAppid(wechatAPIConstant.APP_ID);// APPid
    3. wx.setMch_id(wechatAPIConstant.MCH_ID);// 商户id
    4. //加密类型
    5. wx.setSign_type("MD5");
    6. wx.setNonce_str(nonceStr);
    7. //查询日期
    8. wx.setBill_date(qDate.replace("-", ""));
    9. wx.setBill_type("ALL");
    10. //MD5加密
    11. String MD5 = getEncryptionMD5(wx);//加密签名
    12. //设置签名
    13. wx.setSign(MD5);
    14. //转换为xml类型
    15. String xml = changeToXML(wx);
    16. log.info("debug对账单xml: xml={}", xml);
    17. //向微信平台发送xml数据
    18. StringBuffer buffer = HttpUtil.httpsRequest(wechatAPIConstant.WX_API_CHECK_ACCOUNT, "POST", xml);
    19. //微信平台账单数据
    20. String s = buffer.toString();
    21. // 去掉汇总数据,并且去掉'`'
    22. String tradeInfo = s.substring(0, s.indexOf("总")).replace("`", "");
    23. //以27个数据为一组
    24. int rowNum = 27;
    25. //以日期来分割数据
    26. List splitGroup = Arrays.asList(tradeInfo.split(qDate));
    27. List billGroup =new ArrayList<>();
    28. for (int i = 0; i < splitGroup.size(); i++) {
    29. //把第一行表头去掉
    30. if (i == 0) {
    31. continue;
    32. }
    33. //取到微信账单数据
    34. List tempSplit = Arrays.asList(splitGroup.get(i).split(","));
    35. WechatBillAcount bill = new WechatBillAcount();
    36. bill.setDate(qDate + tempSplit.get(0));
    37. bill.setAppId(tempSplit.get(1));
    38. bill.setMch_id(tempSplit.get(2));
    39. bill.setSubMch_id(tempSplit.get(3));
    40. bill.setDevice_info(tempSplit.get(4));
    41. bill.setWeiXinOrderNo(tempSplit.get(5));
    42. bill.setMchOrderNo(tempSplit.get(6));
    43. bill.setUserId(tempSplit.get(7));
    44. bill.setType(tempSplit.get(8));
    45. bill.setStatus(tempSplit.get(9));
    46. bill.setBank(tempSplit.get(10));
    47. bill.setCurrency(tempSplit.get(11));
    48. bill.setAmount(tempSplit.get(12));
    49. bill.setEnvelopeAmount(tempSplit.get(13));
    50. bill.setWxRefundNo(tempSplit.get(14));
    51. bill.setBusinessRefundNo(tempSplit.get(15));
    52. bill.setRefundAmount(tempSplit.get(16));
    53. bill.setRedEnvelopesRefundAmount(tempSplit.get(17));
    54. bill.setRefundType(tempSplit.get(18));
    55. bill.setRefundStatus(tempSplit.get(19));
    56. bill.setName(tempSplit.get(20));
    57. bill.setPacket(tempSplit.get(21));
    58. BigDecimal poundage = new BigDecimal(tempSplit.get(22));
    59. bill.setPoundage(poundage);
    60. bill.setRate(tempSplit.get(23));
    61. BigDecimal orderAmount = new BigDecimal(tempSplit.get(24));
    62. bill.setOrderAmount(orderAmount);
    63. bill.setAskRefundAmount(tempSplit.get(25));
    64. billGroup.add(bill);
    65. }
    66. addVOToEntity(billGroup);
    67. }

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

    1. <xml>
    2. <appid>wx2421b1c4370ec43bappid>
    3. <bill_date>20141110bill_date>
    4. <bill_type>ALLbill_type>
    5. <mch_id>10000100mch_id>
    6. <nonce_str>21df7dc9cd8616b56919f20d9f679233nonce_str>
    7. <sign>332F17B766FC787203EBE9D6E40457A1sign>
    8. xml>

    失败示例:

    1. <xml><return_code>return_code>
    2. <return_msg>return_msg>
    3. <error_code>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

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

  • 相关阅读:
    Android10 SystemUI系列(一)概述
    总结改变和获取 url 的方法 (包括 umi,react-router,原生)
    机器学习(十一):KNN(K近邻)
    微服务基础,分布式核心,常见微服务框架,SpringCloud概述,搭建SpringCloud微服务项目详细步骤,含源代码
    centos7 + mysql 8 安装confluence7.19.3
    【无标题】
    Linux相关概念及常见指令
    Cookie的常用方法(javaWeb)
    序列召回基础+GRU4Rec论文阅读
    计算机毕业设计之java+SSM酒店客房预定管理系统
  • 原文地址:https://blog.csdn.net/qq_58680364/article/details/127923253