调用微信消息所遇到的坑

目前为止,因为公司的业务要求,接触到了三种微信消息。
分别是:
模板消息
订阅消息
客服消息
在做这些消息前,需要进行一些必要的信息收集。
A、公众号或小程序的appId
B、用户的openId
C、微信管理员授权的accessToken
一、模板消息
这个是最简单的,最容易操作的。除了模板id不同要注意之外,接下来你就可以做一个公共的接口处理传过来的参数进行一下排序就行了。对数据格式没有要求。。
二、订阅消息
这个最麻烦,分为一次订阅和长期订阅。因为微信想要增强用户体验,减少干扰,所以在20年之后,小程序就取消模板消息,并且只有相关企业才能使用长期订阅。
订阅消息的发送只能让用户同意授权,不授权不能发送。而且消息的格式都是定死的,每个订阅消息的传参,传参命名都不一样。需要做配置。
三、客服消息
这个比较简单,发送的文本格式都是自己定,仅限于公众号。
有限制的是在没有和公众号交互的情况下(点击菜单,发送消息等),只能发二十条。交互后次数重置。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要想在Java中调用微信发送消息,可以使用公众号的接口,通过Http请求进行调用。 首先,需要在微信公众平台上注册并获得开发者ID和密钥,然后将其用于生成访问令牌。接着,可以使用微信公众平台提供的API接口,通过Http请求来发送消息。 具体步骤如下: 1. 获取访问令牌 在微信公众平台上注册账号并获得开发者ID和密钥后,可以使用这些信息来生成访问令牌。访问令牌是通过调用微信公众平台的接口,使用开发者ID和密钥来获取的。访问令牌的获取方式请参考微信公众平台的文档。 2. 发送消息 在获取了访问令牌后,可以通过Http请求来发送消息。发送消息接口为: https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 其中,ACCESS_TOKEN为步骤1中获取的访问令牌。 发送的消息需要以Json格式进行编码,Json格式的示例代码如下: { "touser":"OPENID", "msgtype":"text", "text": { "content":"Hello World" } } 其中,touser为接收消息的用户的OpenID,msgtype为消息类型,可以为text、image、voice、video、music、news、mpnews等。text为文本消息类型,content为发送的消息内容。 使用Java代码发送消息的示例代码如下: ``` import java.io.IOException; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Map; public class WechatSender { private static final String SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; private String accessToken; public WechatSender(String accessToken) { this.accessToken = accessToken; } public void sendText(String openid, String text) throws IOException { URL url = new URL(SEND_URL + "?access_token=" + accessToken); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json"); Map<String, Object> message = new HashMap<>(); message.put("touser", openid); message.put("msgtype", "text"); Map<String, String> textContent = new HashMap<>(); textContent.put("content", text); message.put("text", textContent); OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); out.write(new Gson().toJson(message)); out.flush(); out.close(); if (conn.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); } } } ``` 在调用sendText方法时,需要传入接收消息的用户的OpenID和消息内容。如果发送成功,将返回状态码为200。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值