Skip to content

Commit 27d88a7

Browse files
committed
🆕 #1290 小程序增加动态消息接口
1 parent f90f454 commit 27d88a7

File tree

4 files changed

+158
-17
lines changed

4 files changed

+158
-17
lines changed

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package cn.binarywang.wx.miniapp.api;
22

3-
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
4-
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
5-
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
6-
import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
3+
import cn.binarywang.wx.miniapp.bean.*;
4+
import com.google.gson.JsonObject;
75
import me.chanjar.weixin.common.error.WxErrorException;
86

97
/**
@@ -18,13 +16,19 @@ public interface WxMaMsgService {
1816
String TEMPLATE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send";
1917
String SUBSCRIBE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send";
2018
String UNIFORM_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send";
19+
String ACTIVITY_ID_CREATE_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create";
20+
String UPDATABLE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send";
2121

2222
/**
2323
* <pre>
2424
* 发送客服消息
2525
* 详情请见: <a href="https://developers.weixin.qq.com/miniprogram/dev/api-backend/customerServiceMessage.send.html">发送客服消息</a>
2626
* 接口url格式:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
2727
* </pre>
28+
*
29+
* @param message 客服消息
30+
* @return .
31+
* @throws WxErrorException .
2832
*/
2933
boolean sendKefuMsg(WxMaKefuMessage message) throws WxErrorException;
3034

@@ -53,13 +57,43 @@ public interface WxMaMsgService {
5357
*/
5458
void sendSubscribeMsg(WxMaSubscribeMessage subscribeMessage) throws WxErrorException;
5559

56-
5760
/**
5861
* <pre>
5962
* 下发小程序和公众号统一的服务消息
6063
* 详情请见: <a href="https://developers.weixin.qq.com/miniprogram/dev/api/open-api/uniform-message/sendUniformMessage.html">下发小程序和公众号统一的服务消息</a>
6164
* 接口url格式:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN
6265
* </pre>
66+
*
67+
* @param uniformMessage 消息
68+
* @throws WxErrorException .
6369
*/
6470
void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorException;
71+
72+
/**
73+
* <pre>
74+
* 创建被分享动态消息的 activity_id.
75+
* 动态消息: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatable-message.html
76+
*
77+
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html
78+
* 接口地址:GET https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=ACCESS_TOKEN
79+
* </pre>
80+
*
81+
* @return .
82+
* @throws WxErrorException .
83+
*/
84+
JsonObject createUpdatableMessageActivityId() throws WxErrorException;
85+
86+
/**
87+
* <pre>
88+
* 修改被分享的动态消息.
89+
* 动态消息: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatable-message.html
90+
*
91+
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.setUpdatableMsg.html
92+
* 接口地址:POST https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=ACCESS_TOKEN
93+
* </pre>
94+
*
95+
* @param msg 动态消息
96+
* @throws WxErrorException .
97+
*/
98+
void setUpdatableMsg(WxMaUpdatableMsg msg) throws WxErrorException;
6599
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
import cn.binarywang.wx.miniapp.api.WxMaMsgService;
44
import cn.binarywang.wx.miniapp.api.WxMaService;
5-
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
6-
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
7-
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
8-
import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
5+
import cn.binarywang.wx.miniapp.bean.*;
96
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
7+
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
108
import com.google.gson.JsonObject;
119
import com.google.gson.JsonParser;
1210
import lombok.AllArgsConstructor;
@@ -55,4 +53,15 @@ public void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorExce
5553
}
5654
}
5755

