首页 > 编程语言 >Java微信公众号推送模版消息的方法示例

Java微信公众号推送模版消息的方法示例

时间:2024-08-12 17:18:15浏览次数:11  
标签:Java String 示例 微信 new apache import 模板

要在Java中向微信公众号推送模板消息,首先需要确保我们已经有了微信公众号,并且已经设置了模板消息权限和模板ID。模板消息是一种向用户发送通知的服务,广泛用于订单状态更新、服务提醒等场景。

下面,我将详细介绍如何使用Java结合微信官方提供的API来实现模板消息的推送。这通常涉及几个步骤:获取access_token、组装模板消息数据、发送请求。

第一步:准备工作

  1. 微信公众号配置:确保我们的公众号已经开通模板消息功能,并创建了相应的模板。

  2. 引入依赖:我们可能需要使用HTTP客户端库,如Apache HttpClient或OkHttp。这里我们使用Apache HttpClient。

    在我们的pom.xml中添加依赖(如果使用Maven):

    <dependency>  
        <groupId>org.apache.httpcomponents</groupId>  
        <artifactId>httpclient</artifactId>  
        <version>4.5.13</version>  
    </dependency>
    

第二步:获取Access Token

微信公众号API的调用大多需要Access Token,这是一个临时票据,用于调用接口的身份验证。

import org.apache.http.client.methods.HttpGet;  
import org.apache.http.impl.client.CloseableHttpClient;  
import org.apache.http.impl.client.HttpClients;  
import org.apache.http.util.EntityUtils;  
  
public class WeChatUtil {  
  
    private static final String APP_ID = "我们的AppID";  
    private static final String APP_SECRET = "我们的AppSecret";  
    private static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}";  
  
    public static String getAccessToken() throws Exception {  
        String url = TOKEN_URL.replace("{}", APP_ID).replace("{}", APP_SECRET);  
        HttpGet request = new HttpGet(url);  
        CloseableHttpClient httpClient = HttpClients.createDefault();  
        String result = httpClient.execute(request, httpResponse ->  
                EntityUtils.toString(httpResponse.getEntity()));  
        // 解析JSON获取access_token,这里假设已经通过某种方式(如Jackson, Gson)解析  
        // 这里简单用String.split()模拟解析  
        String[] parts = result.split(",");  
        for (String part : parts) {  
            if (part.contains("access_token")) {  
                String[] tokenParts = part.split(":");  
                return tokenParts[1].trim().replace("\"", "");  
            }  
        }  
        return null;  
    }  
}

第三步:发送模板消息

import org.apache.http.client.methods.HttpPost;  
import org.apache.http.entity.StringEntity;  
import org.apache.http.message.BasicHeader;  
import org.apache.http.util.EntityUtils;  
  
public class TemplateMessageSender {  
  
    public static void sendTemplateMessage(String accessToken, String toUserOpenId, String templateId, String url, Map<String, TemplateData> data) throws Exception {  
        String json = "{\"touser\":\"" + toUserOpenId + "\",\"template_id\":\"" + templateId + "\",\"url\":\"" + url + "\",\"data\":{";  
        for (Map.Entry<String, TemplateData> entry : data.entrySet()) {  
            json += "\"" + entry.getKey() + "\":{\"value\":\"" + entry.getValue().getValue() + "\",\"color\":\"" + entry.getValue().getColor() + "\"},";  
        }  
        if (!json.endsWith(",")) {  
            json = json.substring(0, json.length() - 1);  
        }  
        json += "}}";  
  
        String messageUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;  
        HttpPost request = new HttpPost(messageUrl);  
        request.setHeader(new BasicHeader("Content-Type", "application/json; charset=UTF-8"));  
        request.setEntity(new StringEntity(json, "UTF-8"));  
  
        CloseableHttpClient httpClient = HttpClients.createDefault();  
        String result = httpClient.execute(request, httpResponse ->  
                EntityUtils.toString(httpResponse.getEntity()));  
        System.out.println("发送结果: " + result);  
    }  
  
    static class TemplateData {  
        private String value;  
        private String color;  
  
        // 构造器、getter和setter省略  
    }  
}

第四步:调用发送模板消息的方法

在完成了WeChatUtil类用于获取access_tokenTemplateMessageSender类用于发送模板消息后,我们需要在我们的应用逻辑中调用这些方法。以下是一个示例,展示如何整合这些步骤来发送模板消息。

首先,确保我们有一个包含模板消息数据的Map,其中键是模板中定义的字段名,值是TemplateData对象(包含具体的值和可选的颜色)。

import java.util.HashMap;  
import java.util.Map;  
  
public class WeChatTemplateMessageExample {  
  
