1
0
mirror of synced 2025-12-28 14:07:58 +08:00

🆕 #1529 微信支付退款增加支持单品退款和对应查询的接口

This commit is contained in:
Binary Wang
2020-06-07 17:59:34 +08:00
parent 58b261753d
commit 92c0fd698b
10 changed files with 426 additions and 7 deletions

View File

@@ -0,0 +1,47 @@
package com.github.binarywang.wxpay.bean.request;
import org.testng.annotations.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
* @date 2020-06-07
*/
public class WxPayRefundRequestTest {
@Test
public void testToXML() {
WxPayRefundRequest refundRequest = new WxPayRefundRequest();
refundRequest.setAppid("wx2421b1c4370ec43b");
refundRequest.setMchId("10000100");
refundRequest.setNonceStr("6cefdb308e1e2e8aabd48cf79e546a02");
refundRequest.setNotifyUrl("https://weixin.qq.com/");
refundRequest.setOutRefundNo("1415701182");
refundRequest.setOutTradeNo("1415757673");
refundRequest.setRefundFee(1);
refundRequest.setTotalFee(1);
refundRequest.setTransactionId("");
refundRequest.setDetail("{\"goods_detail\":[{\"goods_id\":\"商品编码\",\"wxpay_goods_id\":\"1001\",\"goods_name\":\"iPhone6s\n" +
"16G\",\"refund_amount\":528800,\"refund_quantity\":1,\"price\":528800},{\"goods_id\":\"商品编码\",\"wxpay_goods_id\":\"1001\",\"goods_name\":\"iPhone6s\n" +
"16G\",\"refund_amount\"\":528800,\"refund_quantity\":1,\"price\":608800}]}");
refundRequest.setSign("FE56DD4AA85C0EECA82C35595A69E153");
assertThat(refundRequest.toXML())
.isEqualTo("<xml>\n" +
" <appid>wx2421b1c4370ec43b</appid>\n" +
" <mch_id>10000100</mch_id>\n" +
" <nonce_str>6cefdb308e1e2e8aabd48cf79e546a02</nonce_str>\n" +
" <sign>FE56DD4AA85C0EECA82C35595A69E153</sign>\n" +
" <transaction_id></transaction_id>\n" +
" <out_trade_no>1415757673</out_trade_no>\n" +
" <out_refund_no>1415701182</out_refund_no>\n" +
" <total_fee>1</total_fee>\n" +
" <refund_fee>1</refund_fee>\n" +
" <notify_url>https://weixin.qq.com/</notify_url>\n" +
" <detail><![CDATA[{\"goods_detail\":[{\"goods_id\":\"商品编码\",\"wxpay_goods_id\":\"1001\",\"goods_name\":\"iPhone6s\n" +
"16G\",\"refund_amount\":528800,\"refund_quantity\":1,\"price\":528800},{\"goods_id\":\"商品编码\",\"wxpay_goods_id\":\"1001\",\"goods_name\":\"iPhone6s\n" +
"16G\",\"refund_amount\"\":528800,\"refund_quantity\":1,\"price\":608800}]}]]></detail>\n" +
"</xml>");
}
}

View File

@@ -13,7 +13,6 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
public class WxPayRefundResultTest {
@Test
public void testFromXML() {
/*
@@ -49,6 +48,49 @@ public class WxPayRefundResultTest {
assertThat(result.getRefundCoupons().get(0).getCouponRefundFee()).isEqualTo(1);
}
@Test
public void testFromXML_danpin() {
//样例来自https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_103&index=3
String xmlString = "<xml>\n" +
"<return_code><![CDATA[SUCCESS]]></return_code>\n" +
"<return_msg><![CDATA[OK]]></return_msg>\n" +
"<appid><![CDATA[wx2421b1c4370ec43b]]></appid>\n" +
"<mch_id><![CDATA[10000100]]></mch_id>\n" +
"<nonce_str><![CDATA[NfsMFbUFpdbEhPXP]]></nonce_str>\n" +
"<sign><![CDATA[B7274EB9F8925EB93100DD2085FA56C0]]></sign>\n" +
"<result_code><![CDATA[SUCCESS]]></result_code>\n" +
"<transaction_id><![CDATA[1008450740201411110005820873]]></transaction_id>\n" +
"<out_trade_no><![CDATA[1415757673]]></out_trade_no>\n" +
"<out_refund_no><![CDATA[1415701182]]></out_refund_no>\n" +
"<refund_id><![CDATA[2008450740201411110000174436]]></refund_id>\n" +
"<refund_channel><![CDATA[]]></refund_channel>\n" +
"<total_fee>1</total_fee >\n" +
"<refund_fee>1</refund_fee>\n" +
"<cash_fee>1</cash_fee >\n" +
"<cash_refund_fee>1</cash_refund_fee>\n" +
"<promotion_detail>{\"promotion_detail\":[{\"promotion_id\":\"109519\",\"scope\":\"SINGLE\",\"type\":\"DISCOUNT\",\"refund_amount\":5,\"goods_detail\":[{\"goods_id\":\"a_goods1\",\"refund_quantity\":7,\"price\":1,\"refund_amount\":4},{\"goods_id\":\"a_goods2\",\"refund_quantity\":1,\"price\":2,\"refund_amount\":1}]}]}</promotion_detail>\n" +
"</xml>";
WxPayRefundResult result = BaseWxPayResult.fromXML(xmlString, WxPayRefundResult.class);
result.composePromotionDetails();
assertThat(result.getPromotionDetails()).isNotEmpty();
assertThat(result.getPromotionDetails().get(0).getPromotionId()).isEqualTo("109519");
assertThat(result.getPromotionDetails().get(0).getRefundAmount()).isEqualTo(5);
assertThat(result.getPromotionDetails().get(0).getScope()).isEqualTo("SINGLE");
assertThat(result.getPromotionDetails().get(0).getType()).isEqualTo("DISCOUNT");
assertThat(result.getPromotionDetails().get(0).getGoodsDetails()).isNotEmpty();
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(0).getGoodsId()).isEqualTo("a_goods1");
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(0).getRefundQuantity()).isEqualTo(7);
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(0).getRefundAmount()).isEqualTo(4);
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(0).getPrice()).isEqualTo(1);
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(1).getGoodsId()).isEqualTo("a_goods2");
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(1).getRefundQuantity()).isEqualTo(1);
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(1).getRefundAmount()).isEqualTo(1);
assertThat(result.getPromotionDetails().get(0).getGoodsDetails().get(1).getPrice()).isEqualTo(2);
}
@Test
public void testFromXMLFastMode() {
/*

View File

@@ -315,6 +315,18 @@ public class BaseWxPayServiceImplTest {
log.info(result.toString());
}
@Test
public void testRefundV2() throws WxPayException {
WxPayRefundResult result = this.payService.refundV2(
WxPayRefundRequest.newBuilder()
.outRefundNo("aaa")
.outTradeNo("1111")
.totalFee(1222)
.refundFee(111)
.build());
log.info(result.toString());
}
/**
* Test method for {@link WxPayService#refundQuery(String, String, String, String)} .
*
@@ -341,6 +353,11 @@ public class BaseWxPayServiceImplTest {
log.info(result.toString());
}
@Test
public void testRefundQueryV2() throws WxPayException {
this.payService.refundQueryV2(WxPayRefundQueryRequest.newBuilder().outRefundNo("1").build());
}
/**
* Test parse refund notify result.
*
@@ -686,4 +703,5 @@ public class BaseWxPayServiceImplTest {
assertThat(result).isNotNull();
System.out.println(result);
}
}