Java微信公众号发送消息-保姆级教程附源码
官方文档:
全局返回码文档 :
1. 概念说明:
-
消息会话(这里用到模板消息) 群发消息:订阅号为每天1次,服务号为每月4次
2. 开发准备:
- 开发者在公众平台网站中创建服务号、获取接口权限后方可开始
3. 测试demo(更改配置信息即可使用)
3.1. 服务器配置
这里坑比较多,服务器配置不是随便填一个url就完事了,需要后端接口配合校验。
界面:
测试号界面:
3.1.1.配置填写说明
-
EncodingAESKey: 由开发者手动填写或随机生成,将用作消息体加解密密钥 消息加解密方式 :明文模式、兼容模式和安全模式
3.1.2.校验服务器有效性:
校验请求说明:
3.1.3.URL后端接口代码和校验代码(servlet)
项目路径是/xjsrm,因此服务器url地址就是:
直接将http://localhost:8080/xjsrm/wx地址填到服务配置的url可以吗?答案是不可以!
3.1.4.配置内网穿透,完成本地调试
3.1.4.1. 内网穿透的必要性:
3.1.4.2. 用到的工具cpolar:
-
也可以使用花生壳、natapp、ngrok等;但不建议使用natapp、ngrok,这两个工具都不能直接访问到服务资源,中间会多一层手动校验(提示用户是否要访问该网站),会造成不必要的麻烦。
3.1.4.3. cpolar配置内网穿透的教程
-
参考大佬的博文 从 2.内网穿透开始看到3.测试公网访问 即可
3.1.4.4. 获取本地项目的公网路径
配置完cpolar后在在线隧道列表中找到本地项目的地址,我项目是localhost:8080,因此公网地址对应(最好用https协议) 、
因此完整的服务器Url就是:
浏览器访问该url,看后端是否接受到了请求,如果接收到说明接口没问题,此时将URL填到对应的配置栏中点击提交即可。
3.1.5. 可能存在的问题
此时查看sandboxinfo这个包。如果出现 errorcode=-1多半是内网穿透工具的问题。
出现其他错误代码可以去错误大全中根据信息排查
ngrok错误排查示例:
3.2 模板消息
模板消息的官方文档:
从官方给出的请求示例入手,看需要准备的接口和数据:
3.2.1. 搞定 template_id 即模板消息id:
新增模板消息(以测试号为例)
模板内容可设置参数(模板标题不可),供接口调用时使用,参数需以{ {开头,以.DATA}}结尾(具体传参看后续代码)
3.2.2. 搞定 touser 即openid
查看用户管理的官方文档;,通过官方接口获取
3.2.3. 从获取openid的请求中我们发现需要access_token:
获取access_token官方文档:
3.2.4. 发送模板消息的url参数
这个是发送消息后用户点击卡片跳转的地址(自定义)可以不填
3.2.5. topcolor
消息卡片的顶部颜色(自定义)
3.2.5. data
消息的内容(了解结构即可,后续代码中会体现)
3.3. 源码
拷贝完再理解
3.3.1 模板消息DTO
3.3.2. 模板消息内容DTO
import java.io.Serializable; /** * @Description 模板消息内容类 * @author isymi * @version * @date 2023年5月29日下午4:33:27 * */ public class WeChatTemplateMsg implements Serializable{ /** * 消息实参 */ private String value; /** * 消息颜色 */ private String color; public WeChatTemplateMsg(String value) { this.value = value; this.color = "#173177"; } public WeChatTemplateMsg(String value, String color) { this.value = value; this.color = color; } @Override public String toString() { return "WeChatTemplateMsg [value=" + value + ", color=" + 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; } }
3.3.3. access_token缓存类:
3.3.4.http请求工具类:
3.3.5. 最终的Servlet(controller自行转换)(为方便观看所有逻辑都写在这里了,自行优化):
3.4.测试
浏览器访问
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
通过java方式获取微信用户openId