微信公众号服务号推送模板消息设置方法(后端java)
作者:TaoCap 发布时间:2023-11-20 08:27:58
标签:公众号,模板消息,推送
模板消息文档
公众号的类型分为服务号、订阅号和企业号,其中服务号和订阅号比较常见。要想实现公众号推动消息给指定的用户,其类型必须为服务号。
推送的模板消息示例如下 :
设置模板消息
此处为正式环境的设置,开发环境可使用微信测试平台提供的测试账号体验和测试公众平台的所有高级接口,无需提前申请审核,详情见本文最后章节。
首次设置需要开启模板消息功能,登录公众号后台: mp.weixin.qq.com ,在左侧导航栏最下方有「添加新的功能」,打开,在「广告与服务」一类中找到「模板消息」,开通即可。
打开「模板消息」,选择模板库,需先选择所在行业(一个月只能修改一次),之后在下方的行业模板中选择合适的模板(可以搜索模板关键字)。
添加完选择的模板后在「我的模板」中可以查看模板的详细信息,此处的模板ID后面代码中会用到。
编码
1. 添加依赖
// Gradle
dependencies {
// ...
compile "com.github.binarywang:weixin-java-mp:3.3.0"
// ...
}
// Maven
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.0.0</version>
</dependency>
2. SubscriptionMessageUtil.java
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
public class SubscriptionMessageUtil {
/**
* 下单后通知供货商
*/
public static void sendOrderMsg(String appid,
String appSecret,
String userOpenid,
String orderId,
String serviceName) {
// 模板消息 ID
// {{first.DATA}}
// 订单编号:{{keyword1.DATA}}
// 订货终端:{{keyword2.DATA}}
// 下单时间:{{keyword3.DATA}}
// {{remark.DATA}}
String OrderMsgTemplateId = "Th5MwuyqSjfADUDOJ5PSGDf1swr1-nHmOtLYlVX8n_8";
// 卡片详情跳转页,设置此值,当点击消息时会打开指定的页面
// String detailUrl = "https://bing.com";
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd HH:mm");
Date date = new Date();
String timeNow = sdf.format(date);
WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
wxStorage.setAppId(appid);
wxStorage.setSecret(appSecret);
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxStorage);
// 此处的 key/value 需和模板消息对应
List<WxMpTemplateData> wxMpTemplateDataList = Arrays.asList(
new WxMpTemplateData("first", "您有一个新的订货单", "#000000"),
new WxMpTemplateData("keyword1", orderId),
new WxMpTemplateData("keyword2", serviceName),
new WxMpTemplateData("keyword3", timeNow),
new WxMpTemplateData("remark", "请登录系统查看订单详情并及时配货")
);
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser(userOpenid)
.templateId(OrderMsgTemplateId)
.data(wxMpTemplateDataList)
// .url(detailUrl)
.build();
try {
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
} catch (Exception e) {
System.out.println("推送失败:" + e.getMessage());
}
}
}
3. 配置参数
xx.properties
wx:
mp:
appid: xxx
appSecret: xxx
4. 使用
在需要的 Controller 中直接引用即可
@Controller
@RequestMapping("/order")
public class XXController {
@Value("${wx.mp.appid}")
private String APPID;
@Value("${wx.mp.appSecret}")
private String APP_SECRET;
@RequestMapping(value = "/create", method = RequestMethod.POST)
public CommonResult create() {
String openid = "";// 发送给指定的用户
String serviceName = "";
String orderNo = "";
SubscriptionMessage.sendOrderMsg(APPID, APP_SECRET, openid, orderNo, serviceName);
}
}
微信测试号
开发过程中直接使用正式微信号、公众号可能会有诸多不便,所以微信公众平台提供接口测试账号,可直接体验和测试公众平台所有高级接口。
地址: 微信公众平台测试账号
登录后可查看测试账号的 appid、appsecret
可以使用微信扫描页面下方的测试公众号二维码关注,关注后可获取当前微信号的测试 openid(非公众账号的 openid),可用于代码中临时指定模板消息接收用户,方便开发。
该测试平台还提供测试用模板消息,可自定义模板消息,创建完成后会临时生成模板 ID ,代码中直接替换即可。
接收消息示例如下:
总结
来源:https://blog.csdn.net/yotcap/article/details/123091044


猜你喜欢
- 在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock.R
- 前言Kotlin 的泛型与 Java 一样,都是一种语法糖,只在源代码里出现,编译时会进行简单的字符串替换。泛型是静态类型语言中不可缺少的一
- Java String对象使用方法详解先来看一个例子,代码如下: public class Test { public sta
- 前言:发送邮件,肯定是每个公司都会有的基本业务。很多公司都会选择把发送邮件作为一个基础服务,对外提供接口。直接调用就可发邮件了。但是我们都知
- 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 num
- 开发前准备1、密钥工具在线工具地址:https://miniu.alipay.com/keytool/create无需下载,直接在线生成你的
- Android WebView或手机浏览器打开连接问题解决办法总结1.通常情况下 大家可能都想使用WebView打开网页内部链接而不想再调用
- 我就废话不多说了,大家还是直接看代码吧~import com.alibaba.fastjson.JSON;import java.util.
- 之前一篇文章研究完横向二级菜单,发现其中使用了SparseArray去替换HashMap的使用.于是乎自己查了一些相关资料,自己同时对性能进
- 一、问题描述有时候,我们会遇到在遍历List集合的过程中删除数据的情况。看着自己写的代码,感觉完全没有问题,但就是达不到预期的效果,这是为什
- TextWatcher是一个监听字符变化的类。当我们调用EditText的addTextChangedListener(TextWatche
- 本文实例讲述了Android编程实现activity dialog透明背景的方法。分享给大家供大家参考,具体如下:首先查一下window&n
- 本文实例为大家分享了Android实现蓝牙串口通讯的具体代码,供大家参考,具体内容如下最近在弄蓝牙串口,参考了不少网上的大佬,加上自己早期对
- 一、需求Jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是>需要编译和打包的,一般情况下编译和打包都是用ma
- 实例如下:/** * 将一个list均分成n个list,主要通过偏移量来实现的 * @param source * @return */ p
- Android 使用mediaplayer播放res/raw文件夹中的音乐的实例(1)在res文件夹中新建一个文件夹重命名为raw,并且将要
- 一、简介Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止。官方的解释比较乏味,通俗的说就是创建一个子线程,给它加了这
- Home键(小房子键)在键盘上映射的就是home键,这倒是很好记。Menu键用于打开菜单的按键,在键盘上映射的是F2键,PgUp键同样可以。
- 前端开发工程师和关注前端开发的开发者们在2015年中肯定被腾讯的JSSDk引爆过,搞APP的、搞前端的甚至是是搞后端的都跑过来凑热闹,一时之
- 本文实例讲述了Android popupWindow弹出窗体实现方法。分享给大家供大家参考,具体如下:1. 建立popupwindow显示的