From 7a389ad851ed67420611871c63a1b2477cdc661c Mon Sep 17 00:00:00 2001 From: m8cool <278621965@qq.com> Date: Mon, 29 Jul 2019 11:06:40 +0800 Subject: [PATCH] =?UTF-8?q?#1125=20=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=BF=AE=E5=A4=8D=E5=AF=B9=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=8E=A5=E5=8F=A3=E7=BB=93=E6=9E=9C=E4=B8=AD?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E8=AE=A2=E5=8D=95=E6=80=BB=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E5=92=8C=E7=94=B3=E8=AF=B7=E9=80=80=E6=AC=BE=E6=80=BB=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wxpay/bean/result/WxPayBillResult.java | 25 ++++++-- .../bean/result/WxPayBillResultTest.java | 64 +++++++++++++++++++ 2 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxPayBillResultTest.java diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayBillResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayBillResult.java index e568a77d..15416b1f 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayBillResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayBillResult.java @@ -1,13 +1,13 @@ package com.github.binarywang.wxpay.bean.result; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - import lombok.Data; import lombok.NoArgsConstructor; import me.chanjar.weixin.common.util.json.WxGsonBuilder; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + /** * 微信对账单结果类. * @@ -106,6 +106,7 @@ public class WxPayBillResult implements Serializable { int j = tempStr.length / t.length; // 纪录数组下标 int k = 1; + // 交易时间,公众账号ID,商户号,特约商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,应结订单金额,代金券金额,微信退款单号,商户退款单号,退款金额,充值券退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率,订单金额,申请退款金额,费率备注 for (int i = 0; i < j; i++) { WxPayBillInfo result = new WxPayBillInfo(); result.setTradeTime(tempStr[k].trim()); @@ -132,6 +133,9 @@ public class WxPayBillResult implements Serializable { result.setAttach(tempStr[k + 21].trim()); result.setPoundage(tempStr[k + 22].trim()); result.setPoundageRate(tempStr[k + 23].trim()); + result.setTotalAmount(tempStr[k + 24].trim()); + result.setAppliedRefundAmount(tempStr[k + 25].trim()); + result.setFeeRemark(tempStr[k + 26].trim()); results.add(result); k += t.length; } @@ -140,7 +144,7 @@ public class WxPayBillResult implements Serializable { billResult.setBillInfoList(results); /* - * 总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额 `2,`0.02,`0.0,`0.0,`0 + * 总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额 `48,`5.76,`1.42,`0.00,`0.01000,`5.76,`1.42 * 参考以上格式进行取值 */ String[] totalTempStr = objStr.replaceAll(",", " ").split("`"); @@ -149,6 +153,9 @@ public class WxPayBillResult implements Serializable { billResult.setTotalRefundFee(totalTempStr[3].trim()); billResult.setTotalCouponFee(totalTempStr[4].trim()); billResult.setTotalPoundageFee(totalTempStr[5].trim()); + billResult.setTotalAmount(get(totalTempStr, 6)); + billResult.setTotalAppliedRefundFee(get(totalTempStr, 7)); + return billResult; } @@ -174,7 +181,7 @@ public class WxPayBillResult implements Serializable { int j = tempStr.length / t.length; // 纪录数组下标 int k = 1; - // 交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,代金券或立减优惠金额,商品名称,商户数据包,手续费,费率 + // 交易时间,公众账号ID,商户号,特约商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,应结订单金额,代金券金额,商品名称,商户数据包,手续费,费率,订单金额,费率备注 for (int i = 0; i < j; i++) { WxPayBillInfo result = new WxPayBillInfo(); result.setTradeTime(tempStr[k].trim()); @@ -195,6 +202,8 @@ public class WxPayBillResult implements Serializable { result.setAttach(tempStr[k + 15].trim()); result.setPoundage(tempStr[k + 16].trim()); result.setPoundageRate(tempStr[k + 17].trim()); + result.setTotalAmount(tempStr[k + 18].trim()); + result.setFeeRemark(tempStr[k + 19].trim()); results.add(result); k += t.length; } @@ -203,7 +212,7 @@ public class WxPayBillResult implements Serializable { billResult.setBillInfoList(results); /* - * 总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额 `2,`0.02,`0.0,`0.0,`0 + * 总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额 `31,`3.05,`0.00,`0.00,`0.02000,`3.05,`0.00 * 参考以上格式进行取值 */ String[] totalTempStr = objStr.replaceAll(",", " ").split("`"); @@ -212,6 +221,8 @@ public class WxPayBillResult implements Serializable { billResult.setTotalRefundFee(totalTempStr[3].trim()); billResult.setTotalCouponFee(totalTempStr[4].trim()); billResult.setTotalPoundageFee(totalTempStr[5].trim()); + billResult.setTotalAmount(get(totalTempStr, 6)); + billResult.setTotalAppliedRefundFee(get(totalTempStr, 7)); return billResult; } diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxPayBillResultTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxPayBillResultTest.java new file mode 100644 index 00000000..76bbf057 --- /dev/null +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxPayBillResultTest.java @@ -0,0 +1,64 @@ +package com.github.binarywang.wxpay.bean.result; + +import com.github.binarywang.wxpay.constant.WxPayConstants; +import org.testng.Assert; +import org.testng.annotations.Test; + +/** + * @author m8cool + */ +public class WxPayBillResultTest { + + public static final String PAY_BILL_RESULT_ALL_CONTENT = "交易时间,公众账号ID,商户号,特约商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,应结订单金额,代金券金额,微信退款单号,商户退款单号,退款金额,充值券退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率,订单金额,申请退款金额,费率备注\n" + + "`2019-07-25 08:35:41,`WWWW,`XXXXXXXX,`0,`,`XXXXXXXXXXXXX,`XXXXXXXXXX,`XXXXXXXXXXX,`JSAPI,`SUCCESS,`PSBC_DEBIT,`CNY,`6.00,`0.00,`0,`0,`0.00,`0.00,`,`,`XXXXXX,`XXXXXXX,`0.04000,`0.60%,`6.00,`0.00,`\n" + + "总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额\n" + + "`48,`5.76,`1.42,`0.00,`0.01000,`5.76,`1.42\n"; + public static final String PAY_BILL_RESULT_SUCCESS_CONTENT = "交易时间,公众账号ID,商户号,特约商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,应结订单金额,代金券金额,商品名称,商户数据包,手续费,费率,订单金额,费率备注\n" + + "`2019-07-23 18:46:41,`XXXX,`XXX,`XXX,`,`XXX,`XXX,`XXX,`JSAPI,`SUCCESS,`CFT,`CNY,`0.01,`0.00,`XXX,`XXXX,`0.00000,`0.60%,`0.01,`\n" + + "总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额\n" + + "`31,`3.05,`0.00,`0.00,`0.02000,`3.05,`0.00"; + public static final String PAY_BILL_RESULT_REFUND_CONTENT = "交易时间,公众账号ID,商户号,特约商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,应结订单金额,代金券金额,退款申请时间,退款成功时间,微信退款单号,商户退款单号,退款金额,充值券退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率,订单金额,申请退款金额,费率备注\n" + + "`2019-07-23 20:53:36,`xxx,`xxx,`xxx,`,`xxx,`xxxx,`xxxxx,`JSAPI,`REFUND,`CFT,`CNY,`0.00,`0.00,`2019-07-23 20:53:36,`2019-07-23 20:53:40,`xxxx,`xxx,`0.01,`0.00,`ORIGINAL,`SUCCESS,`xxxx,`xxxx,`0.00000,`0.60%,`0.00,`0.01,`\n" + + "总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额\n" + + "`4,`0.00,`2.02,`0.00,`-0.02000,`0.00,`2.02"; + + /** + * 测试微信返回类型为ALL时,解析结果是否正确 + */ + @Test + public void testFromRawBillResultStringAll() { + WxPayBillResult result = WxPayBillResult.fromRawBillResultString(PAY_BILL_RESULT_ALL_CONTENT, WxPayConstants.BillType.ALL); + + Assert.assertEquals(result.getTotalRecord(), "48"); + Assert.assertEquals(result.getTotalFee(), "5.76"); + Assert.assertEquals(result.getTotalRefundFee(), "1.42"); + Assert.assertEquals(result.getTotalCouponFee(), "0.00"); + Assert.assertEquals(result.getTotalPoundageFee(), "0.01000"); + Assert.assertEquals(result.getTotalAmount(), "5.76"); + Assert.assertEquals(result.getTotalAppliedRefundFee(), "1.42"); + Assert.assertEquals(result.getBillInfoList().get(0).getTotalAmount(), "6.00"); + Assert.assertEquals(result.getBillInfoList().get(0).getAppliedRefundAmount(), "0.00"); + Assert.assertEquals(result.getBillInfoList().get(0).getFeeRemark(), ""); + + + } + + /** + * 测试微信返回类型为SUCCESS时,解析结果是否正确 + */ + @Test + public void testFromRawBillResultStringSuccess() { + WxPayBillResult result = WxPayBillResult.fromRawBillResultString(PAY_BILL_RESULT_SUCCESS_CONTENT, WxPayConstants.BillType.SUCCESS); + + Assert.assertEquals(result.getTotalRecord(), "31"); + Assert.assertEquals(result.getTotalFee(), "3.05"); + Assert.assertEquals(result.getTotalRefundFee(), "0.00"); + Assert.assertEquals(result.getTotalCouponFee(), "0.00"); + Assert.assertEquals(result.getTotalPoundageFee(), "0.02000"); + Assert.assertEquals(result.getTotalAmount(), "3.05"); + Assert.assertEquals(result.getTotalAppliedRefundFee(), "0.00"); + Assert.assertEquals(result.getBillInfoList().get(0).getTotalAmount(), "0.01"); + Assert.assertEquals(result.getBillInfoList().get(0).getFeeRemark(), ""); + + } +}