diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java b/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java index ef5cdb25f..145c663ef 100644 --- a/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java +++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java @@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.redis.JedisWxRedisOps; import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps; import me.chanjar.weixin.common.redis.WxRedisOps; -import me.chanjar.weixin.mp.bean.WxMpHostConfig; +import me.chanjar.weixin.mp.config.WxMpHostConfig; import me.chanjar.weixin.mp.config.WxMpConfigStorage; import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSubscribeService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSubscribeService.java index 19e22a5eb..eaa25864c 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSubscribeService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSubscribeService.java @@ -1,7 +1,10 @@ package cn.binarywang.wx.miniapp.api; +import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; +import cn.binarywang.wx.miniapp.bean.subscribemsg.CategoryData; +import cn.binarywang.wx.miniapp.bean.subscribemsg.PubTemplateKeyword; +import cn.binarywang.wx.miniapp.bean.subscribemsg.TemplateInfo; import cn.binarywang.wx.miniapp.bean.template.WxMaPubTemplateTitleListResult; -import lombok.Data; import me.chanjar.weixin.common.error.WxErrorException; import java.util.List; @@ -43,6 +46,11 @@ public interface WxMaSubscribeService { */ String GET_CATEGORY_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/getcategory"; + /** + * 发送订阅消息 + */ + String SUBSCRIBE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send"; + /** *
    * 获取帐号所属类目下的公共模板标题
@@ -128,26 +136,15 @@ public interface WxMaSubscribeService {
    */
   List getCategory() throws WxErrorException;
 
-  @Data
-  class CategoryData {
-    int id;
-    String name;
-  }
+  /**
+   * 
+   * 发送订阅消息
+   * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
+   * 
+ * + * @param subscribeMessage 订阅消息 + * @throws WxErrorException . + */ + void sendSubscribeMsg(WxMaSubscribeMessage subscribeMessage) throws WxErrorException; - @Data - class TemplateInfo { - private String priTmplId; - private String title; - private String content; - private String example; - private int type; - } - - @Data - class PubTemplateKeyword { - private int kid; - private String name; - private String example; - private String rule; - } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java index bbb34d163..47bea67a3 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java @@ -2,12 +2,20 @@ package cn.binarywang.wx.miniapp.api.impl; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.WxMaSubscribeService; +import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; +import cn.binarywang.wx.miniapp.bean.subscribemsg.CategoryData; +import cn.binarywang.wx.miniapp.bean.subscribemsg.PubTemplateKeyword; +import cn.binarywang.wx.miniapp.bean.subscribemsg.TemplateInfo; import cn.binarywang.wx.miniapp.bean.template.WxMaPubTemplateTitleListResult; +import cn.binarywang.wx.miniapp.constant.WxMaConstants; import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import lombok.RequiredArgsConstructor; +import me.chanjar.weixin.common.enums.WxType; +import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.json.GsonParser; import org.apache.commons.lang3.StringUtils; @@ -21,20 +29,20 @@ import java.util.List; */ @RequiredArgsConstructor public class WxMaSubscribeServiceImpl implements WxMaSubscribeService { - private final WxMaService wxMaService; + private final WxMaService service; @Override public WxMaPubTemplateTitleListResult getPubTemplateTitleList(String[] ids, int start, int limit) throws WxErrorException { ImmutableMap params = ImmutableMap.of("ids", StringUtils.join(ids, ","), "start", start, "limit", limit); - String responseText = this.wxMaService.get(GET_PUB_TEMPLATE_TITLE_LIST_URL, + String responseText = this.service.get(GET_PUB_TEMPLATE_TITLE_LIST_URL, Joiner.on("&").withKeyValueSeparator("=").join(params)); return WxMaPubTemplateTitleListResult.fromJson(responseText); } @Override public List getPubTemplateKeyWordsById(String id) throws WxErrorException { - String responseText = this.wxMaService.get(GET_PUB_TEMPLATE_KEY_WORDS_BY_ID_URL, + String responseText = this.service.get(GET_PUB_TEMPLATE_KEY_WORDS_BY_ID_URL, Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("tid", id))); return WxMaGsonBuilder.create().fromJson(GsonParser.parse(responseText) .getAsJsonArray("data"), new TypeToken>() { @@ -43,7 +51,7 @@ public class WxMaSubscribeServiceImpl implements WxMaSubscribeService { @Override public String addTemplate(String id, List keywordIdList, String sceneDesc) throws WxErrorException { - String responseText = this.wxMaService.post(TEMPLATE_ADD_URL, ImmutableMap.of("tid", id, + String responseText = this.service.post(TEMPLATE_ADD_URL, ImmutableMap.of("tid", id, "kidList", keywordIdList.toArray(), "sceneDesc", sceneDesc)); return GsonParser.parse(responseText).get("priTmplId").getAsString(); @@ -51,7 +59,7 @@ public class WxMaSubscribeServiceImpl implements WxMaSubscribeService { @Override public List getTemplateList() throws WxErrorException { - String responseText = this.wxMaService.get(TEMPLATE_LIST_URL, null); + String responseText = this.service.get(TEMPLATE_LIST_URL, null); return WxMaGsonBuilder.create().fromJson(GsonParser.parse(responseText) .getAsJsonArray("data"), new TypeToken>() { }.getType()); @@ -59,15 +67,24 @@ public class WxMaSubscribeServiceImpl implements WxMaSubscribeService { @Override public boolean delTemplate(String templateId) throws WxErrorException { - this.wxMaService.post(TEMPLATE_DEL_URL, ImmutableMap.of("priTmplId", templateId)); + this.service.post(TEMPLATE_DEL_URL, ImmutableMap.of("priTmplId", templateId)); return true; } @Override public List getCategory() throws WxErrorException { - String responseText = this.wxMaService.get(GET_CATEGORY_URL, null); + String responseText = this.service.get(GET_CATEGORY_URL, null); return WxMaGsonBuilder.create().fromJson(GsonParser.parse(responseText) .getAsJsonArray("data"), new TypeToken>() { }.getType()); } + + @Override + public void sendSubscribeMsg(WxMaSubscribeMessage subscribeMessage) throws WxErrorException { + String responseContent = this.service.post(SUBSCRIBE_MSG_SEND_URL, subscribeMessage.toJson()); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMessage.java index edf4dc3c3..836b64b08 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMessage.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaSubscribeMessage.java @@ -60,7 +60,7 @@ public class WxMaSubscribeMessage implements Serializable { * 描述: 模板内容,不填则下发空模板 *
*/ - private List data; + private List data; /** * 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 @@ -72,7 +72,7 @@ public class WxMaSubscribeMessage implements Serializable { */ private String lang = WxMaConstants.MiniProgramLang.ZH_CN; - public WxMaSubscribeMessage addData(Data datum) { + public WxMaSubscribeMessage addData(MsgData datum) { if (this.data == null) { this.data = new ArrayList<>(); } @@ -86,10 +86,10 @@ public class WxMaSubscribeMessage implements Serializable { return WxMaGsonBuilder.create().toJson(this); } - @lombok.Data + @Data @NoArgsConstructor @AllArgsConstructor - public static class Data implements Serializable { + public static class MsgData implements Serializable { private static final long serialVersionUID = 1L; private String name; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/CategoryData.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/CategoryData.java new file mode 100644 index 000000000..72e68e6aa --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/CategoryData.java @@ -0,0 +1,19 @@ +package cn.binarywang.wx.miniapp.bean.subscribemsg; + +import lombok.Data; + +import java.io.Serializable; + +/** + * . + * + * @author Binary Wang + * @date 2021-01-27 + */ +@Data +public class CategoryData implements Serializable { + private static final long serialVersionUID = -5935548352317679892L; + + private int id; + private String name; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/PubTemplateKeyword.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/PubTemplateKeyword.java new file mode 100644 index 000000000..5a6f15c88 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/PubTemplateKeyword.java @@ -0,0 +1,21 @@ +package cn.binarywang.wx.miniapp.bean.subscribemsg; + +import lombok.Data; + +import java.io.Serializable; + +/** + * . + * + * @author Binary Wang + * @date 2021-01-27 + */ +@Data +public class PubTemplateKeyword implements Serializable { + private static final long serialVersionUID = -1100641668859815647L; + + private int kid; + private String name; + private String example; + private String rule; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/TemplateInfo.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/TemplateInfo.java new file mode 100644 index 000000000..75329f65f --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/subscribemsg/TemplateInfo.java @@ -0,0 +1,22 @@ +package cn.binarywang.wx.miniapp.bean.subscribemsg; + +import lombok.Data; + +import java.io.Serializable; + +/** + * . + * + * @author Binary Wang + * @date 2021-01-27 + */ +@Data +public class TemplateInfo implements Serializable { + private static final long serialVersionUID = 6971785763573992264L; + + private String priTmplId; + private String title; + private String content; + private String example; + private int type; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMessageGsonAdapter.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMessageGsonAdapter.java index ac877f8b2..e5a8ef06b 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMessageGsonAdapter.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/adaptor/WxMaSubscribeMessageGsonAdapter.java @@ -38,7 +38,7 @@ public class WxMaSubscribeMessageGsonAdapter implements JsonSerializer result = this.wxService.getSubscribeService().getPubTemplateKeyWordsById("99"); + final List result = this.wxService.getSubscribeService().getPubTemplateKeyWordsById("99"); System.out.println(result); } @@ -47,7 +49,7 @@ public class WxMaSubscribeServiceImplTest { @Test public void testGetTemplateList() throws WxErrorException { - final List templateList = this.wxService.getSubscribeService().getTemplateList(); + final List templateList = this.wxService.getSubscribeService().getTemplateList(); System.out.println(templateList); } @@ -58,7 +60,7 @@ public class WxMaSubscribeServiceImplTest { @Test public void testGetCategory() throws WxErrorException { - final List categoryData = this.wxService.getSubscribeService().getCategory(); + final List categoryData = this.wxService.getSubscribeService().getCategory(); assertThat(categoryData).isNotNull(); System.out.println(categoryData); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpConfigStorage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpConfigStorage.java index 88520adf6..b9f4d13e7 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpConfigStorage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpConfigStorage.java @@ -3,7 +3,6 @@ package me.chanjar.weixin.mp.config; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.enums.TicketType; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; -import me.chanjar.weixin.mp.bean.WxMpHostConfig; import java.io.File; import java.util.concurrent.locks.Lock; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpHostConfig.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpHostConfig.java similarity index 97% rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpHostConfig.java rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpHostConfig.java index 9fff434e1..819215240 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpHostConfig.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpHostConfig.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.mp.bean; +package me.chanjar.weixin.mp.config; import lombok.AllArgsConstructor; import lombok.Builder; @@ -29,6 +29,7 @@ public class WxMpHostConfig { * 对应于:https://open.weixin.qq.com */ private String openHost; + /** * 对应于:https://mp.weixin.qq.com */ diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpDefaultConfigImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpDefaultConfigImpl.java index 637b7b557..0a531835c 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpDefaultConfigImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpDefaultConfigImpl.java @@ -4,7 +4,7 @@ import lombok.Data; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.enums.TicketType; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; -import me.chanjar.weixin.mp.bean.WxMpHostConfig; +import me.chanjar.weixin.mp.config.WxMpHostConfig; import me.chanjar.weixin.mp.config.WxMpConfigStorage; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java index d050aeb66..932ea97fc 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java @@ -2,10 +2,10 @@ package me.chanjar.weixin.mp.enums; import lombok.AllArgsConstructor; import lombok.Getter; -import me.chanjar.weixin.mp.bean.WxMpHostConfig; +import me.chanjar.weixin.mp.config.WxMpHostConfig; import me.chanjar.weixin.mp.config.WxMpConfigStorage; -import static me.chanjar.weixin.mp.bean.WxMpHostConfig.*; +import static me.chanjar.weixin.mp.config.WxMpHostConfig.*; /** *
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
index 13f4b48a4..7cd6625fc 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import me.chanjar.weixin.common.bean.WxAccessToken;
 import me.chanjar.weixin.common.enums.TicketType;
 import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
-import me.chanjar.weixin.mp.bean.WxMpHostConfig;
+import me.chanjar.weixin.mp.config.WxMpHostConfig;
 import me.chanjar.weixin.mp.config.WxMpConfigStorage;
 import me.chanjar.weixin.open.api.WxOpenConfigStorage;
 import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken;