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


     实现效果:

    下面要显示五个字段

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

    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

  • 相关阅读:
    [CSS] Showing horizontal scrollbar always for the table
    [Angular Unit Testing] Testing Component methods
    [Angular Unit Testing] Testing Services with dependencies
    Win7下unetbootin-windows-585工具制作Ubuntu12.04 U盘启动盘
    一个外行谈移动互联网产品的生与死
    unity 距离某天还有多久
    UI线程与worker线程
    关于 unity3d securityexception no valid crossdomain policy available 的错误解决方法
    小窍门:变更Windows Azure Websites自带的node.exe版本
    Windows SVN变更发送邮件通知(JAVA实现)
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/11152886.html
Copyright © 2020-2023  润新知