Skip to content

Commit 05c1123

Browse files
committed
🎨 #3439 【公众号】模版消息长度限制问题优化
1 parent 6840722 commit 05c1123

File tree

2 files changed

+55
-12
lines changed

2 files changed

+55
-12
lines changed

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateMessage.java

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
package me.chanjar.weixin.mp.bean.template;
22

3+
import lombok.*;
4+
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
5+
import org.apache.commons.lang3.StringUtils;
6+
37
import java.io.Serializable;
48
import java.util.ArrayList;
59
import java.util.List;
610

7-
import lombok.AllArgsConstructor;
8-
import lombok.Builder;
9-
import lombok.Data;
10-
import lombok.Getter;
11-
import lombok.NoArgsConstructor;
12-
import lombok.Setter;
13-
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
14-
1511
/**
1612
* 模板消息.
17-
* 参考 http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN 发送模板消息接口部分
13+
* 参考 <a href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN">发送模板消息接口部分</a>
1814
*
1915
* @author <a href="https://github.com/binarywang">Binary Wang</a>
2016
*/
@@ -67,10 +63,35 @@ public WxMpTemplateMessage addData(WxMpTemplateData datum) {
6763
if (this.data == null) {
6864
this.data = new ArrayList<>();
6965
}
70-
this.data.add(datum);
66+
this.data.add(resetValue(datum));
7167
return this;
7268
}
7369

70+
/**
71+
* 处理微信模版消息字符串长度问题
72+
*
73+
* @link <a href=https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E7%B1%BB%E7%9B%AE%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF">模板消息</a>
74+
*/
75+
private WxMpTemplateData resetValue(WxMpTemplateData datum) {
76+
String name = datum.getName();
77+
String value = datum.getValue();
78+
79+
if (StringUtils.startsWith(name, "thing") && value.length() > 20) {
80+
value = StringUtils.substring(value, 0, 17) + "...";
81+
} else if (StringUtils.startsWith(name, "character_string") && value.length() > 32) {
82+
value = StringUtils.substring(value, 0, 29) + "...";
83+
} else if (StringUtils.startsWith(name, "phone_number") && value.length() > 17) {
84+
value = StringUtils.substring(value, 0, 14) + "...";
85+
} else if (StringUtils.startsWith(name, "car_number") && value.length() > 8) {
86+
value = StringUtils.substring(value, 0, 5) + "...";
87+
} else if (StringUtils.startsWith(name, "const") && value.length() > 20) {
88+
value = StringUtils.substring(value, 0, 17) + "...";
89+
}
90+
91+
datum.setValue(value);
92+
return datum;
93+
}
94+
7495
public String toJson() {
7596
return WxMpGsonBuilder.create().toJson(this);
7697
}

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/template/WxMpTemplateMessageTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public void testToJson() {
1717
WxMpTemplateMessage tm = WxMpTemplateMessage.builder()
1818
.toUser("OPENID")
1919
.templateId("ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY")
20-
.miniProgram(new WxMpTemplateMessage.MiniProgram("xiaochengxuappid12345", "index?foo=bar",true))
20+
.miniProgram(new WxMpTemplateMessage.MiniProgram("xiaochengxuappid12345", "index?foo=bar", true))
2121
.url("http://weixin.qq.com/download")
2222
.clientMsgId("MSG_000001")
2323
.build();
@@ -26,7 +26,29 @@ public void testToJson() {
2626
new WxMpTemplateData("first", "haahah", "#FF00FF"));
2727
tm.addData(
2828
new WxMpTemplateData("remark", "heihei", "#FF00FF"));
29-
assertEquals(tm.toJson(), "{\"touser\":\"OPENID\",\"template_id\":\"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY\",\"client_msg_id\":\"MSG_000001\",\"url\":\"http://weixin.qq.com/download\",\"miniprogram\":{\"appid\":\"xiaochengxuappid12345\",\"path\":\"index?foo=bar\"},\"data\":{\"first\":{\"value\":\"haahah\",\"color\":\"#FF00FF\"},\"remark\":{\"value\":\"heihei\",\"color\":\"#FF00FF\"}}}");
29+
30+
assertEquals("{\"touser\":\"OPENID\",\"template_id\":\"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY\",\"client_msg_id\":\"MSG_000001\",\"url\":\"http://weixin.qq.com/download\",\"miniprogram\":{\"appid\":\"xiaochengxuappid12345\",\"path\":\"index?foo=bar\"},\"data\":{\"first\":{\"value\":\"haahah\",\"color\":\"#FF00FF\"},\"remark\":{\"value\":\"heihei\",\"color\":\"#FF00FF\"}}}", tm.toJson());
3031
}
3132

33+
@Test
34+
public void testAddData() {
35+
WxMpTemplateMessage tm = WxMpTemplateMessage.builder().build()
36+
.addData(new WxMpTemplateData("thing01", "张三李四王麻子张三李四王麻子张三李四王麻子张三李四王麻子"))
37+
.addData(new WxMpTemplateData("time01", "2019年10月1日 15:01"))
38+
.addData(new WxMpTemplateData("character_string01", "1234567890123456789012345678901234567890"))
39+
.addData(new WxMpTemplateData("amount01", "¥100.21"))
40+
.addData(new WxMpTemplateData("phone_number01", "+86-0766-668888661111"))
41+
.addData(new WxMpTemplateData("car_number01", "粤A8Z888挂9"))
42+
.addData(new WxMpTemplateData("const01", "支付状态、排队状态、天气状态、物流状态、用药提醒、还款提醒"));
43+
44+
assertEquals(7, tm.getData().size());
45+
46+
assertEquals("张三李四王麻子张三李四王麻子张三李...", tm.getData().get(0).getValue());
47+
assertEquals("2019年10月1日 15:01", tm.getData().get(1).getValue());
48+
assertEquals("12345678901234567890123456789...", tm.getData().get(2).getValue());
49+
assertEquals("¥100.21", tm.getData().get(3).getValue());
50+
assertEquals("+86-0766-66888...", tm.getData().get(4).getValue());
51+
assertEquals("粤A8Z8...", tm.getData().get(5).getValue());
52+
assertEquals("支付状态、排队状态、天气状态、物流...", tm.getData().get(6).getValue());
53+
}
3254
}

0 commit comments

Comments
 (0)