Java编程实现通过微信公众号推送消息给用户

公众号配置

接口文档

客服账号管理 | 微信开放文档

获取接口调用凭据 | 微信开放文档

代码示例 

pom.xml内容

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.2.4</version>
        </dependency>

创建WeChatClient类,代码如下:

package com.soft863;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;


public class WeChatClient {
    private String AppID;
    private String AppSecret;
    private String access_token;

    public WeChatClient(String AppID, String AppSecret) {
        this.AppID = AppID;
        this.AppSecret = AppSecret;
        this.access_token = getAccessToken();
    }

    public String getAccessToken() {
        // 调用微信公众号API获取access_token
        String access_token_url = StrUtil.format("https://api.weixin.qq.com/cgi-bin/token?" +
                "grant_type=client_credential" +
                "&appid={}"+
                "&secret={}", AppID, AppSecret);


        String returnMsg = HttpUtil.get(access_token_url);
        JSONObject responseJsonObject = JSONUtil.parseObj(returnMsg);
        System.out.println(responseJsonObject.toString());
        if (ObjectUtil.isNull(responseJsonObject)) {
            return "";
        }
           else {
            access_token = responseJsonObject.getStr("access_token");
            return access_token;
        }
    }
    public String getAccessToken1() {

        String url = "https://api.weixin.qq.com/cgi-bin/stable_token";
        Map<String, Object> params = new HashMap<>();
        params.put("grant_type", "client_credential");
        params.put("appid", AppID);
        params.put("secret", AppSecret);
        params.put("force_refresh", "false");

        String returnMsg  = HttpUtil.post(url, params);

        JSONObject responseJsonObject = JSONUtil.parseObj(returnMsg);
        System.out.println(responseJsonObject.toString());
        if (ObjectUtil.isNull(responseJsonObject)) {
            return "";
        }
        else {
            access_token = responseJsonObject.getStr("access_token");
            return access_token;
        }
    }
  public void getUsers(){
      String access_token_url = StrUtil.format("https://api.weixin.qq.com/cgi-bin/user/get?access_token={}&next_openid=NEXT_OPENID" , access_token);
      String returnMsg = HttpUtil.get(access_token_url);
      cn.hutool.json.JSONObject responseJsonObject = JSONUtil.parseObj(returnMsg);
      System.out.println(responseJsonObject.toString());
    }
    public void sendMessage(String message, String toUser) {
        try {
            String apiUrl = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + access_token;
            String postData = "{\"touser\":\"" + toUser + "\"," +
                    "\"msgtype\":\"text\"," +
                    "\"text\":{\"content\":\"" + message + "\"}}";

            URL url = new URL(apiUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");

            try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"))) {
                writer.write(postData);
            }

            try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                System.out.println("Response: " + response.toString());
            }

            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        WeChatClient client = new WeChatClient("wx40ac", "3ad98235fb93032a0");
        client.getUsers();
//        client.sendMessage("Hello, this is a test message.", "o7NDM6FfAYCiNsLSW");
    }
}

FAQ

1、invalid ip XXXXX ::ffff:XXXXX, not in whitelist rid: 66b1ca56-53d13e18-6aaec3ba

解决方案:

微信公众号授权失败,出现invalid ip地址,not in whitelist hint的解决方法 · 外卖跑腿使用教程 · 看云

2、errcode":48001,"errmsg":"api unauthorized rid: 66b1cd17-2e160a54-4296035f"

 

解决方案:https://www.cnblogs.com/buguge/p/11649827.html 

https://mp.weixin.qq.com/advanced/advanced?action=table&token=651216413&lang=zh_CN

参考资料

https://blog.51cto.com/u_16213387/11570872

https://zhuanlan.zhihu.com/p/693826189

微信小程序——Java后台获取access_token_java 微信小程序jdk 获取token-CSDN博客

微信公众号授权失败,出现invalid ip地址,not in whitelist hint的解决方法 · 外卖跑腿使用教程 · 看云

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将Java应用程序连接到微信公众号推送消息,您需要使用微信公众平台提供的API和Java的HTTP客户端库。以下是一些步骤: 1. 在微信公众平台上注册并获取应用程序的appID和appSecret。 2. 在Java应用程序中,使用HTTP客户端库发送HTTP请求来获取access_token,该token是访问API的凭证。 3. 通过微信公众平台提供的模板消息接口,构建一个消息模板。 4. 在Java应用程序中,使用HTTP客户端库发送HTTP请求,将模板消息发送到微信公众号。 下面是一个示例代码片段,演示如何使用Java和OkHttp库来发送一个简单的文本消息: ```java OkHttpClient client = new OkHttpClient(); String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); JSONObject jsonObject = new JSONObject(response.body().string()); String access_token = jsonObject.getString("access_token"); String postUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token; String json = "{\"touser\":\"OPENID\",\"template_id\":\"TEMPLATE_ID\",\"data\":{\"content\":{\"value\":\"Hello World\"}}}"; RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); Request postRequest = new Request.Builder() .url(postUrl) .post(body) .build(); Response postResponse = client.newCall(postRequest).execute(); ``` 在上面的代码中,您需要将APPID和APPSECRET替换为您的应用程序的实际值。您还需要将OPENID替换为要发送消息用户的openid,以及TEMPLATE_ID替换为您的消息模板的实际ID。 希望这可以帮助您开始将Java应用程序连接到微信公众号推送消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数智侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值