| @@ -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"); | |||
| } | |||
| } | |||