小程序开发——消息推送

1.去小程序公众平台配置消息推送

开发工具——开发设置——消息推送

2.先来讲url和token怎么配置

我们的url的配置可以根据你的服务器地址来配置,我是先创建了一个Wxservlet,然后在这个里面创建了一个dispose接口,代码如下:


@WebServlet(urlPatterns = "/wx")
public class WxServlet extends HttpServlet {
    // 与接口配置信息中的Token要一致
    private static String WECHAT_TOKEN = "";//这个token是可以自己取的,随便取一个,我取的就不打出来了

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("来自微信服务器的配置请求");
        doPost(request,response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("来自微信服务器的配置请求");
        response.setHeader("Access-Control-Allow-Origin", "*");//允许所有域名访问
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String result = null;
        String op = request.getParameter("op");
        switch (op) {
            case "dispose"://配置
                result = dispose(request);
                break;
        }

        PrintWriter out = response.getWriter();
        out.print(result);
        out.flush();
        out.close();
    }

    //配置
    private String dispose(HttpServletRequest request) {
        boolean isGet = request.getMethod().toLowerCase().equals("get");
        if (isGet) {
            String signature = request.getParameter("signature");// 微信加密签名
            String timestamp = request.getParameter("timestamp");// 时间戳
            String nonce = request.getParameter("nonce");// 随机数
            String echostr = request.getParameter("echostr");// 随机字符串
            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
            if (signature != null && SignatureUtil.CheckSignature(signature, timestamp, nonce)) {
                System.out.println("接入成功");
                return echostr;
            }
        }
        return ReturnResult.fail("接入失败");
    }
}

所以根据这个我们就可以配置出url地址

然后就是token,刚刚在上面的代码中我们随便取了一个token,此时我们应该保持上述代码中的token与页面中的token一致

然后剩下的三个就跟上面图片中的一样就可以了

3.配置好了url了之后就可以去申请模板id了

模板消息——我的模板中创建一个模板消息,获取模板ID,因为我申请的是一个简历投递通知模板,所以就直接这样举例子说明了

4.接下来就是后台的代码问题了,java后台创建小程序 Msg类,用于封装传送的参数

可以先建立一个Msg.java,方便后续的模板添加时可以直接继承部分属性

package wx.Msg;

public class Msg {
    protected String openId;//接收者openId
    protected String template;//模板编号
    protected String page;//点击消息后的调整页面
    protected String miniprogram_state;//小程序状态
    protected String lang;//语言

    public Msg(String openId, String template, String page) {
        this.openId = openId;
        this.template = template;
        this.page = page;
        this.miniprogram_state = "developer";
        this.lang = "zh_CN";
    }

}

我申请的模板如下:

5.java后台创建发送消息推送类

这里用一个例子来说明:就是当我将职位进行修改时,需要推送一条消息告知管理员来审核职位,所以我们可以创建一个方法MsgJobCheck来继承Msg方法,与此同时,我申请的模板如下:

注意:标出来的红框中的内容下面的java代码要与之对应,java代码可以直接拿去用,要和上面的Msg类一起用哦

//职位待审核通知
public class MsgJobCheck extends Msg {
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    private static final String TEMPLATE_ID = "YihxmDIFpduzM6d8Wgvs2vKeVshkfE7ab10Cr6DO4Dk";//改成你的模板id

    private static final String PAGE = "homepage";
    private String name;//申请人(模板中有几个字段就定义几个字段)
    private String date;//申请时间

    public MsgJobCheck(String openId, String name) {
        super(openId, TEMPLATE_ID, PAGE);
        this.name = name;
        this.date = sdf.format(new Date());
    }
    @Override
    public String toString() {
        JSONObject json1 = new JSONObject();
        JSONObject json4 = new JSONObject();
        json1.put("value",name);
        json4.put("value",date);

        JSONObject data = new JSONObject();
        data.put("thing1",json1);//与红框当中的一一对应,顺序也要一模一样,字段名改成你的模板中的字段名
        data.put("time4",json4);//这个也一样

        JSONObject json = new JSONObject();
        json.put("touser",openId);
        json.put("template_id",template);
        json.put("page",page);
        json.put("miniprogram_state",miniprogram_state);
        json.put("lang",lang);
        json.put("data",data);
        return json.toJSONString();
    }
}

这个时候后台推送消息的java类已经写好了,然后我们可以在我们需要推送订阅消息的地方加上下面这段代码:

//向管理员推送通知
String openId = "oiAtA5eZ9Z1EhF7GbM8xcVjIzcxw";//管理员的openid
System.out.println("openId:"+openId);

if(openId!=null && !openId.isEmpty()) {
   MsgJobCheck msg = new MsgJobCheck(openId, title);//创建了一个MsgJobCheck方法来推送订阅消息

   WxAPI.sendSubscribeMsg(msg.toString());
}

现在后台的已经全部完成,我们现在需要写出前台的代码

首先先做一个按钮可以让用户订阅消息,wxml代码如下:

<view class="panel_setting">
    <view style="margin:10px auto; width:100%" class="curriculum_open">
      <view >为了您可以及时收到用人单位发送给你的消息,请订阅消息</view>
    </view>
    <view style="margin:10px auto; width:75px">
			<form bind:submit='subscribe'>//给按钮绑定事件
    		<button formType='submit' class="submit" size="mini">订阅</button>   
			</form>	  
    </view>
</view> 

然后当点击按钮时触发订阅消息事件,js中代码如下:

//订阅消息
    subscribe:function(){
      wx.requestSubscribeMessage({
        tmplIds: ['PNGt1HARIL3cf759eQKZHAfWILWN8ScgbpI2bKOptjA','YihxmDIFpduzM6d8Wgvs2vKeVshkfE7ab10Cr6DO4Dk'],//订阅消息模板Id,可以有多个
        success:function (res) {
          console.log('订阅成功');
        },
        fail:function(res){
           console.log(res);
        }
      })
    },

wxss代码如下(这段代码可能不完整,你们需要自己去调整一下):

.panel_setting{
  border: 1px #b0b0b0 solid;
  border-radius: 8px;
  margin: 5px;
}

.curriculum_open{
  font-size: 13px;
  text-align:center;
}

这个时候我们就可以实现最终效果了,如图:

这里需要注意的是我这个openid是写死的,如果想要获取的话是要通过当前登录用户id来拿到所对应的openid,其次,这个订阅消息是你允许一次,然后也只能推送一次

推送成功效果如下:

之后我申请的一个模板中有phrase字段,我刚开始并不知道这个字段还有长度限制,于是就写了很多个字,然后一直不能发送成功,调试发现,报错了,是47003错误,一去百度发现,原来是字数限制问题,记下来作为一个教训,这张图片真的很重要!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值