java开发微信模板消息推送
概述
详细
概述
微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添加分享到朋友圈,关注微信号等按钮。
一、前言
(1)适合人群
1,JAVA服务端开发人员
2,初级人员开发人员
3,了解spring springboot + maven.
4,了解微信开发
(2)你需要准备什么?
1,积极主动学习
2,微信公众号开发基本流程
3,java后端几大框架掌握如(spring springboot maven )
二、前期准备工作
软件环境:eclipse
官方下载:https://www.eclipse.org/downloads/
1 ,基本需求
微信模板消息推送订单购买成功推送
三、项目结构
四、使用规则
所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口
需要选择公众账号服务所处的2个行业,每月可更改1次所选行业
在所选择行业的模板库中选用已有的模板进行调用
每个账号可以同时使用25个模板
当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制,以公众号MP后台开发者中心页面中标明的数字为准
五、接口文档规范
模板消息调用时主要需要模板ID和模板中各参数的赋值内容
模板中参数内容必须以".DATA"结尾,否则视为保留字
模板保留符号"{{ }}"
测试公众号可以随意定义,正式的必须用模板库中的
以下是我使用的模板消息示例
package cn.demo.Template; /**
* 模板详细信息
*/
public class Data_first { private String value;
private String color;
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;
}
}
/**
* 获取acctoken
* @return
*/
private String getAccessToken() {
if (access_token != null && (access_token_updateTime + 5400000) > new Date().getTime())
return access_token;
AccessTokenResult accessTokenResult = restTemplate.getForObject(String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", APPID, SECRET), AccessTokenResult.class);
if (accessTokenResult.getErrcode() == null || accessTokenResult.getErrcode().equals("0")) {
access_token_updateTime = new Date().getTime();
access_token = accessTokenResult.getAccess_token();
} else
System.out.println("error:" + accessTokenResult);
return accessTokenResult.getAccess_token(); }
/**
* 微信请求 - 信任管理器
*/
public class MyX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
} public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
} public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
/**
* 发送https请求
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/ public class WeixinUtil { public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr)
{
JSONObject jsonObject = null;
StringBuffer buffer = new StringBuffer();
try
{
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new SecureRandom()); SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl);
HttpsURLConnection httpUrlConn = (HttpsURLConnection)url.openConnection();
httpUrlConn.setSSLSocketFactory(ssf); httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false); httpUrlConn.setRequestMethod(requestMethod); if ("GET".equalsIgnoreCase(requestMethod)) {
httpUrlConn.connect();
} if (outputStr != null) {
OutputStream outputStream = httpUrlConn.getOutputStream(); outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
} InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close(); inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
// logger.error("Weixin server connection timed out.");
} catch (Exception e) {
// logger.error("https request error:{}", e);
}
return jsonObject;
} }
下面请求微信发送模板消息
/**
* * 发送模板消息
* appId 公众账号的唯一标识
* appSecret 公众账号的密钥
* openId 用户标识
*/
public void send_template_message(String appId, String openId) {
String access_token = getAccessToken();
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
NewOrdersTemplate temp = new NewOrdersTemplate();
Data data = new Data();
Data_first first = new Data_first();
Data_Day Day = new Data_Day();
Data_orderId orderId = new Data_orderId();
Data_orderType orderType = new Data_orderType();
Data_customerName customerName = new Data_customerName();
Data_customerPhone customerPhone = new Data_customerPhone();
Data_remark remark = new Data_remark(); first.setValue("收到一个新的订单");
first.setColor("#173177");
Day.setValue("14时56分");
Day.setColor("#173177");
orderId.setValue("1002");
orderId.setColor("#173177");
orderType.setValue("订位");
orderType.setColor("#173177");
customerName.setValue("陈丑丑");
customerName.setColor("#173177");
customerPhone.setValue("13222222222");
customerPhone.setColor("#173177");
remark.setValue("请及时处理您的订单");
remark.setColor("#173177"); data.setFirst(first);
data.setDay(Day);
data.setOrderId(orderId);
data.setOrderType(orderType);
data.setCustomerName(customerName);
data.setCustomerPhone(customerPhone);
data.setRemark(remark);
temp.setTouser(openId);
temp.setTemplate_id("C0BHxo_YLQ9TV2XytzqucHI7dNJytq0aAxYkBkqZTiw");
temp.setUrl("http://weixin.qq.com/download");
temp.setTopcolor("#173177");
temp.setData(data); String jsonString = JSONObject.fromObject(temp).toString().replace("day", "Day");
JSONObject jsonObject = WeixinUtil.httpRequest(url, "POST", jsonString);
System.out.println(jsonObject); int result = 0; // logger.info("模板消息发送结果:"+result}; }
下一步请求conterller因为我参数写死在conterller里面
@RequestMapping("/test")
@ResponseBody
public String testDemo() {
String openId = "oJilVv4k-DXciUhIsC2wSXJs2J";
String appId = "wx1ff244a71563c";
send_template_message(appId, openId);
return appId; }
六、运行效果
访问这地址 http://localhost:8080/app/tetst 测试结果如图
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
java开发微信模板消息推送的更多相关文章
- 前后端分离djangorestframework—— 接入微信模板消息推送
微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...
- qhfl-9 微信模板消息推送
开发中用的是测试号 微信公众号认证流程 用户登陆 <!DOCTYPE html> <html lang="en"> <head> <met ...
- ASP.NET 微信公众平台模板消息推送功能完整开发
最近公众平台的用户提出了新需求,他们希望当收到新的邮件或者日程的时候,公众平台能主动推送一条提醒给用户.看了看平台提供的接口,似乎只有[模板消息]能尽量满足这一需求,但不得不说微信提供的实例太少,而且 ...
- Java对接微信公众号模板消息推送
内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...
- 微信小程序开发:设置消息推送
开发设置中,启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中. 不过照着说明去操作,即使按照最简单的明文方式去设置,还是提示Token验证失败.仔 ...
- 微信小程序之模板消息推送
最近在用sanic框架写微信小程序,其中写了一个微信消息推送,还挺有意思的,写了个小demo 具体见官方文档:https://developers.weixin.qq.com/miniprogram/ ...
- iOS开发如何实现消息推送机制
一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息 ...
随机推荐
- springMVC4(14)各类视图输出实例分析
1. 模板视图 FreeMarkerViewResolver . VolocityViewResolver 这两个视图解析器都是 UrlBasedViewResolver 的子类. FreeMarke ...
- 第五章 mybatis批量更新update
一.所有的指定id的模型类的同一个字段进行批量更新 实际上: update t set fileld='xx' where id in (id1,id2,...,idn) 代码: <update ...
- mysql 5.1简明教程
第一章Mysql简介与安装 第一节 MySql简介 百度百科 第二节 MySql安装与配置 1.MySql5.1下载及安装 2.MySql数据库编码配置 UTF-8 3.MySql图形页面sqlyog ...
- Lync 2013安装中遇到的关于SQL Mirroring的一次报错的解决
Problem Description ================= Following the Lync Deployment Wizard to setup Database Mirrori ...
- iOS开发-Launch Image和Launch Screen
Launch Image是App的启动图片,LaunchScreen是iOS8之后的功能,两者都可以设置app的启动图片.iOS8之后官方的推荐了使用Launch screen.xib,在xib的中通 ...
- Linux下配置nfs并远程挂载
nfs是网络文件系统,允许一个节点通过网络访问远程计算机的文件系统,远程文件系统可以被直接挂载到本地,文件操作和本地没有区别,如果是局域网的nfs那么io的性能也可以保证,下面就以CentOS 7.x ...
- MFC中设备描述表dc的使用
以下代码我是在View类中实现的: /** 利用平台SDK实现画线功能 // 首先获得窗口的设备描述表 HDC hdc; hdc = ::GetDC( m_hWnd ); //调用的是平台SDK的成员 ...
- glValidateProgram只用于调试
glValidateProgram应该只用于调试,用于release版本中会影响性能.以下是详细描述: Before doing so, however, we might want to che ...
- Redis源代码剖析--对象object
前面一系列的博客分析了Redis的基本数据结构,有动态字符串sds.双端链表sdlist.字典dict.跳跃表skiplist.整数集合intset和压缩列表ziplist等,这些数据结构对于用户来说 ...
- Android开发——Android M(6.0) 权限解决方案
Android开发--Android M(6.0) 权限解决方案 自从Android M(6.0)发布以来,权限管理相比以前有了很大的改变,很多程序员发现之前运行的好好的Android应用在Andro ...