mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-28 20:43:42 +08:00 
			
		
		
		
	#978 增加微信营销相关接口
This commit is contained in:
		| @ -0,0 +1,71 @@ | ||||
| package me.chanjar.weixin.mp.api; | ||||
|  | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpAdLeadFilter; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpAdLeadResult; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpUserAction; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpUserActionSet; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
|  * 微信营销接口 | ||||
|  * </pre> | ||||
|  * | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| public interface WxMpMarketingService { | ||||
|   String API_URL_PREFIX = "https://api.weixin.qq.com/marketing/"; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 创建数据源 | ||||
|    * 接口调用请求说明 | ||||
|    * https://wximg.qq.com/wxp/pdftool/get.html?id=rkalQXDBM&pa=39 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param type        用户行为源类型 | ||||
|    * @param name        用户行为源名称 必填 | ||||
|    * @param description 用户行为源描述,字段长度最小 1 字节,长度最大 128 字节 | ||||
|    */ | ||||
|   long addUserActionSets(String type, String name, String description) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 获取数据源信息 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param userActionSetId 数据源唯一ID | ||||
|    */ | ||||
|   List<WxMpUserActionSet> getUserActionSets(Long userActionSetId) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * 回传数据 | ||||
|    * 接口调用请求说明 | ||||
|    * https://wximg.qq.com/wxp/pdftool/get.html?id=rkalQXDBM&pa=39 | ||||
|    * | ||||
|    * @param actions 用户行为源类型 | ||||
|    */ | ||||
|   void addUserAction(List<WxMpUserAction> actions) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 获取朋友圈销售线索数据接口 | ||||
|    * 接口调用请求说明 | ||||
|    * | ||||
|    * http请求方式: POST | ||||
|    * http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?access_token=ACCESS_TOKEN&lfrom=xxx<o=xxx | ||||
|    * | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param beginDate 开始日期 | ||||
|    * @param endDate   结束日期 | ||||
|    * @param filtering 过滤条件 | ||||
|    * @param page      页码,获取指定页数据 | ||||
|    * @param page_size 一页获取的数据条数(1-100) | ||||
|    */ | ||||
|   WxMpAdLeadResult getAdLeads(Date beginDate, Date endDate, List<WxMpAdLeadFilter> filtering, Integer page, Integer page_size) throws WxErrorException, IOException; | ||||
| } | ||||
| @ -411,6 +411,13 @@ public interface WxMpService { | ||||
|    */ | ||||
|   WxMpMemberCardService getMemberCardService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回营销相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpMarketingService | ||||
|    */ | ||||
|   WxMpMarketingService getMarketingService(); | ||||
|  | ||||
|   /** | ||||
|    * 初始化http请求对象. | ||||
|    */ | ||||
| @ -473,4 +480,6 @@ public interface WxMpService { | ||||
|   void setMassMessageService(WxMpMassMessageService massMessageService); | ||||
|  | ||||
|   void setAiOpenService(WxMpAiOpenService aiOpenService); | ||||
|  | ||||
|   void setMarketingService(WxMpMarketingService marketingService); | ||||
| } | ||||
|  | ||||
| @ -3,6 +3,7 @@ package me.chanjar.weixin.mp.api.impl; | ||||
| import java.io.IOException; | ||||
| import java.util.concurrent.locks.Lock; | ||||
|  | ||||
| import me.chanjar.weixin.mp.api.*; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| @ -24,26 +25,6 @@ import me.chanjar.weixin.common.util.http.RequestHttp; | ||||
| import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | ||||
| import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | ||||
| import me.chanjar.weixin.common.util.http.URIUtil; | ||||
| import me.chanjar.weixin.mp.api.WxMpAiOpenService; | ||||
| import me.chanjar.weixin.mp.api.WxMpCardService; | ||||
| import me.chanjar.weixin.mp.api.WxMpConfigStorage; | ||||
| import me.chanjar.weixin.mp.api.WxMpDataCubeService; | ||||
| import me.chanjar.weixin.mp.api.WxMpDeviceService; | ||||
| import me.chanjar.weixin.mp.api.WxMpKefuService; | ||||
| import me.chanjar.weixin.mp.api.WxMpMassMessageService; | ||||
| import me.chanjar.weixin.mp.api.WxMpMaterialService; | ||||
| import me.chanjar.weixin.mp.api.WxMpMemberCardService; | ||||
| import me.chanjar.weixin.mp.api.WxMpMenuService; | ||||
| import me.chanjar.weixin.mp.api.WxMpQrcodeService; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.api.WxMpShakeService; | ||||
| import me.chanjar.weixin.mp.api.WxMpStoreService; | ||||
| import me.chanjar.weixin.mp.api.WxMpSubscribeMsgService; | ||||
| import me.chanjar.weixin.mp.api.WxMpTemplateMsgService; | ||||
| import me.chanjar.weixin.mp.api.WxMpUserBlacklistService; | ||||
| import me.chanjar.weixin.mp.api.WxMpUserService; | ||||
| import me.chanjar.weixin.mp.api.WxMpUserTagService; | ||||
| import me.chanjar.weixin.mp.api.WxMpWifiService; | ||||
| import me.chanjar.weixin.mp.bean.WxMpSemanticQuery; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpCurrentAutoReplyInfo; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; | ||||
| @ -81,6 +62,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | ||||
|   private WxMpMassMessageService massMessageService = new WxMpMassMessageServiceImpl(this); | ||||
|   private WxMpAiOpenService aiOpenService = new WxMpAiOpenServiceImpl(this); | ||||
|   private WxMpWifiService wifiService = new WxMpWifiServiceImpl(this); | ||||
|   private WxMpMarketingService marketingService = new WxMpMarketingServiceImpl(this); | ||||
|  | ||||
|   private int retrySleepMillis = 1000; | ||||
|   private int maxRetryTimes = 5; | ||||
| @ -545,4 +527,14 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | ||||
|   public WxMpWifiService getWifiService() { | ||||
|     return this.wifiService; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public WxMpMarketingService getMarketingService() { | ||||
|     return this.marketingService; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void setMarketingService(WxMpMarketingService marketingService) { | ||||
|     this.marketingService = marketingService; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,92 @@ | ||||
| package me.chanjar.weixin.mp.api.impl; | ||||
|  | ||||
| import com.google.gson.JsonArray; | ||||
| import com.google.gson.JsonElement; | ||||
| import com.google.gson.JsonObject; | ||||
| import com.google.gson.JsonParser; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.mp.api.WxMpMarketingService; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpAdLeadFilter; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpAdLeadResult; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpUserAction; | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpUserActionSet; | ||||
| import org.apache.commons.lang3.time.DateFormatUtils; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.net.URLEncoder; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| public class WxMpMarketingServiceImpl implements WxMpMarketingService { | ||||
|   protected final Logger log = LoggerFactory.getLogger(this.getClass()); | ||||
|   private WxMpService wxMpService; | ||||
|  | ||||
|   public WxMpMarketingServiceImpl(WxMpService wxMpService) { | ||||
|     this.wxMpService = wxMpService; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public long addUserActionSets(String type, String name, String description) throws WxErrorException { | ||||
|     String url = API_URL_PREFIX + "user_action_sets/add?version=v1.0"; | ||||
|     JsonObject json = new JsonObject(); | ||||
|     json.addProperty("type", type); | ||||
|     json.addProperty("name", name); | ||||
|     json.addProperty("description", description); | ||||
|     String responseContent = wxMpService.post(url, json.toString()); | ||||
|     JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | ||||
|     return tmpJsonElement.getAsJsonObject().get("data").getAsJsonObject().get("user_action_set_id").getAsLong(); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public List<WxMpUserActionSet> getUserActionSets(Long userActionSetId) throws WxErrorException { | ||||
|     String url = API_URL_PREFIX + "user_action_sets/get"; | ||||
|     String responseContent = wxMpService.get(url, "version=v1.0&user_action_set_id=" + userActionSetId); | ||||
|     return WxMpUserActionSet.fromJson(responseContent); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void addUserAction(List<WxMpUserAction> actions) throws WxErrorException { | ||||
|     String url = API_URL_PREFIX + "user_actions/add?version=v1.0"; | ||||
|     JsonArray json = new JsonArray(); | ||||
|     for (WxMpUserAction action : actions) { | ||||
|       json.add(action.toJsonObject()); | ||||
|     } | ||||
|     wxMpService.post(url, json.toString()); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public WxMpAdLeadResult getAdLeads(Date beginDate, Date endDate, List<WxMpAdLeadFilter> filtering, Integer page, Integer page_size) throws WxErrorException, IOException { | ||||
|     Date today = new Date(); | ||||
|     if (beginDate == null) { | ||||
|       beginDate = today; | ||||
|     } | ||||
|     if (endDate == null) { | ||||
|       endDate = today; | ||||
|     } | ||||
|     String url = API_URL_PREFIX + "wechat_ad_leads/get"; | ||||
|     String params = "version=v1.0"; | ||||
|     JsonObject dateRange = new JsonObject(); | ||||
|     dateRange.addProperty("begin_date", DateFormatUtils.format(beginDate, "yyyy-MM-dd")); | ||||
|     dateRange.addProperty("end_date", DateFormatUtils.format(endDate, "yyyy-MM-dd")); | ||||
|     params += "&date_range=" + URLEncoder.encode(dateRange.toString(), StandardCharsets.UTF_8.name()); | ||||
|     params += "&page=" + page; | ||||
|     params += "&page_size=" + page_size; | ||||
|     if (filtering != null) { | ||||
|       JsonArray filterJson = new JsonArray(); | ||||
|       for (WxMpAdLeadFilter filter : filtering) { | ||||
|         filterJson.add(filter.toJsonObject()); | ||||
|       } | ||||
|       params += "&filtering=" + URLEncoder.encode(filterJson.toString(), StandardCharsets.UTF_8.name()); | ||||
|       ; | ||||
|     } | ||||
|     String responseContent = wxMpService.get(url, params); | ||||
|     return WxMpAdLeadResult.fromJson(responseContent); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package me.chanjar.weixin.mp.bean.marketing; | ||||
|  | ||||
| import com.google.gson.annotations.SerializedName; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| @Data | ||||
| public class WxMpAdLead implements Serializable { | ||||
|   private static final long serialVersionUID = -8889087268596440407L; | ||||
|   /** | ||||
|    * 点击ID | ||||
|    */ | ||||
|   @SerializedName("click_id") | ||||
|   private String click_id; | ||||
|   /** | ||||
|    * 广告组ID | ||||
|    */ | ||||
|   @SerializedName("adgroup_id") | ||||
|   private Long adgroup_id; | ||||
|   /** | ||||
|    * 广告组名称 | ||||
|    */ | ||||
|   @SerializedName("adgroup_name") | ||||
|   private String adgroup_name; | ||||
|   /** | ||||
|    * 推广计划ID | ||||
|    */ | ||||
|   @SerializedName("campaign_id") | ||||
|   private Long campaign_id; | ||||
|   /** | ||||
|    * 推广计划名称 | ||||
|    */ | ||||
|   @SerializedName("campaign_name") | ||||
|   private String campaign_name; | ||||
|   /** | ||||
|    * 代理ID | ||||
|    */ | ||||
|   @SerializedName("agency_id") | ||||
|   private String agency_id; | ||||
|   /** | ||||
|    * 代理名称 | ||||
|    */ | ||||
|   @SerializedName("agency_name") | ||||
|   private String agency_name; | ||||
|   /** | ||||
|    * 销售线索信息 | ||||
|    */ | ||||
|   @SerializedName("leads_info") | ||||
|   private List<WxMpAdLeadInfo> leads_info; | ||||
| } | ||||
| @ -0,0 +1,32 @@ | ||||
| package me.chanjar.weixin.mp.bean.marketing; | ||||
|  | ||||
| import com.google.gson.JsonArray; | ||||
| import com.google.gson.JsonObject; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| @Data | ||||
| public class WxMpAdLeadFilter implements Serializable { | ||||
|   private static final long serialVersionUID = -1469998986497327439L; | ||||
|   private String field; | ||||
|   private String operator; | ||||
|   private List<String> values; | ||||
|  | ||||
|   public JsonObject toJsonObject() { | ||||
|     JsonObject json = new JsonObject(); | ||||
|     json.addProperty("field", field); | ||||
|     json.addProperty("operator", operator); | ||||
|     if (values != null) { | ||||
|       JsonArray vs = new JsonArray(); | ||||
|       for (String value : values) { | ||||
|         vs.add(value); | ||||
|       } | ||||
|     } | ||||
|     return json; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,18 @@ | ||||
| package me.chanjar.weixin.mp.bean.marketing; | ||||
|  | ||||
| import com.google.gson.annotations.SerializedName; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| @Data | ||||
| public class WxMpAdLeadInfo implements Serializable { | ||||
|   private static final long serialVersionUID = -6462312242780350479L; | ||||
|   @SerializedName("key") | ||||
|   private String key; | ||||
|   @SerializedName("value") | ||||
|   private String value; | ||||
| } | ||||
| @ -0,0 +1,23 @@ | ||||
| package me.chanjar.weixin.mp.bean.marketing; | ||||
|  | ||||
| import com.google.gson.annotations.SerializedName; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| @Data | ||||
| public class WxMpAdLeadPageInfo implements Serializable { | ||||
|   private static final long serialVersionUID = -896765006445604780L; | ||||
|   @SerializedName("page") | ||||
|   private Integer page; | ||||
|   @SerializedName("page_size") | ||||
|   private Integer pageSize; | ||||
|   @SerializedName("total_page") | ||||
|   private Integer totalPage; | ||||
|   @SerializedName("total_number") | ||||
|   private Integer totalNumber; | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,32 @@ | ||||
| package me.chanjar.weixin.mp.bean.marketing; | ||||
|  | ||||
| import com.google.gson.JsonParser; | ||||
| import com.google.gson.annotations.SerializedName; | ||||
| import com.google.gson.reflect.TypeToken; | ||||
| import lombok.Data; | ||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| @Data | ||||
| public class WxMpAdLeadResult implements Serializable { | ||||
|   private static final long serialVersionUID = -1526796632563660821L; | ||||
|   protected static final JsonParser JSON_PARSER = new JsonParser(); | ||||
|  | ||||
|   @SerializedName("page_info") | ||||
|   private WxMpAdLeadPageInfo pageInfo; | ||||
|   @SerializedName("list") | ||||
|   private List<WxMpAdLead> adLeads; | ||||
|  | ||||
|   public static WxMpAdLeadResult fromJson(String json) { | ||||
|  | ||||
|     return WxMpGsonBuilder.create().fromJson( | ||||
|       JSON_PARSER.parse(json).getAsJsonObject().get("data"), | ||||
|       new TypeToken<WxMpAdLeadResult>() { | ||||
|       }.getType()); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,39 @@ | ||||
| package me.chanjar.weixin.mp.bean.marketing; | ||||
|  | ||||
| import com.google.gson.JsonObject; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
|  | ||||
| @Data | ||||
| public class WxMpUserAction implements Serializable { | ||||
|   private static final long serialVersionUID = 7042393762652152209L; | ||||
|   private Long userActionSetId; | ||||
|   private String url; | ||||
|   private Boolean actionTime; | ||||
|   private String actionType; | ||||
|   private String clickId; | ||||
|   private Integer actionParam; | ||||
|  | ||||
|   public JsonObject toJsonObject() { | ||||
|     JsonObject json = new JsonObject(); | ||||
|     json.addProperty("user_action_set_id", this.userActionSetId); | ||||
|     json.addProperty("url", this.url); | ||||
|     json.addProperty("action_time", this.actionTime); | ||||
|     if (this.clickId != null) { | ||||
|       JsonObject traceJson = new JsonObject(); | ||||
|       traceJson.addProperty("click_id", this.clickId); | ||||
|       json.add("trace", traceJson); | ||||
|     } | ||||
|     if (this.actionParam != null) { | ||||
|       JsonObject actionParamJson = new JsonObject(); | ||||
|       actionParamJson.addProperty("value", actionParam); | ||||
|       json.add("action_param", actionParamJson); | ||||
|     } | ||||
|     return json; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package me.chanjar.weixin.mp.bean.marketing; | ||||
|  | ||||
| import com.google.gson.JsonParser; | ||||
| import com.google.gson.annotations.SerializedName; | ||||
| import com.google.gson.reflect.TypeToken; | ||||
| import lombok.Data; | ||||
| import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
|  | ||||
| @Data | ||||
| public class WxMpUserActionSet implements Serializable { | ||||
|   private static final long serialVersionUID = 1979861770645159905L; | ||||
|   protected static final JsonParser JSON_PARSER = new JsonParser(); | ||||
|  | ||||
|   /** | ||||
|    * user_action_set_id | ||||
|    * 用户行为源名称 | ||||
|    */ | ||||
|   @SerializedName("user_action_set_id") | ||||
|   private Long userActionSetId; | ||||
|  | ||||
|   /** | ||||
|    * title. | ||||
|    * 用户行为源描述 | ||||
|    */ | ||||
|   @SerializedName("description") | ||||
|   private String description; | ||||
|  | ||||
|   /** | ||||
|    * activate_status. | ||||
|    * 数据接入状态, true 表示已接入, false 表示未接入 | ||||
|    */ | ||||
|   @SerializedName("activate_status") | ||||
|   private Boolean activate_status; | ||||
|  | ||||
|   /** | ||||
|    * created_time. | ||||
|    * 创建时间 | ||||
|    */ | ||||
|   @SerializedName("created_time") | ||||
|   private String createdTime; | ||||
|  | ||||
|   public static List<WxMpUserActionSet> fromJson(String json) { | ||||
|     return WxMpGsonBuilder.create().fromJson( | ||||
|       JSON_PARSER.parse(json).getAsJsonObject().get("data").getAsJsonObject().get("list"), | ||||
|       new TypeToken<List<WxMpUserActionSet>>() { | ||||
|       }.getType()); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,75 @@ | ||||
| package me.chanjar.weixin.mp.bean.result; | ||||
|  | ||||
| import me.chanjar.weixin.mp.bean.marketing.WxMpAdLeadResult; | ||||
| import org.testng.annotations.Test; | ||||
|  | ||||
| import static org.testng.Assert.assertNotNull; | ||||
| import static org.testng.Assert.assertTrue; | ||||
|  | ||||
| /** | ||||
|  * @author <a href="https://github.com/007gzs">007</a> | ||||
|  */ | ||||
| public class WxMpAdLeadResultTest { | ||||
|   @Test | ||||
|   public void testFromJson() throws Exception { | ||||
|     String json = "{\n" + | ||||
|       "\t\"data\": {\n" + | ||||
|       "\t\t\"page_info\": {\n" + | ||||
|       "\t\t\t\"total_number\": 39,\n" + | ||||
|       "\t\t\t\"page\": 1,\n" + | ||||
|       "\t\t\t\"page_size\": 100,\n" + | ||||
|       "\t\t\t\"total_page\": 1\n" + | ||||
|       "\t\t},\n" + | ||||
|       "\t\t\"list\": [{\n" + | ||||
|       "\t\t\t\"click_id\": \"<click_id1>\",\n" + | ||||
|       "\t\t\t\"adgroup_name\": \"<adgroup_name>\",\n" + | ||||
|       "\t\t\t\"campaign_id\": 1800000001,\n" + | ||||
|       "\t\t\t\"leads_info\": [{\n" + | ||||
|       "\t\t\t\t\"value\": \"13800138000\",\n" + | ||||
|       "\t\t\t\t\"key\": \"电话号码\"\n" + | ||||
|       "\t\t\t}, {\n" + | ||||
|       "\t\t\t\t\"value\": \"2019-03-14 00:54:34\",\n" + | ||||
|       "\t\t\t\t\"key\": \"提交时间\"\n" + | ||||
|       "\t\t\t}, {\n" + | ||||
|       "\t\t\t\t\"value\": \"123\",\n" + | ||||
|       "\t\t\t\t\"key\": \"自定义问题\"\n" + | ||||
|       "\t\t\t}],\n" + | ||||
|       "\t\t\t\"agency_name\": \"\",\n" + | ||||
|       "\t\t\t\"agency_id\": \"\",\n" + | ||||
|       "\t\t\t\"campaign_name\": \"<campaign_name>\",\n" + | ||||
|       "\t\t\t\"adgroup_id\": 1800000002\n" + | ||||
|       "\t\t}, {\n" + | ||||
|       "\t\t\t\"click_id\": \"<click_id2>\",\n" + | ||||
|       "\t\t\t\"adgroup_name\": \"<adgroup_name>\",\n" + | ||||
|       "\t\t\t\"campaign_id\": 1800000001,\n" + | ||||
|       "\t\t\t\"leads_info\": [{\n" + | ||||
|       "\t\t\t\t\"value\": \"13800138001\",\n" + | ||||
|       "\t\t\t\t\"key\": \"电话号码\"\n" + | ||||
|       "\t\t\t}, {\n" + | ||||
|       "\t\t\t\t\"value\": \"2019-03-14 02:10:39\",\n" + | ||||
|       "\t\t\t\t\"key\": \"提交时间\"\n" + | ||||
|       "\t\t\t}, {\n" + | ||||
|       "\t\t\t\t\"value\": \"321\",\n" + | ||||
|       "\t\t\t\t\"key\": \"自定义问题\"\n" + | ||||
|       "\t\t\t}],\n" + | ||||
|       "\t\t\t\"agency_name\": \"\",\n" + | ||||
|       "\t\t\t\"agency_id\": \"\",\n" + | ||||
|       "\t\t\t\"campaign_name\": \"<campaign_name>\",\n" + | ||||
|       "\t\t\t\"adgroup_id\": 1800000002\n" + | ||||
|       "\t\t}]\n" + | ||||
|       "\t},\n" + | ||||
|       "\t\"errcode\": 0,\n" + | ||||
|       "\t\"errmsg\": \"\"\n" + | ||||
|       "}"; | ||||
|  | ||||
|     WxMpAdLeadResult adLeadResult = WxMpAdLeadResult.fromJson(json); | ||||
|  | ||||
|     assertNotNull(adLeadResult); | ||||
|     assertNotNull(adLeadResult.getPageInfo()); | ||||
|     assertNotNull(adLeadResult.getAdLeads()); | ||||
|     assertTrue(adLeadResult.getAdLeads().size() > 0); | ||||
|  | ||||
|     System.out.println(adLeadResult); | ||||
|   } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 007gzs
					007gzs