🐛 #3265【视频号】视频号线索[获取留资信息详情]接口兼容新版本返回的更多详细字段
This commit is contained in:
@@ -1,6 +1,11 @@
|
|||||||
package me.chanjar.weixin.channel.api.impl;
|
package me.chanjar.weixin.channel.api.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import me.chanjar.weixin.channel.api.WxLeadComponentService;
|
import me.chanjar.weixin.channel.api.WxLeadComponentService;
|
||||||
@@ -15,6 +20,7 @@ import me.chanjar.weixin.channel.bean.lead.component.response.GetLeadsRequestIdR
|
|||||||
import me.chanjar.weixin.channel.bean.lead.component.response.LeadInfoResponse;
|
import me.chanjar.weixin.channel.bean.lead.component.response.LeadInfoResponse;
|
||||||
import me.chanjar.weixin.channel.util.ResponseUtils;
|
import me.chanjar.weixin.channel.util.ResponseUtils;
|
||||||
import me.chanjar.weixin.common.error.WxErrorException;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
|
||||||
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.LeadComponent.GET_LEADS_COMPONENT_ID;
|
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.LeadComponent.GET_LEADS_COMPONENT_ID;
|
||||||
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.LeadComponent.GET_LEADS_COMPONENT_PROMOTE_RECORD;
|
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.LeadComponent.GET_LEADS_COMPONENT_PROMOTE_RECORD;
|
||||||
@@ -33,16 +39,19 @@ public class WxLeadComponentServiceImpl implements WxLeadComponentService {
|
|||||||
|
|
||||||
/** 微信商店服务 */
|
/** 微信商店服务 */
|
||||||
private final BaseWxChannelServiceImpl shopService;
|
private final BaseWxChannelServiceImpl shopService;
|
||||||
|
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||||
@Override
|
@Override
|
||||||
public LeadInfoResponse getLeadsInfoByComponentId(GetLeadInfoByComponentRequest req) throws WxErrorException {
|
public LeadInfoResponse getLeadsInfoByComponentId(GetLeadInfoByComponentRequest req) throws WxErrorException {
|
||||||
|
req.setVersion(ObjectUtils.defaultIfNull(req.getVersion(), 1));
|
||||||
String resJson = shopService.post(GET_LEADS_INFO_BY_COMPONENT_ID, req);
|
String resJson = shopService.post(GET_LEADS_INFO_BY_COMPONENT_ID, req);
|
||||||
return ResponseUtils.decode(resJson, LeadInfoResponse.class);
|
return this.convertLeadInfoResponse(resJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LeadInfoResponse getLeadsInfoByRequestId(GetLeadsInfoByRequestIdRequest req) throws WxErrorException {
|
public LeadInfoResponse getLeadsInfoByRequestId(GetLeadsInfoByRequestIdRequest req) throws WxErrorException {
|
||||||
|
req.setVersion(ObjectUtils.defaultIfNull(req.getVersion(), 1));
|
||||||
String resJson = shopService.post(GET_LEADS_INFO_BY_REQUEST_ID, req);
|
String resJson = shopService.post(GET_LEADS_INFO_BY_REQUEST_ID, req);
|
||||||
return ResponseUtils.decode(resJson, LeadInfoResponse.class);
|
return this.convertLeadInfoResponse(resJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -62,4 +71,26 @@ public class WxLeadComponentServiceImpl implements WxLeadComponentService {
|
|||||||
String resJson = shopService.post(GET_LEADS_COMPONENT_ID, req);
|
String resJson = shopService.post(GET_LEADS_COMPONENT_ID, req);
|
||||||
return ResponseUtils.decode(resJson, GetLeadsComponentIdResponse.class);
|
return ResponseUtils.decode(resJson, GetLeadsComponentIdResponse.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信返回的数据中, user_data和leads_data均为字符串包裹的非标准JSON结构, 为方便业务使用避免踩坑此处做好解析
|
||||||
|
*/
|
||||||
|
private LeadInfoResponse convertLeadInfoResponse(String resJson) throws WxErrorException {
|
||||||
|
try {
|
||||||
|
ObjectNode rootNode = (ObjectNode) objectMapper.readTree(resJson);
|
||||||
|
ArrayNode convertedUserDataArray = objectMapper.createArrayNode();
|
||||||
|
for (JsonNode userDataEle : rootNode.get("user_data")) {
|
||||||
|
ObjectNode userDataJsonNode = (ObjectNode) objectMapper.readTree(userDataEle.asText());
|
||||||
|
ArrayNode leadsDataArray = (ArrayNode) objectMapper.readTree(userDataJsonNode.get("leads_data").asText());
|
||||||
|
userDataJsonNode.set("leads_data", leadsDataArray);
|
||||||
|
convertedUserDataArray.add(userDataJsonNode);
|
||||||
|
}
|
||||||
|
rootNode.set("user_data", convertedUserDataArray);
|
||||||
|
String json = objectMapper.writeValueAsString(rootNode);
|
||||||
|
return ResponseUtils.decode(json, LeadInfoResponse.class);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new WxErrorException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,9 +43,10 @@ public class GetLeadInfoByComponentRequest {
|
|||||||
private String lastBuffer;
|
private String lastBuffer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接口版本号
|
* 接口版本号,默认=1
|
||||||
|
* =null和=1,微信返回的结构不一样,=1信息更全
|
||||||
*/
|
*/
|
||||||
@JsonProperty("version")
|
@JsonProperty("version")
|
||||||
private int version;
|
private Integer version;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ public class GetLeadsInfoByRequestIdRequest {
|
|||||||
private String lastBuffer;
|
private String lastBuffer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接口版本号
|
* 接口版本号,默认=1
|
||||||
|
* =null和=1,微信返回的结构不一样,=1信息更全
|
||||||
*/
|
*/
|
||||||
@JsonProperty("version")
|
@JsonProperty("version")
|
||||||
private int version;
|
private Integer version;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,10 +44,47 @@ public class LeadInfoResponse extends WxChannelBaseResponse {
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public static class UserData {
|
public static class UserData {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主播昵称
|
||||||
|
*/
|
||||||
|
@JsonProperty("anchor_nickname")
|
||||||
|
private String anchorNickname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 直播开始时间
|
||||||
|
*/
|
||||||
|
@JsonProperty("live_start_time")
|
||||||
|
private Long liveStartTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户留资信息列表
|
||||||
|
*/
|
||||||
|
@JsonProperty("leads_data")
|
||||||
|
private List<LeadsData> leadsData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户留资时间
|
||||||
|
*/
|
||||||
|
@JsonProperty("time")
|
||||||
|
private Long time;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
public static class LeadsData {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单名称
|
||||||
|
*/
|
||||||
@JsonProperty("title")
|
@JsonProperty("title")
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手机号,文本框,单选框时, 均为字符串
|
||||||
|
* 仅当title=城市 时, 微信返回字符串数组, eg: ["北京市","北京市","东城区"]
|
||||||
|
*/
|
||||||
@JsonProperty("value")
|
@JsonProperty("value")
|
||||||
private String value;
|
private Object value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package me.chanjar.weixin.channel.api.impl;
|
package me.chanjar.weixin.channel.api.impl;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import me.chanjar.weixin.channel.api.WxChannelService;
|
import me.chanjar.weixin.channel.api.WxChannelService;
|
||||||
import me.chanjar.weixin.channel.bean.lead.component.request.GetLeadInfoByComponentRequest;
|
import me.chanjar.weixin.channel.bean.lead.component.request.GetLeadInfoByComponentRequest;
|
||||||
@@ -28,19 +30,24 @@ import static org.testng.Assert.assertTrue;
|
|||||||
@Guice(modules = ApiTestModule.class)
|
@Guice(modules = ApiTestModule.class)
|
||||||
public class WxLeadComponentServiceImplTest {
|
public class WxLeadComponentServiceImplTest {
|
||||||
|
|
||||||
|
private static final String LEADS_COMPONENT_ID = "123";
|
||||||
|
private static final String REQUEST_ID = "123";
|
||||||
|
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
||||||
@Inject
|
@Inject
|
||||||
private WxChannelService channelService;
|
private WxChannelService channelService;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetLeadsInfoByComponentId() throws WxErrorException {
|
public void testGetLeadsInfoByComponentId() throws WxErrorException, JsonProcessingException {
|
||||||
String lastBuffer = null;
|
String lastBuffer = null;
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
GetLeadInfoByComponentRequest req = new GetLeadInfoByComponentRequest();
|
GetLeadInfoByComponentRequest req = new GetLeadInfoByComponentRequest();
|
||||||
req.setStartTime(Instant.now().minus(1, ChronoUnit.DAYS).getEpochSecond());
|
req.setStartTime(Instant.now().minus(1, ChronoUnit.DAYS).getEpochSecond());
|
||||||
req.setEndTime(Instant.now().getEpochSecond());
|
req.setEndTime(Instant.now().getEpochSecond());
|
||||||
req.setLeadsComponentId("123");
|
req.setLeadsComponentId(LEADS_COMPONENT_ID);
|
||||||
req.setLastBuffer(lastBuffer);
|
req.setLastBuffer(lastBuffer);
|
||||||
|
req.setVersion(1);
|
||||||
LeadInfoResponse response = channelService.getLeadComponentService().getLeadsInfoByComponentId(req);
|
LeadInfoResponse response = channelService.getLeadComponentService().getLeadsInfoByComponentId(req);
|
||||||
|
System.out.println(OBJECT_MAPPER.writeValueAsString(response));
|
||||||
assertNotNull(response);
|
assertNotNull(response);
|
||||||
assertTrue(response.isSuccess());
|
assertTrue(response.isSuccess());
|
||||||
lastBuffer = response.getLastBuffer();
|
lastBuffer = response.getLastBuffer();
|
||||||
@@ -51,13 +58,14 @@ public class WxLeadComponentServiceImplTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetLeadsInfoByRequestId() throws WxErrorException {
|
public void testGetLeadsInfoByRequestId() throws WxErrorException, JsonProcessingException {
|
||||||
String lastBuffer = null;
|
String lastBuffer = null;
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
GetLeadsInfoByRequestIdRequest req = new GetLeadsInfoByRequestIdRequest();
|
GetLeadsInfoByRequestIdRequest req = new GetLeadsInfoByRequestIdRequest();
|
||||||
req.setLastBuffer(lastBuffer);
|
req.setLastBuffer(lastBuffer);
|
||||||
req.setRequestId("123");
|
req.setRequestId(REQUEST_ID);
|
||||||
LeadInfoResponse response = channelService.getLeadComponentService().getLeadsInfoByRequestId(req);
|
LeadInfoResponse response = channelService.getLeadComponentService().getLeadsInfoByRequestId(req);
|
||||||
|
System.out.println(OBJECT_MAPPER.writeValueAsString(response));
|
||||||
assertNotNull(response);
|
assertNotNull(response);
|
||||||
assertTrue(response.isSuccess());
|
assertTrue(response.isSuccess());
|
||||||
lastBuffer = response.getLastBuffer();
|
lastBuffer = response.getLastBuffer();
|
||||||
@@ -68,13 +76,14 @@ public class WxLeadComponentServiceImplTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetLeadsRequestId() throws WxErrorException {
|
public void testGetLeadsRequestId() throws WxErrorException, JsonProcessingException {
|
||||||
String lastBuffer = null;
|
String lastBuffer = null;
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
GetLeadsRequestIdRequest req = new GetLeadsRequestIdRequest();
|
GetLeadsRequestIdRequest req = new GetLeadsRequestIdRequest();
|
||||||
req.setLastBuffer(lastBuffer);
|
req.setLastBuffer(lastBuffer);
|
||||||
req.setLeadsComponentId("123");
|
req.setLeadsComponentId(LEADS_COMPONENT_ID);
|
||||||
GetLeadsRequestIdResponse response = channelService.getLeadComponentService().getLeadsRequestId(req);
|
GetLeadsRequestIdResponse response = channelService.getLeadComponentService().getLeadsRequestId(req);
|
||||||
|
System.out.println(OBJECT_MAPPER.writeValueAsString(response));
|
||||||
assertNotNull(response);
|
assertNotNull(response);
|
||||||
assertTrue(response.isSuccess());
|
assertTrue(response.isSuccess());
|
||||||
lastBuffer = response.getLastBuffer();
|
lastBuffer = response.getLastBuffer();
|
||||||
@@ -85,15 +94,16 @@ public class WxLeadComponentServiceImplTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetLeadsComponentPromoteRecord() throws WxErrorException {
|
public void testGetLeadsComponentPromoteRecord() throws WxErrorException, JsonProcessingException {
|
||||||
String lastBuffer = null;
|
String lastBuffer = null;
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
GetLeadsComponentPromoteRecordRequest req = new GetLeadsComponentPromoteRecordRequest();
|
GetLeadsComponentPromoteRecordRequest req = new GetLeadsComponentPromoteRecordRequest();
|
||||||
req.setStartTime(Instant.now().minus(1, ChronoUnit.DAYS).getEpochSecond());
|
req.setStartTime(Instant.now().minus(1, ChronoUnit.DAYS).getEpochSecond());
|
||||||
req.setEndTime(Instant.now().getEpochSecond());
|
req.setEndTime(Instant.now().getEpochSecond());
|
||||||
req.setLeadsComponentId("123");
|
req.setLeadsComponentId(LEADS_COMPONENT_ID);
|
||||||
req.setLastBuffer(lastBuffer);
|
req.setLastBuffer(lastBuffer);
|
||||||
GetLeadsComponentPromoteRecordResponse response = channelService.getLeadComponentService().getLeadsComponentPromoteRecord(req);
|
GetLeadsComponentPromoteRecordResponse response = channelService.getLeadComponentService().getLeadsComponentPromoteRecord(req);
|
||||||
|
System.out.println(OBJECT_MAPPER.writeValueAsString(response));
|
||||||
assertNotNull(response);
|
assertNotNull(response);
|
||||||
assertTrue(response.isSuccess());
|
assertTrue(response.isSuccess());
|
||||||
lastBuffer = response.getLastBuffer();
|
lastBuffer = response.getLastBuffer();
|
||||||
@@ -104,13 +114,13 @@ public class WxLeadComponentServiceImplTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetLeadsComponentId() throws WxErrorException {
|
public void testGetLeadsComponentId() throws WxErrorException, JsonProcessingException {
|
||||||
String lastBuffer = null;
|
String lastBuffer = null;
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
GetLeadsComponentIdRequest req = new GetLeadsComponentIdRequest();
|
GetLeadsComponentIdRequest req = new GetLeadsComponentIdRequest();
|
||||||
req.setLastBuffer(lastBuffer);
|
req.setLastBuffer(lastBuffer);
|
||||||
GetLeadsComponentIdResponse response = channelService.getLeadComponentService().getLeadsComponentId(req);
|
GetLeadsComponentIdResponse response = channelService.getLeadComponentService().getLeadsComponentId(req);
|
||||||
System.out.println(response);
|
System.out.println(OBJECT_MAPPER.writeValueAsString(response));
|
||||||
assertNotNull(response);
|
assertNotNull(response);
|
||||||
assertTrue(response.isSuccess());
|
assertTrue(response.isSuccess());
|
||||||
lastBuffer = response.getLastBuffer();
|
lastBuffer = response.getLastBuffer();
|
||||||
|
|||||||
Reference in New Issue
Block a user