diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java index 2dc627eb9..43c28bb80 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java @@ -1,9 +1,7 @@ package cn.binarywang.wx.miniapp.api; -import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage; -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.*; +import com.google.gson.JsonObject; import me.chanjar.weixin.common.error.WxErrorException; /** @@ -18,6 +16,8 @@ public interface WxMaMsgService { String TEMPLATE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send"; String SUBSCRIBE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send"; String UNIFORM_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send"; + String ACTIVITY_ID_CREATE_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create"; + String UPDATABLE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send"; /** *
@@ -25,6 +25,10 @@ public interface WxMaMsgService { * 详情请见: 发送客服消息 * 接口url格式:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN *+ * + * @param message 客服消息 + * @return . + * @throws WxErrorException . */ boolean sendKefuMsg(WxMaKefuMessage message) throws WxErrorException; @@ -53,13 +57,43 @@ public interface WxMaMsgService { */ void sendSubscribeMsg(WxMaSubscribeMessage subscribeMessage) throws WxErrorException; - /** *
* 下发小程序和公众号统一的服务消息 * 详情请见: 下发小程序和公众号统一的服务消息 * 接口url格式:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN *+ * + * @param uniformMessage 消息 + * @throws WxErrorException . */ void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorException; + + /** + *
+ * 创建被分享动态消息的 activity_id. + * 动态消息: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatable-message.html + * + * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html + * 接口地址:GET https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=ACCESS_TOKEN + *+ * + * @return . + * @throws WxErrorException . + */ + JsonObject createUpdatableMessageActivityId() throws WxErrorException; + + /** + *
+ * 修改被分享的动态消息. + * 动态消息: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatable-message.html + * + * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.setUpdatableMsg.html + * 接口地址:POST https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=ACCESS_TOKEN + *+ * + * @param msg 动态消息 + * @throws WxErrorException . + */ + void setUpdatableMsg(WxMaUpdatableMsg msg) throws WxErrorException; } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java index 1a059983e..c9e229e9e 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java @@ -2,11 +2,9 @@ package cn.binarywang.wx.miniapp.api.impl; import cn.binarywang.wx.miniapp.api.WxMaMsgService; import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage; -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.*; import cn.binarywang.wx.miniapp.constant.WxMaConstants; +import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import lombok.AllArgsConstructor; @@ -55,4 +53,15 @@ public class WxMaMsgServiceImpl implements WxMaMsgService { } } + @Override + public JsonObject createUpdatableMessageActivityId() throws WxErrorException { + final String responseContent = this.wxMaService.get(ACTIVITY_ID_CREATE_URL, null); + return JSON_PARSER.parse(responseContent).getAsJsonObject(); + } + + @Override + public void setUpdatableMsg(WxMaUpdatableMsg msg) throws WxErrorException { + this.wxMaService.post(UPDATABLE_MSG_SEND_URL, WxMaGsonBuilder.create().toJson(msg)); + } + } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaUpdatableMsg.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaUpdatableMsg.java new file mode 100644 index 000000000..98429b850 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaUpdatableMsg.java @@ -0,0 +1,76 @@ +package cn.binarywang.wx.miniapp.bean; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * 动态消息. + * + * @author Binary Wang + * @date 2020-02-17 + */ +@Data +@Accessors(chain = true) +public class WxMaUpdatableMsg implements Serializable { + private static final long serialVersionUID = 6231957192034798165L; + + /** + * 动态消息的 ID,通过 updatableMessage.createActivityId 接口获取 + */ + @SerializedName("activity_id") + private String activityId; + + /** + * 动态消息修改后的状态 + * 0 未开始 + * 1 已开始 + */ + @SerializedName("target_state") + private Integer targetState; + + /** + * 动态消息对应的模板信息 + */ + @SerializedName("template_info") + private TemplateInfo templateInfo; + + @Data + @Accessors(chain = true) + public static class TemplateInfo implements Serializable { + private static final long serialVersionUID = -9218473401759062841L; + + /** + * 模板中需要修改的参数 + */ + @SerializedName("parameter_list") + private List
+ * 合法值: + * member_count target_state = 0 时必填,文字内容模板中 member_count 的值 + * room_limit target_state = 0 时必填,文字内容模板中 room_limit 的值 + * path target_state = 1 时必填,点击「进入」启动小程序时使用的路径。对于小游戏,没有页面的概念,可以用于传递查询字符串(query),如 "?foo=bar" + * version_type target_state = 1 时必填,点击「进入」启动小程序时使用的版本。 + * 有效参数值为:develop(开发版),trial(体验版),release(正式版) + *+ */ + private String name; + + /** + * 修改后的参数值 + */ + private String value; + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java index 132ea55e8..7ff22290e 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java @@ -1,17 +1,20 @@ package cn.binarywang.wx.miniapp.api.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.*; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import cn.binarywang.wx.miniapp.test.TestConfig; +import com.google.common.collect.Lists; +import com.google.gson.JsonObject; +import com.google.inject.Inject; +import me.chanjar.weixin.common.error.WxErrorException; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + import java.text.SimpleDateFormat; import java.util.Date; -import cn.binarywang.wx.miniapp.bean.*; -import org.testng.annotations.*; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.test.ApiTestModule; -import cn.binarywang.wx.miniapp.test.TestConfig; -import com.google.common.collect.Lists; -import com.google.inject.Inject; -import me.chanjar.weixin.common.error.WxErrorException; +import static org.assertj.core.api.Assertions.assertThat; /** * 测试消息相关接口 @@ -25,7 +28,8 @@ public class WxMaMsgServiceImplTest { @Inject private WxMaService wxService; - public void testSendKefuMessage() throws WxErrorException { + @Test + public void testSendKefuMsg() throws WxErrorException { TestConfig config = (TestConfig) this.wxService.getWxMaConfig(); WxMaKefuMessage message = WxMaKefuMessage.newTextBuilder() .toUser(config.getOpenid()) @@ -74,7 +78,7 @@ public class WxMaMsgServiceImplTest { @Test public void testSendUniformMsg() throws WxErrorException { TestConfig config = (TestConfig) this.wxService.getWxMaConfig(); - WxMaUniformMessage message = WxMaUniformMessage.builder() + WxMaUniformMessage message = WxMaUniformMessage.builder() .isMpTemplateMsg(false) .toUser(config.getOpenid()) .page("page/page/index") @@ -89,4 +93,22 @@ public class WxMaMsgServiceImplTest { this.wxService.getMsgService().sendUniformMsg(message); } + + @Test + public void testCreateUpdatableMessageActivityId() throws WxErrorException { + final JsonObject jsonObject = this.wxService.getMsgService().createUpdatableMessageActivityId(); + assertThat(jsonObject).isNotNull(); + assertThat(jsonObject.get("activity_id")).isNotNull(); + System.out.println(jsonObject.get("activity_id")); + assertThat(jsonObject.get("expiration_time")).isNotNull(); + } + + @Test + public void testSetUpdatableMsg() throws WxErrorException { + this.wxService.getMsgService().setUpdatableMsg(new WxMaUpdatableMsg() + .setActivityId("1048_4f61uDloWPZl9pAs1dGx07vDiHKZ7FwJ0suohS1iMH5z8zhFktYk4nRqqBY~") + .setTargetState(1) + .setTemplateInfo(new WxMaUpdatableMsg.TemplateInfo() + .setParameterList(Lists.newArrayList(new WxMaUpdatableMsg.Parameter().setName("member_count").setValue("1"))))); + } }