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