    public static void main(String[] args) {  
        try {  
            // 获取access_token  
            String accessToken = WeChatUtil.getAccessToken();  
            if (accessToken == null) {  
                System.out.println("获取access_token失败");  
                return;  
            }  
  
            // 准备模板消息数据  
            Map<String, TemplateMessageSender.TemplateData> data = new HashMap<>();  
            data.put("first", new TemplateMessageSender.TemplateData("这是第一条消息", "#173177"));  
            data.put("keyword1", new TemplateMessageSender.TemplateData("这是关键词1的内容", "#173177"));  
            data.put("keyword2", new TemplateMessageSender.TemplateData("这是关键词2的内容", "#173177"));  
            data.put("remark", new TemplateMessageSender.TemplateData("这是备注信息", "#173177"));  
  
            // 发送模板消息  
            String toUserOpenId = "用户的OpenID";  
            String templateId = "我们的模板ID";  
            String url = "点击后跳转的链接";  
            TemplateMessageSender.sendTemplateMessage(accessToken, toUserOpenId, templateId, url, data);  
  
            System.out.println("模板消息发送成功");  
        } catch (Exception e) {  
            e.printStackTrace();  
            System.out.println("发送模板消息失败:" + e.getMessage());  
        }  
    }  
}

注意事项

  1. 安全性:在实际应用中,应避免将APP_IDAPP_SECRET硬编码在代码中,可以通过配置文件或环境变量等方式来管理。
  2. 错误处理:上述示例中的错误处理非常简单,仅打印了堆栈跟踪和错误消息。在生产环境中,我们可能需要更复杂的错误处理逻辑,比如重试机制、日志记录等。
  3. HTTP客户端:示例中使用了Apache HttpClient,但我们也可以选择其他HTTP客户端库,如OkHttp、Retrofit等。
  4. JSON解析:示例中使用了简单的字符串操作来模拟JSON解析,但在实际开发中,我们应该使用专门的JSON库(如Jackson、Gson)来解析和构建JSON数据。
  5. 模板ID和OpenID:确保模板ID和用户的OpenID是正确的,并且模板ID与我们要发送的数据字段相匹配。
  6. API限制:微信对API调用有频率限制,请确保我们的应用不会超出这些限制。

通过上述步骤,我们应该能够在Java中成功地向微信公众号发送模板消息。

标签:Java,String,示例,微信,new,apache,import,模板
From: https://www.cnblogs.com/TS86/p/18355375

相关文章

  • Java计算机毕业设计的酒店管理系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和党组织建设的日益规范化,传统的手工党员管理模式已难以满足当前高效、精准的管理需求。特别是在高校、企事业单位等组织中,党......
  • Java计算机毕业设计的爱心慈善公益系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,随着经济的快速发展与人民生活水平的普遍提高,社会各界对于公益慈善事业的关注与参与度日益增强。然而,传统的慈善模式往往受限于信息不对称......
  • Java计算机毕业设计的汽车配件管理系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着汽车工业的迅猛发展,汽车配件市场日益繁荣,配件种类繁多、更新换代迅速,给汽车售后服务和维修行业带来了前所未有的挑战。传统的手工或简单电子化的......
  • JAVA 两个类同时实现同一个接口的方法
    在Java中,两个类同时实现同一个接口是非常常见的。接口定义了一组方法,实现接口的类必须提供这些方法的具体实现。以下将展示如何实现这一要求,并提供具体的代码示例。示例接口首先,定义一个简单的接口,比如一个表示动物的接口,它有一个方法makeSound:publicinterfaceAnimal{......
  • java .stream(). 使用介绍 Streams API
    Java8引入了StreamsAPI,它允许我们以声明性方式处理序列的数据。.stream()是这一API的核心方法,用于从一个数据源(如数组、集合等)创建一个流(Stream)。以下是.stream()方法的一些基本使用介绍:1.从集合创建流List<String>myList=Arrays.asList("a","b","c");Stream<S......
  • 智慧农业信息化服务平台小程序/基于微信小程序的农业信息管理系统的设计与实现/基于微
    摘要随着信息技术互联网和小程序的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的微信小程序应运而生,各行各业相继进入信息管理时代,其中智慧农业信息化服务平台小程序就是信息时代变革中的产物之一。任何......
  • Java基础语法
    Java基础语法注释写代码要有好的规范三种注释:单行注释publicclassHelloWorld{publicstaticvoidmain(String[]args){//单行注释//输出一个HelloWorld!System.out.println("HelloWorld!");}}多行注释//多行注释......
  • Java Reentrantlock可重入锁原理 | 源码探究
    一、基本概念ReentrantLock是Java中提供的一个可重入互斥锁,它是java.util.concurrent.locks包中的一个接口Lock的实现类。ReentrantLock提供了比使用synchronized关键字更强大的锁定机制,例如 公平锁 和 非公平锁 选择、尝试锁定、可中断锁定等。ReentrantLock......
  • 微信小程序如何实现页面传参
    目录前言路径传递在onLoad里接收参数 其他位置获取参数全局变量数据缓存事件通信使用wx自定义小程序全局方法和全局变量 总结前言只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递,下面我总结了n 种页面方法。路径传递通过在url后面拼接参数,......
  • [Java/SQL] 自动去除SQL注释
    0引言在数据连接(池)框架、数据服务/DatatoAPI等中间平台中,因部分数据库不允许SQL中存在注释信息(如:Redis、OpenGemini等;当然,MYSQL、INFLUXDB等数据库是支持的),故存在这样一个需求:在提交到数据库的SQL,需对原始SQL的注释信息予以去除。以OpenGeminiV1.2.0数据库为例,如果......