56+
@Override
57+
public JsonObject createUpdatableMessageActivityId() throws WxErrorException {
58+
final String responseContent = this.wxMaService.get(ACTIVITY_ID_CREATE_URL, null);
59+
return JSON_PARSER.parse(responseContent).getAsJsonObject();
60+
}
61+
62+
@Override
63+
public void setUpdatableMsg(WxMaUpdatableMsg msg) throws WxErrorException {
64+
this.wxMaService.post(UPDATABLE_MSG_SEND_URL, WxMaGsonBuilder.create().toJson(msg));
65+
}
66+
5867
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package cn.binarywang.wx.miniapp.bean;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.Data;
5+
import lombok.experimental.Accessors;
6+
7+
import java.io.Serializable;
8+
import java.util.List;
9+
10+
/**
11+
* 动态消息.
12+
*
13+
* @author <a href="https://github.com/binarywang">Binary Wang</a>
14+
* @date 2020-02-17
15+
*/
16+
@Data
17+
@Accessors(chain = true)
18+
public class WxMaUpdatableMsg implements Serializable {
19+
private static final long serialVersionUID = 6231957192034798165L;
20+
21+
/**
22+
* 动态消息的 ID,通过 updatableMessage.createActivityId 接口获取
23+
*/
24+
@SerializedName("activity_id")
25+
private String activityId;
26+
27+
/**
28+
* 动态消息修改后的状态
29+
* 0 未开始
30+
* 1 已开始
31+
*/
32+
@SerializedName("target_state")
33+
private Integer targetState;
34+
35+
/**
36+
* 动态消息对应的模板信息
37+
*/
38+
@SerializedName("template_info")
39+
private TemplateInfo templateInfo;
40+
41+
@Data
42+
@Accessors(chain = true)
43+
public static class TemplateInfo implements Serializable {
44+
private static final long serialVersionUID = -9218473401759062841L;
45+
46+
/**
47+
* 模板中需要修改的参数
48+
*/
49+
@SerializedName("parameter_list")
50+
private List<Parameter> parameterList;
51+
}
52+
53+
@Data
54+
@Accessors(chain = true)
55+
public static class Parameter implements Serializable {
56+
private static final long serialVersionUID = 7444716050341038046L;
57+
58+
/**
59+
* 要修改的参数名
60+
* <pre>
61+
* 合法值:
62+
* member_count target_state = 0 时必填,文字内容模板中 member_count 的值
63+
* room_limit target_state = 0 时必填,文字内容模板中 room_limit 的值
64+
* path target_state = 1 时必填,点击「进入」启动小程序时使用的路径。对于小游戏,没有页面的概念,可以用于传递查询字符串(query),如 "?foo=bar"
65+
* version_type target_state = 1 时必填,点击「进入」启动小程序时使用的版本。
66+
* 有效参数值为:develop(开发版),trial(体验版),release(正式版)
67+
* </pre>
68+
*/
69+
private String name;
70+
71+
/**
72+
* 修改后的参数值
73+
*/
74+
private String value;
75+
}
76+
}

weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package cn.binarywang.wx.miniapp.api.impl;
22

3-
import java.text.SimpleDateFormat;
4-
import java.util.Date;
5-
6-
import cn.binarywang.wx.miniapp.bean.*;
7-
import org.testng.annotations.*;
8-
93
import cn.binarywang.wx.miniapp.api.WxMaService;
4+
import cn.binarywang.wx.miniapp.bean.*;
105
import cn.binarywang.wx.miniapp.test.ApiTestModule;
116
import cn.binarywang.wx.miniapp.test.TestConfig;
127
import com.google.common.collect.Lists;
8+
import com.google.gson.JsonObject;
139
import com.google.inject.Inject;
1410
import me.chanjar.weixin.common.error.WxErrorException;
11+
import org.testng.annotations.Guice;
12+
import org.testng.annotations.Test;
13+
14+
import java.text.SimpleDateFormat;
15+
import java.util.Date;
16+
17+
import static org.assertj.core.api.Assertions.assertThat;
1518

1619
/**
1720
* 测试消息相关接口
@@ -25,7 +28,8 @@ public class WxMaMsgServiceImplTest {
2528
@Inject
2629
private WxMaService wxService;
2730

28-
public void testSendKefuMessage() throws WxErrorException {
31+
@Test
32+
public void testSendKefuMsg() throws WxErrorException {
2933
TestConfig config = (TestConfig) this.wxService.getWxMaConfig();
3034
WxMaKefuMessage message = WxMaKefuMessage.newTextBuilder()
3135
.toUser(config.getOpenid())
@@ -74,7 +78,7 @@ public void testSendSubscribeMsg() throws WxErrorException {
7478
@Test
7579
public void testSendUniformMsg() throws WxErrorException {
7680
TestConfig config = (TestConfig) this.wxService.getWxMaConfig();
77-
WxMaUniformMessage message = WxMaUniformMessage.builder()
81+
WxMaUniformMessage message = WxMaUniformMessage.builder()
7882
.isMpTemplateMsg(false)
7983
.toUser(config.getOpenid())
8084
.page("page/page/index")
@@ -89,4 +93,22 @@ public void testSendUniformMsg() throws WxErrorException {
8993

9094
this.wxService.getMsgService().sendUniformMsg(message);
9195
}
96+
97+
@Test
98+
public void testCreateUpdatableMessageActivityId() throws WxErrorException {
99+
final JsonObject jsonObject = this.wxService.getMsgService().createUpdatableMessageActivityId();
100+
assertThat(jsonObject).isNotNull();
101+
assertThat(jsonObject.get("activity_id")).isNotNull();
102+
System.out.println(jsonObject.get("activity_id"));
103+
assertThat(jsonObject.get("expiration_time")).isNotNull();
104+
}
105+
106+
@Test
107+
public void testSetUpdatableMsg() throws WxErrorException {
108+
this.wxService.getMsgService().setUpdatableMsg(new WxMaUpdatableMsg()
109+
.setActivityId("1048_4f61uDloWPZl9pAs1dGx07vDiHKZ7FwJ0suohS1iMH5z8zhFktYk4nRqqBY~")
110+
.setTargetState(1)
111+
.setTemplateInfo(new WxMaUpdatableMsg.TemplateInfo()
112+
.setParameterList(Lists.newArrayList(new WxMaUpdatableMsg.Parameter().setName("member_count").setValue("1")))));
113+
}
92114
}

0 commit comments

Comments
 (0)