Skip to content

Commit 38959f8

Browse files
committed
🐛 binarywang#1455 修复微信支付分账结果查询接口的分账接收人解析错误的问题,并补充相关单元测试代码
1 parent 8d6978d commit 38959f8

3 files changed

Lines changed: 75 additions & 5 deletions

File tree

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResult.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
import com.google.gson.FieldNamingPolicy;
55
import com.google.gson.Gson;
66
import com.google.gson.GsonBuilder;
7+
import com.google.gson.reflect.TypeToken;
78
import com.thoughtworks.xstream.annotations.XStreamAlias;
89
import lombok.Data;
910
import lombok.EqualsAndHashCode;
1011
import lombok.NoArgsConstructor;
1112
import org.w3c.dom.Document;
1213

14+
import java.util.List;
15+
1316
/**
1417
* @author Wang GuangXin 2019/10/22 15:51
1518
* @version 1.0
@@ -49,7 +52,11 @@ public class ProfitSharingQueryResult extends BaseWxPayResult {
4952
* 分账接收方列表
5053
*/
5154
@XStreamAlias("receivers")
52-
private String receivers;
55+
private String receiversJson;
56+
/**
57+
* 分账接收方列表json转换后的对象
58+
*/
59+
private List<Receiver> receivers;
5360
/**
5461
* 分账金额
5562
*/
@@ -61,11 +68,14 @@ public class ProfitSharingQueryResult extends BaseWxPayResult {
6168
@XStreamAlias("description")
6269
private String description;
6370

64-
public ProfitSharingQueryResult.Receivers formatReceivers() {
71+
public List<Receiver> formatReceivers() {
6572
GsonBuilder gsonBuilder = new GsonBuilder();
6673
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
6774
Gson gson = gsonBuilder.create();
68-
return gson.fromJson(receivers, Receivers.class);
75+
final List<Receiver> receivers = gson.fromJson(receiversJson, new TypeToken<List<Receiver>>() {
76+
}.getType());
77+
this.receivers = receivers;
78+
return receivers;
6979
}
7080

7181
@Override
@@ -75,13 +85,13 @@ protected void loadXML(Document d) {
7585
orderId = readXMLString(d, "orderId");
7686
status = readXMLString(d, "status");
7787
closeReason = readXMLString(d, "close_reason");
78-
receivers = readXMLString(d, "receivers");
88+
receiversJson = readXMLString(d, "receivers");
7989
amount = readXMLInteger(d, "amount");
8090
description = readXMLString(d, "description");
8191
}
8292

8393
@Data
84-
public class Receivers {
94+
public class Receiver {
8595
/**
8696
* 分账接收方类型
8797
*/

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public ProfitSharingQueryResult profitSharingQuery(ProfitSharingQueryRequest req
8181

8282
String responseContent = this.payService.post(url, request.toXML(), true);
8383
ProfitSharingQueryResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingQueryResult.class);
84+
result.formatReceivers();
8485
result.checkResult(this.payService, request.getSignType(), true);
8586
return result;
8687
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.github.binarywang.wxpay.bean.profitsharing;
2+
3+
import org.testng.annotations.Test;
4+
5+
import java.util.List;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
/**
10+
* 测试.
11+
*
12+
* @author <a href="https://github.com/binarywang">Binary Wang</a>
13+
* @date 2020-03-22
14+
*/
15+
@Test
16+
public class ProfitSharingQueryResultTest {
17+
18+
@Test
19+
public void testFormatReceivers() {
20+
ProfitSharingQueryResult result = new ProfitSharingQueryResult();
21+
result.setReceiversJson("[\n" +
22+
"{\n" +
23+
"\"type\": \"MERCHANT_ID\",\n" +
24+
"\"account\":\"190001001\",\n" +
25+
"\"amount\":100,\n" +
26+
"\"description\": \"分到商户\",\n" +
27+
"\"result\": \"SUCCESS\",\n" +
28+
"\"finish_time\": \"20180608170132\"\n" +
29+
"},\n" +
30+
"{\n" +
31+
"\"type\": \"PERSONAL_WECHATID\",\n" +
32+
"\"account\":\"86693952\",\n" +
33+
"\"amount\":888,\n" +
34+
"\"description\": \"分到个人\",\n" +
35+
"\"result\": \"SUCCESS\",\n" +
36+
"\"finish_time\": \"20180608170132\"\n" +
37+
"}\n" +
38+
"]");
39+
40+
List<ProfitSharingQueryResult.Receiver> receivers = result.formatReceivers();
41+
assertThat(receivers).isNotEmpty();
42+
43+
assertThat(receivers.get(0)).isNotNull();
44+
assertThat(receivers.get(0).getType()).isEqualTo("MERCHANT_ID");
45+
assertThat(receivers.get(0).getAccount()).isEqualTo("190001001");
46+
assertThat(receivers.get(0).getAmount()).isEqualTo(100);
47+
assertThat(receivers.get(0).getDescription()).isEqualTo("分到商户");
48+
assertThat(receivers.get(0).getResult()).isEqualTo("SUCCESS");
49+
assertThat(receivers.get(0).getFinishTime()).isEqualTo("20180608170132");
50+
51+
assertThat(receivers.get(1)).isNotNull();
52+
assertThat(receivers.get(1).getType()).isEqualTo("PERSONAL_WECHATID");
53+
assertThat(receivers.get(1).getAccount()).isEqualTo("86693952");
54+
assertThat(receivers.get(1).getAmount()).isEqualTo(888);
55+
assertThat(receivers.get(1).getDescription()).isEqualTo("分到个人");
56+
assertThat(receivers.get(1).getResult()).isEqualTo("SUCCESS");
57+
assertThat(receivers.get(1).getFinishTime()).isEqualTo("20180608170132");
58+
}
59+
}

0 commit comments

Comments
 (0)