diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMarketingService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMarketingService.java
new file mode 100644
index 000000000..be40288d6
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMarketingService.java
@@ -0,0 +1,35 @@
+package cn.binarywang.wx.miniapp.api;
+
+import cn.binarywang.wx.miniapp.bean.marketing.WxMaUserAction;
+import me.chanjar.weixin.common.error.WxErrorException;
+import java.util.List;
+
+/**
+ *
+ * @Description :微信营销接口
+ * @author 184759547
+ * @since : 2021/12/28
+ */
+public interface WxMaMarketingService {
+ /**
+ *
+ * 创建数据源.
+ * 接口调用请求说明
+ * https://ad.weixin.qq.com/guide/457
+ *
+ *
+ * @param type 用户行为源类型
+ * @param name 用户行为源名称 必填
+ * @param description 用户行为源描述,字段长度最小 1 字节,长度最大 128 字节
+ */
+ long addUserActionSets(String type, String name, String description) throws WxErrorException;
+
+ /**
+ * 回传数据.
+ * 接口调用请求说明
+ * https://ad.weixin.qq.com/guide/457
+ *
+ * @param actions 用户行为源类型
+ */
+ String addUserAction(List actions, Long userActionSetId) throws WxErrorException;
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
index b22f86538..225a52a55 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
@@ -469,4 +469,11 @@ public interface WxMaService extends WxService {
* @return WxMaDeviceSubscribeService plugin service
*/
WxMaDeviceSubscribeService getDeviceSubscribeService();
+
+ /**
+ * 返回小程序广告接入相关接口服务对象
+ *
+ * @return WxMaDeviceSubscribeService plugin service
+ */
+ WxMaMarketingService getMarketingService();
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
index e6ab2b988..bf8e1e903 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
@@ -76,6 +76,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH
private final WxMaLinkService linkService = new WxMaLinkServiceImpl(this);
private final WxMaReimburseInvoiceService reimburseInvoiceService = new WxMaReimburseInvoiceServiceImpl(this);
private final WxMaDeviceSubscribeService deviceSubscribeService = new WxMaDeviceSubscribeServiceImpl(this);
+ private final WxMaMarketingService marketingService = new WxMaMarketingServiceImpl(this);
private Map configMap;
private int retrySleepMillis = 1000;
private int maxRetryTimes = 5;
@@ -577,4 +578,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH
@Override
public WxMaDeviceSubscribeService getDeviceSubscribeService(){ return this.deviceSubscribeService; }
+
+ @Override
+ public WxMaMarketingService getMarketingService() {return this.marketingService; }
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMarketingServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMarketingServiceImpl.java
new file mode 100644
index 000000000..001519e56
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMarketingServiceImpl.java
@@ -0,0 +1,42 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaMarketingService;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.marketing.WxMaUserAction;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
+
+import java.util.List;
+
+/**
+ * @author 184759547
+ * @Description :微信营销接口
+ * @since : 2021/12/28
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class WxMaMarketingServiceImpl implements WxMaMarketingService {
+ private final WxMaService wxMaService;
+ private final String USER_ACTION_SETS_ADD = "https://api.weixin.qq.com/marketing/user_action_sets/add?version=v1.0";
+ private final String USER_ACTIONS_ADD = "https://api.weixin.qq.com/marketing/user_actions/add?version=v1.0";
+
+ @Override
+ public long addUserActionSets(String type, String name, String description) throws WxErrorException {
+ JsonObject json = new JsonObject();
+ json.addProperty("type", type);
+ json.addProperty("name", name);
+ json.addProperty("description", description);
+ String responseContent = wxMaService.post(USER_ACTION_SETS_ADD, json.toString());
+ JsonObject tmpJson = GsonParser.parse(responseContent);
+ return tmpJson.get("data").getAsJsonObject().get("user_action_set_id").getAsLong();
+ }
+
+ @Override
+ public String addUserAction(List actions, Long userActionSetId) throws WxErrorException {
+ return wxMaService.post(USER_ACTIONS_ADD, WxMaUserAction.listToJson(actions, userActionSetId));
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
new file mode 100644
index 000000000..5427aa2ab
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java
@@ -0,0 +1,74 @@
+package cn.binarywang.wx.miniapp.bean.marketing;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import sun.rmi.runtime.Log;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description :微信营销接口
+ * @author 184759547
+ * @since : 2021/12/28
+ */
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class WxMaUserAction implements Serializable {
+ private static final long serialVersionUID = 7482378011709983616L;
+ private String url;
+ private Integer actionTime;
+ private String actionType;
+ private String leadsType;
+ private String clickId;
+ private Integer actionParam;
+
+ private JsonObject toJsonObject() {
+ JsonObject json = new JsonObject();
+ json.addProperty("url", this.url);
+ json.addProperty("action_time", this.actionTime);
+ json.addProperty("action_type", this.actionType);
+
+ 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);
+ if (this.leadsType != null) {
+ actionParamJson.addProperty("leads_type", leadsType);
+ }
+ json.add("action_param", actionParamJson);
+ }
+
+ return json;
+ }
+
+ /**
+ * list对象转换为json字符串
+ *
+ * @param actions .
+ * @return .
+ */
+ public static String listToJson(List actions, Long userActionSetId) {
+ JsonArray array = new JsonArray();
+ for (WxMaUserAction action : actions) {
+ array.add(action.toJsonObject());
+ }
+
+ JsonObject result = new JsonObject();
+ result.addProperty("user_action_set_id", userActionSetId);
+ result.add("actions", array);
+ return result.toString();
+ }
+}