Java实现 微信小程序 + 消息推送

本文详细介绍如何在微信小程序中实现模板消息推送,包括实体类设计、参数设置及请求流程。涵盖openid、formid、Template_id等关键概念,提供代码示例及错误处理策略。

 

 实现效果:

 

下面要显示五个字段

 

接下来,参照官方文档,一步步实现:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html

 

一、官方给出请求示例、返回示例

 

 

 

二、根据上面编写实体类

 (1)请求参数

@Data
public class SendTemplateReq {
    /**
     * 接收者(用户)的 openid
     */
    private String touser;
    /**
     * 所需下发的模板消息的id
     */
    private String template_id;
    /**
     * 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。
     * 该字段不填则模板无跳转。
     */
    private String page;
    /**
     * 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
     */
    private String form_id;
    /**
     * 模板内容
     * 不填则下发空模板。具体格式请参考示例。
     */
    private DoctorReplyMsgData data;

    /**
     * 模板需要放大的关键词
     * 不填则默认无放大
     */
    private String emphasis_keyword;
}

  

(2)请求参数中的data,如实现效果所示,这是在小程序显示的五个字段.

(属性名就要叫keyword1、2、3,否则推送的消息空白)

@Data
public class DoctorReplyMsgData {
   
    private KeyNote keyword1;
 
    private KeyNote keyword2;
 
    private KeyNote keyword3;
 
    private KeyNote keyword4;
  
    private KeyNote keyword5;
}

 

(3)上面五个字段对应的值(data是对象,所以需要这样)

@Data
public class KeyNote {
    private String value;

}

  

(4)请求后,微信返回的消息体

 

@Data
public class SendTemplateResponse {
    /**
     * 错误码
     * 0 ok
     * 40037 template_id不正确
     * 41028 form_id不正确,或者过期
     * 41029 form_id已被使用
     * 41030 page不正确
     * 45009 接口调用超过限额(目前默认每个帐号日调用限额为100万)
     */
    private int errcode;
    /**
     * 错误信息
     */
    private String errmsg;
}

 

 

 

 

三、实现代码

 

public void sendTemplate() {

    SendTemplateReq sendTemplateReq = new SendTemplateReq();

    //1、用户的 openid
    sendTemplateReq.setTouser("openid");
    
    //2、模板消息的id
    sendTemplateReq.setTemplate_id("小程序启用模板的模板id");
    
    //3、formid
    sendTemplateReq.setForm_id("小程序传给后台的formid,七天有效");
    
    //4、点击模板跳转页面
    sendTemplateReq.setPage("");
    
    //5、Data,按次序,只能叫keyword1、2、3
    DoctorReplyMsgData replyData = new DoctorReplyMsgData();
    KeyNote keyword1 = new KeyNote();
    keyword1.setValue("小程序显示的消息字段1");
    replyData.setKeyword1(keyword1);
    KeyNote keyword2 = new KeyNote();
    keyword2.setValue("小程序显示的消息字段2");
    replyData.setKeyword2(keyword2);
    sendTemplateReq.setData(replyData);
    //如上...总共五个字段
    
    //6、获取token
    String token = "token,俩小时有效";
    
    //7、模板url拼接上token,最上面的请求的url那样
    String url = "TemplateUrl" + "token";
    //8、请求体转为json
    String reqStr=JsonUtil.ModelToGson(sendTemplateReq);
    
    //9、发送httpclient请求
    String resultStr = httpRequestUtil.doPost(sb.toString(), reqStr);
    
    //10、接收返回的消息体:是否成功,成功返回0
    SendTemplateResponse sendTemplateResponse = (SendTemplateResponse)JsonUtil.GsonToModel(resultStr,SendTemplateResponse.class);
    if(sendTemplateResponse.getErrcode() == 0){
        //"推送成功!"
    }
}

 

1、openid:通过jsCode获取的

2、formid:小程序端传过来的

3、Template_id:小程序设置模板时带的

4、data:对象类型

5、token:调用接口获取token

 

转载于:https://www.cnblogs.com/Donnnnnn/p/11152886.html

### 使用Java实现微信小程序消息推送 为了通过Java实现微信小程序发送消息的功能,开发者需遵循特定流程并利用HTTP客户端库来构建和发送HTTPS POST请求给微信公众平台接口。此过程涉及创建模板消息对象、将其序列化为JSON字符串以及执行网络调用。 #### 创建模板消息对象 首先定义一个类`SendTemplateReq`用于封装待发送的信息字段,这些字段应匹配官方文档所规定的参数[^2]: ```java public class SendTemplateReq { private String touser; private String template_id; private String page; private Map<String, Object> data; // Getters and Setters... } ``` #### 序列化为JSON格式 接着使用工具方法将上述实例转换成JSON形式的数据包,以便于后续作为POST请求体的一部分提交至服务器端口。这里假设存在名为`JsonUtil`的帮助函数可以完成此类操作[^1]: ```java // 假设已经初始化好了sendTemplateReq对象 String reqStr = JsonUtil.ModelToGson(sendTemplateReq); ``` #### 发送HTTP请求 最后一步就是实际发出带有认证信息(access_token)的API调用了。这通常借助Apache HttpClient或其他类似的第三方库来进行处理。下面给出了一段简单的代码片段展示如何设置URL路径、添加必要的头部信息,并最终获取响应结果: ```java import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import java.io.IOException; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN"); post.setHeader("Content-Type", "application/json"); post.setEntity(new StringEntity(reqStr)); try (CloseableHttpResponse response = httpClient.execute(post)) { System.out.println(response.getStatusLine().getStatusCode()); } catch (IOException e) { e.printStackTrace(); } ``` 请注意,在真实环境中应当替换掉示例中的`ACCESS_TOKEN`占位符为有效的访问令牌值,该值可通过OAuth机制或者其他方式获得。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值