公众号配置
接口文档
代码示例
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的解决方法 · 外卖跑腿使用教程 · 看云