🐛 #1455 修复微信支付分账结果查询接口的分账接收人解析错误的问题,并补充相关单元测试代码

This commit is contained in:
Binary Wang 2020-03-22 14:37:32 +08:00
parent 8d6978d757
commit 38959f821a
3 changed files with 75 additions and 5 deletions

View File

@ -4,12 +4,15 @@ import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
import com.google.gson.FieldNamingPolicy; import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import java.util.List;
/** /**
* @author Wang GuangXin 2019/10/22 15:51 * @author Wang GuangXin 2019/10/22 15:51
* @version 1.0 * @version 1.0
@ -49,7 +52,11 @@ public class ProfitSharingQueryResult extends BaseWxPayResult {
* 分账接收方列表 * 分账接收方列表
*/ */
@XStreamAlias("receivers") @XStreamAlias("receivers")
private String receivers; private String receiversJson;
/**
* 分账接收方列表json转换后的对象
*/
private List<Receiver> receivers;
/** /**
* 分账金额 * 分账金额
*/ */
@ -61,11 +68,14 @@ public class ProfitSharingQueryResult extends BaseWxPayResult {
@XStreamAlias("description") @XStreamAlias("description")
private String description; private String description;
public ProfitSharingQueryResult.Receivers formatReceivers() { public List<Receiver> formatReceivers() {
GsonBuilder gsonBuilder = new GsonBuilder(); GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = gsonBuilder.create(); Gson gson = gsonBuilder.create();
return gson.fromJson(receivers, Receivers.class); final List<Receiver> receivers = gson.fromJson(receiversJson, new TypeToken<List<Receiver>>() {
}.getType());
this.receivers = receivers;
return receivers;
} }
@Override @Override
@ -75,13 +85,13 @@ public class ProfitSharingQueryResult extends BaseWxPayResult {
orderId = readXMLString(d, "orderId"); orderId = readXMLString(d, "orderId");
status = readXMLString(d, "status"); status = readXMLString(d, "status");
closeReason = readXMLString(d, "close_reason"); closeReason = readXMLString(d, "close_reason");
receivers = readXMLString(d, "receivers"); receiversJson = readXMLString(d, "receivers");
amount = readXMLInteger(d, "amount"); amount = readXMLInteger(d, "amount");
description = readXMLString(d, "description"); description = readXMLString(d, "description");
} }
@Data @Data
public class Receivers { public class Receiver {
/** /**
* 分账接收方类型 * 分账接收方类型
*/ */

View File

@ -81,6 +81,7 @@ public class ProfitSharingServiceImpl implements ProfitSharingService {
String responseContent = this.payService.post(url, request.toXML(), true); String responseContent = this.payService.post(url, request.toXML(), true);
ProfitSharingQueryResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingQueryResult.class); ProfitSharingQueryResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingQueryResult.class);
result.formatReceivers();
result.checkResult(this.payService, request.getSignType(), true); result.checkResult(this.payService, request.getSignType(), true);
return result; return result;
} }

View File

@ -0,0 +1,59 @@
package com.github.binarywang.wxpay.bean.profitsharing;
import org.testng.annotations.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* 测试.
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
* @date 2020-03-22
*/
@Test
public class ProfitSharingQueryResultTest {
@Test
public void testFormatReceivers() {
ProfitSharingQueryResult result = new ProfitSharingQueryResult();
result.setReceiversJson("[\n" +
"{\n" +
"\"type\": \"MERCHANT_ID\",\n" +
"\"account\":\"190001001\",\n" +
"\"amount\":100,\n" +
"\"description\": \"分到商户\",\n" +
"\"result\": \"SUCCESS\",\n" +
"\"finish_time\": \"20180608170132\"\n" +
"},\n" +
"{\n" +
"\"type\": \"PERSONAL_WECHATID\",\n" +
"\"account\":\"86693952\",\n" +
"\"amount\":888,\n" +
"\"description\": \"分到个人\",\n" +
"\"result\": \"SUCCESS\",\n" +
"\"finish_time\": \"20180608170132\"\n" +
"}\n" +
"]");
List<ProfitSharingQueryResult.Receiver> receivers = result.formatReceivers();
assertThat(receivers).isNotEmpty();
assertThat(receivers.get(0)).isNotNull();
assertThat(receivers.get(0).getType()).isEqualTo("MERCHANT_ID");
assertThat(receivers.get(0).getAccount()).isEqualTo("190001001");
assertThat(receivers.get(0).getAmount()).isEqualTo(100);
assertThat(receivers.get(0).getDescription()).isEqualTo("分到商户");
assertThat(receivers.get(0).getResult()).isEqualTo("SUCCESS");
assertThat(receivers.get(0).getFinishTime()).isEqualTo("20180608170132");
assertThat(receivers.get(1)).isNotNull();
assertThat(receivers.get(1).getType()).isEqualTo("PERSONAL_WECHATID");
assertThat(receivers.get(1).getAccount()).isEqualTo("86693952");
assertThat(receivers.get(1).getAmount()).isEqualTo(888);
assertThat(receivers.get(1).getDescription()).isEqualTo("分到个人");
assertThat(receivers.get(1).getResult()).isEqualTo("SUCCESS");
assertThat(receivers.get(1).getFinishTime()).isEqualTo("20180608170132");
}
}