手把手教学java微信公众号模版消息开发
2017-12-14 20:33
344 查看
前言:最初接触的时候也是一头雾水,微信的接口文档看也看不懂,最后还是百度了一段时间才出来的结果,觉得网上有些文章还是没有说清除如何简单快捷的做出这个模版,所以我自己整理了一下自己写模版的经验,废话不多说,开始!
具体流程: 其实说起来具体流程还是挺简单的,主要就是微信创建好模版后,java代码使用模版id,推送的用户的openid,还有符合推送的对象发送微信一个post就可以了.博主还是菜鸟,所以写的不好的地方多多指教,下面具体解释:
微信access_token:
不懂的先去百度下哈,度娘伟大!简单的说就是获取用户信息,等一些高级点的功能都需要用到token如果已经知道怎么获取的或者是项目中自带的小伙伴那就略过吧…这个主要是有效时间2小时,我这里做了一个定时任务自动在过期前重新获取
appid和appsecret都是创建公众号必须的,这里也不多说.
我的项目使用的是spring注解,只要在配置文件里面配置:
微信中消息模版的创建:
这个有点我想说,微信接口文档也太简洁了把,我都怀疑我看错了…=-=
举个例子:
你写了个模版
java中传入message=哈哈 content = 我是内容哦!
发送模版后是:
简单的说就是想要怎么样的模版就写什么样,最重要的是传的对象需要标记{{XX.DATA}}到时候传什么就显示什么,颜色也是后台代码可以控制
java中模版的写法:
这里我就写了三个实体类,其实最主要的只是返回的对象和官网接口文档里写的一样:
这样
d293
就行了,data里面的元素就看你模版写多少{{}}这种元素了
放上我的代码:
这个是ps做的计划图片,跟着图片确定了五个参数:用户名,商城名,时间,订单号,积分,(还有一个订单总积分没写上 =-= )
跟着写模版
因为我是测试公众号,模版是自己创建的,正式的貌似还可以选择已有的模版
WeChatTemplateDataItem类:这个主要是data里面的每一个元素
WeChatTemplateMessage类:这个 就是我们需要转成json对象发送的实体类了
WeChatMessageTemplate类:消息模版类,主要是看业务需求来写对应的模版,额外加上了发送微信的方法
业务中调用:
到这里就大功告成了,最主要的还是微信json串的生成还有数据的发送吧,希望可以帮助到你们,好好干!
这里还要感谢一个博客,发送请求的代码是借鉴过来的,哈哈,很不错
http://blog.csdn.net/walkcode/article/details/78147217
具体流程: 其实说起来具体流程还是挺简单的,主要就是微信创建好模版后,java代码使用模版id,推送的用户的openid,还有符合推送的对象发送微信一个post就可以了.博主还是菜鸟,所以写的不好的地方多多指教,下面具体解释:
微信access_token:
不懂的先去百度下哈,度娘伟大!简单的说就是获取用户信息,等一些高级点的功能都需要用到token如果已经知道怎么获取的或者是项目中自带的小伙伴那就略过吧…这个主要是有效时间2小时,我这里做了一个定时任务自动在过期前重新获取
appid和appsecret都是创建公众号必须的,这里也不多说.
我的项目使用的是spring注解,只要在配置文件里面配置:
这边因为上面配过lazy,所以使用的bean类中必须加上@lazy(false)取消懒加载 @Scheduled(fixedRate = 6900000L, initialDelay = 1000L) public void getWeChatAccessToken() { String url = "https://api.weixin.qq.com/cgi-bin/token"; String result = Http.sendPost(url,"&grant_type=client_credential&appid="+wechatConfig.getAppid()+"&secret="+wechatConfig.getAppSecret()); Map<Object, Object> map = JsonUtils.toMap(result); Object o = map.get("access_token"); if(o != null && o instanceof String){ WeChatJsonController.ACCESS_TOKEN = (String)o; } }
微信中消息模版的创建:
这个有点我想说,微信接口文档也太简洁了把,我都怀疑我看错了…=-=
举个例子:
你写了个模版
我是标题 你好啊: {{message.DATA}} 内容: {{content.DATA}}
java中传入message=哈哈 content = 我是内容哦!
发送模版后是:
我是标题 你好啊:哈哈 内容:我是内容哦!
简单的说就是想要怎么样的模版就写什么样,最重要的是传的对象需要标记{{XX.DATA}}到时候传什么就显示什么,颜色也是后台代码可以控制
java中模版的写法:
这里我就写了三个实体类,其实最主要的只是返回的对象和官网接口文档里写的一样:
{ "touser":"OPENID",//要推送的用户对应的openid "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY", "url":"http://weixin.qq.com/download",//这个是点击推送消息指向的地址 "topcolor":"#FF0000",//感觉这个没什么用 "data":{ "User": { "value":"黄先生", "color":"#173177" }, "Date":{ "value":"06月07日 19时24分", "color":"#173177" } } }
这样
d293
就行了,data里面的元素就看你模版写多少{{}}这种元素了
放上我的代码:
这个是ps做的计划图片,跟着图片确定了五个参数:用户名,商城名,时间,订单号,积分,(还有一个订单总积分没写上 =-= )
跟着写模版
下单成功通知: 您好,{{userName.DATA}} 感谢您在i商城消费商品 购买时间: {{date.DATA}} 订单号为: {{bh.DATA}} 订单总价{{totalIntegral.DATA}}积分 当前您剩余{{leftIntegral.DATA}}积分
因为我是测试公众号,模版是自己创建的,正式的貌似还可以选择已有的模版
WeChatTemplateDataItem类:这个主要是data里面的每一个元素
package com.thinkgem.jeesite.modules.busi.kehu.entity; import org.apache.commons.lang3.StringUtils; /** * 微信模版消息内容内的元素 * * @author Z.Bh * */ public class WeChatTemplateDataItem { private String value; private String color; /** * * @param value 设置值 * @param color 对应显示的颜色,不设置默认空字符串 */ public WeChatTemplateDataItem(String value,String color){ if(!StringUtils.isBlank(value)){ this.value = value; }else{ this.value = ""; } if(!StringUtils.isBlank(color)){ this.color = color; }else{ this.color = "#173177"; } } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
WeChatTemplateMessage类:这个 就是我们需要转成json对象发送的实体类了
package com.thinkgem.jeesite.modules.busi.kehu.entity; import java.util.Map; /** * 微信模版消息 * @author Z.Bh * */ public class WeChatTemplateMessage { private String touser; //要返回给指定用户的openid private String template_id; //模版id private String url; //模版点击的url private String topcolor; // private Map<String, Object> data; //模版内容 public WeChatTemplateMessage(){ this.setTopcolor("#FF0000"); } public String getTemplate_id() { return template_id; } public void setTemplate_id(String template_id) { this.template_id = template_id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public String getTopcolor() { return topcolor; } public void setTopcolor(String topcolor) { this.topcolor = topcolor; } public Map<String, Object> getData() { return data; } public void setData(Map<String, Object> data) { this.data = data; } }
WeChatMessageTemplate类:消息模版类,主要是看业务需求来写对应的模版,额外加上了发送微信的方法
package com.thinkgem.jeesite.modules.busi.kehu.entity; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSON; import com.thinkgem.jeesite.common.config.Global; import com.thinkgem.jeesite.common.utils.Http; import com.thinkgem.jeesite.common.utils.JsonUtils; import com.thinkgem.jeesite.modules.busi.JsonInterface.web.WeChatJsonController; /** * 微信模版消息返回类 * 模版中,对应的颜色必须默认设置好 * * @author Z.Bh * */ public class WeChatMessageTemplate { private static String SERVERURL = Global.getConfig("serverurl");//我们服务器的地址 private static final Logger Log = LoggerFactory.getLogger(WeChatMessageTemplate.class); /** * 下单成功消息模版 * @param userName 用户名/昵称 * @param date 具体时间(XX年xx月xx日 xx时xx分) * @param bh 订单编号 * @param totalIntegral 订单总积分 * @param leftIntegral 剩余积分 * @param openId 要推送的微信用户的openid * @return */ public static boolean getPlaceAnOrderTemplate( String userName,String mallName, String date, String bh, String totalIntegral, String leftIntegral,String openId) { Map<String, Object> list = new HashMap<String, Object>(); list.put("userName", new WeChatTemplateDataItem(userName, "#0fae39")); list.put("mallName", new WeChatTemplateDataItem(mallName, "#0fae39")); list.put("date", new WeChatTemplateDataItem(date, "#323232")); list.put("bh", new WeChatTemplateDataItem(bh, "#323232")); list.put("totalIntegral", new WeChatTemplateDataItem(totalIntegral, "#ae0f0f")); list.put("leftIntegral", new WeChatTemplateDataItem(leftIntegral, "#ae0f0f")); WeChatTemplateMessage template = new WeChatTemplateMessage(); template.setTouser(openId); template.setTemplate_id("i9GEaIZdh8WumSBQ-YTlX3jvBRnhtlnzh6Jge38k0HM"); //这个要根据实际使用的模版来设置对应的id template.setUrl(SERVERURL+"/garbageCollection/h5/user/order_detail.html?orderNo=" + bh); template.setData(list); return sendWeChatTemplate(template);//发送并获取结果 } /** * 发送微信模版 * * @param template * 包含发送对象的openid,template_id,和必须的内容 * @return */ public static boolean sendWeChatTemplate(WeChatTemplateMessage template) { boolean success = false; String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN"; requestUrl = requestUrl.replace("ACCESS_TOKEN", WeChatJsonController.ACCESS_TOKEN); System.out.println("ACCESS_TOKEN: " + WeChatJsonController.ACCESS_TOKEN); String jsonResult = Http.httpsRequest(requestUrl, "POST", JSON.toJSONString(template)); if (jsonResult != null) { Map<Object, Object> map = JsonUtils.toMap(jsonResult); Object o = map.get("errcode"); if (o != null && o instanceof Integer) { int errorCode = (Integer) o; String errorMessage = (String) map.get("errmsg"); if (errorCode != 0) { Log.error("模板消息发送失败: " + errorMessage + "; template_id:" + template.getTemplate_id()); } else { success = true; } } } return success; } }
业务中调用:
/**************** 微信公众号消息推送 ******************/ String leftIntegral = kehuMap.get("jifen"); String mallName = "i商城"; String date =new SimpleDateFormat("yyyy年MM月dd日 HH时mm分").format(new Date()); String userName = kehuMap.get("nikename"); String bh = orderBh; String totalIntegral = totalJifen+""; String openId = kehuMap.get("openid"); if(!StringUtils.isBlank(openId)){ //没有openid无法进行推送 boolean sendSuccess = WeChatMessageTemplate.getPlaceAnOrderTemplate(userName, mallName, date, bh, totalIntegral, leftIntegral, openId); if(!sendSuccess){ System.out.println("微信推送失败!"); } }
到这里就大功告成了,最主要的还是微信json串的生成还有数据的发送吧,希望可以帮助到你们,好好干!
这里还要感谢一个博客,发送请求的代码是借鉴过来的,哈哈,很不错
http://blog.csdn.net/walkcode/article/details/78147217
相关文章推荐
- 微信公众号开发--接收与回复消息(Java)
- 微信公众号关注一次回复多条消息java开发
- 用java开发微信公众号:接收和被动回复普通消息(三)
- java微信公众号开发,认证,自定义菜单,消息推送,网页跳转
- JAVA微信公众号开发之客服消息
- JAVA微信公众号开发第4篇将用户消息转发到多客服
- 微信公众号开发模板消息推送(三) java
- yershop商城系统Thinkphp开发(四)——微信篇3:主动给用户发消息-微信公众号模版消息
- java微信公众号开发发送模板消息
- 手把手教您开发JAVA微信SDK-发送消息
- java微信公众号开发总结(2)——文本消息处理
- 微信公众号开发之回复图文消息java代码
- JAVA微信公众号开发第2篇之消息处理
- java实现微信公众号发送模版消息
- 微信公众号开发(Java) ---- 客服消息发送
- JAVA开发微信公众号-接收和发送消息
- 关于Java开发微信公众号后台-消息回复
- java开发微信公众号(SpringMVC)2-消息管理功能
- 【JAVA微信开发】WxMessageSDK-轻量的微信公众号消息处理SDK
- java开发微信公众号接受并回复消息[工程代码+图片全解]