🆕 #1529 微信支付退款增加支持单品退款和对应查询的接口
This commit is contained in:
@@ -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>");
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
/*
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user