From 23610ee8bee75e2c7c95cf014c3a2882799b0559 Mon Sep 17 00:00:00 2001 From: xhxu Date: Tue, 29 Mar 2022 18:14:46 +0800 Subject: [PATCH] //add push --- .../douyin/miniapp/api/TtMaMsgService.java | 30 ++++++ .../douyin/miniapp/api/TtMaService.java | 2 + .../miniapp/api/bean/TtMaGsonBuilder.java | 30 ++++++ .../api/bean/TtMaSubscribeMessage.java | 94 +++++++++++++++++++ .../bean/TtMaSubscribeMessageGsonAdapter.java | 44 +++++++++ .../miniapp/api/impl/TtMaMsgServiceImpl.java | 32 +++++++ .../miniapp/api/impl/TtMaServiceImpl.java | 14 ++- .../pay/douyin/BaseTtPayAdapterService.java | 2 +- .../miniApp/TtMiniAppPayAdapterService.java | 3 +- 9 files changed, 244 insertions(+), 7 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaMsgService.java create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaGsonBuilder.java create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessage.java create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessageGsonAdapter.java create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaMsgServiceImpl.java diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaMsgService.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaMsgService.java new file mode 100644 index 000000000..f85750c87 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaMsgService.java @@ -0,0 +1,30 @@ +package com.iformall.douyin.miniapp.api; + +import cn.binarywang.wx.miniapp.bean.*; +import com.google.gson.JsonObject; +import com.iformall.douyin.miniapp.api.bean.TtMaSubscribeMessage; +import me.chanjar.weixin.common.error.WxErrorException; + +/** + *
+ * 消息发送接口
+ * 
+ * + * @author Binary Wang + */ +public interface TtMaMsgService { + + String SUBSCRIBE_MSG_SEND_URL = "https://developer.toutiao.com/api/apps/subscribe_notification/developer/v1/notify"; + + /** + *
+   * 发送订阅消息
+   * https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/server/subscribe-notification/notify/
+   * 
+ * + * @param subscribeMessage 订阅消息 + * @throws WxErrorException . + */ + void sendSubscribeMsg(TtMaSubscribeMessage subscribeMessage) throws WxErrorException; + +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaService.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaService.java index fffb99a89..e7376c79a 100644 --- a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaService.java +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaService.java @@ -127,4 +127,6 @@ public interface TtMaService { */ TtMaQrcodeService getQrcodeService(); + TtMaMsgService getMsgService(); + } diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaGsonBuilder.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaGsonBuilder.java new file mode 100644 index 000000000..410adfdf6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaGsonBuilder.java @@ -0,0 +1,30 @@ +package com.iformall.douyin.miniapp.api.bean; + +import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; +import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; +import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage; +import cn.binarywang.wx.miniapp.bean.analysis.WxMaRetainInfo; +import cn.binarywang.wx.miniapp.bean.analysis.WxMaUserPortrait; +import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitDistribution; +import cn.binarywang.wx.miniapp.bean.code.WxMaCodeCommitRequest; +import cn.binarywang.wx.miniapp.bean.code.WxMaCodeVersionDistribution; +import cn.binarywang.wx.miniapp.util.json.*; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +/** + * @author Binary Wang + */ +public class TtMaGsonBuilder { + private static final GsonBuilder INSTANCE = new GsonBuilder(); + + static { + INSTANCE.disableHtmlEscaping(); + INSTANCE.registerTypeAdapter(TtMaSubscribeMessage.class, new TtMaSubscribeMessageGsonAdapter()); + } + + public static Gson create() { + return INSTANCE.create(); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessage.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessage.java new file mode 100644 index 000000000..f4b547a6e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessage.java @@ -0,0 +1,94 @@ +package com.iformall.douyin.miniapp.api.bean; + +import cn.binarywang.wx.miniapp.constant.WxMaConstants; +import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; +import lombok.*; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 订阅消息. + + * @author S + */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TtMaSubscribeMessage implements Serializable { + + private static final long serialVersionUID = -5931206947637944325L; + +// private String accessToken; + + private String appId; + + /** + * 接收者(用户)的 openid. + *
+   * 参数:touser
+   * 是否必填: 是
+   * 描述: 接收者(用户)的 openid
+   * 
+ */ + private String openId; + + /** + * 所需下发的模板消息的id. + *
+   * 参数:template_id
+   * 是否必填: 是
+   * 描述: 所需下发的模板消息的id
+   * 
+ */ + private String tplId; + + /** + * 点击模板卡片后的跳转页面,仅限本小程序内的页面. + *
+   * 参数:page
+   * 是否必填: 否
+   * 描述: 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
+   * 
+ */ + private String page; + + /** + * 模板内容,不填则下发空模板. + *
+   * 参数:data
+   * 是否必填: 是
+   * 描述: 模板内容,不填则下发空模板
+   * 
+ */ + private List data; + + + public TtMaSubscribeMessage addData(Data datum) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + + this.data.add(datum); + + return this; + } + + public String toJson() { + return TtMaGsonBuilder.create().toJson(this); + } + + @lombok.Data + @NoArgsConstructor + @AllArgsConstructor + public static class Data implements Serializable { + private static final long serialVersionUID = 1L; + + private String name; + private String value; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessageGsonAdapter.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessageGsonAdapter.java new file mode 100644 index 000000000..acc23654d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/bean/TtMaSubscribeMessageGsonAdapter.java @@ -0,0 +1,44 @@ +package com.iformall.douyin.miniapp.api.bean; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; + +/** + * . + * + * @author S + */ +public class TtMaSubscribeMessageGsonAdapter implements JsonSerializer { + @Override + public JsonElement serialize(TtMaSubscribeMessage message, Type typeOfSrc, JsonSerializationContext context) { + JsonObject messageJson = new JsonObject(); + +// messageJson.addProperty("access_token", message.getAccessToken()); + messageJson.addProperty("app_id", message.getAppId()); + messageJson.addProperty("tpl_id", message.getTplId()); + messageJson.addProperty("open_id", message.getOpenId()); + if (message.getPage() != null) { + messageJson.addProperty("page", message.getPage()); + } + + JsonObject data = new JsonObject(); + messageJson.add("data", data); + + if (message.getData() == null) { + return messageJson; + } + + for (TtMaSubscribeMessage.Data datum : message.getData()) { + JsonObject dataJson = new JsonObject(); + dataJson.addProperty("value", datum.getValue()); + data.add(datum.getName(), dataJson); + } + + return messageJson; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaMsgServiceImpl.java new file mode 100644 index 000000000..406f48589 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaMsgServiceImpl.java @@ -0,0 +1,32 @@ +package com.iformall.douyin.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.bean.*; +import cn.binarywang.wx.miniapp.constant.WxMaConstants; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.iformall.douyin.miniapp.api.TtMaMsgService; +import com.iformall.douyin.miniapp.api.TtMaService; +import com.iformall.douyin.miniapp.api.bean.TtMaSubscribeMessage; +import lombok.AllArgsConstructor; +import me.chanjar.weixin.common.WxType; +import me.chanjar.weixin.common.error.WxError; +import me.chanjar.weixin.common.error.WxErrorException; + +/** + * @author Binary Wang + */ +@AllArgsConstructor +public class TtMaMsgServiceImpl implements TtMaMsgService { + private static final JsonParser JSON_PARSER = new JsonParser(); + private TtMaService ttMaService; + + @Override + public void sendSubscribeMsg(TtMaSubscribeMessage subscribeMessage) throws WxErrorException { + String responseContent = this.ttMaService.post(SUBSCRIBE_MSG_SEND_URL, subscribeMessage); + JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + if (jsonObject.get("err_no").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + } + +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaServiceImpl.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaServiceImpl.java index e2f4753b0..a923d535f 100644 --- a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaServiceImpl.java @@ -9,10 +9,8 @@ import com.aliyun.openservices.shade.com.alibaba.fastjson.JSONObject; import com.google.common.base.Joiner; import com.google.gson.Gson; import com.google.gson.JsonParser; -import com.iformall.douyin.miniapp.api.TtMaQrcode; -import com.iformall.douyin.miniapp.api.TtMaQrcodeService; -import com.iformall.douyin.miniapp.api.TtMaService; -import com.iformall.douyin.miniapp.api.TtMaUserService; +import com.iformall.douyin.miniapp.api.*; +import com.iformall.douyin.miniapp.api.bean.TtMaGsonBuilder; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.bean.WxAccessToken; @@ -51,6 +49,7 @@ public class TtMaServiceImpl implements TtMaService, RequestHttp