微信开发之发送消息接口

发送消息,是指用户公众号向用户发送相应形式的消息。根据微信开发文档,由以下四种形式:被动回复,群发接口,客服消息接口以及模板消息接口。本文将基于Java语言以及个人微信测试号,说明被动回复、客服消息接口以及模板消息接口的使用实现,群发接口并未涉及。
1. 被动回复
被动回复只能应用于在接收到用户的互动数据之后,才能向用户发送消息。这一部分较为简单,正式进行微信开发的第一步就是,在公众号中基本配置->服务器配置中设置URL(服务器地址)时,这时该URL链接指定的地址就是对应着Java Web下的一个Servlet,配置好对应的Token及相关参数之后,则微信服务器将会将所有的用户与公众号的互动信息都转发到该Servlet,然后开发者根据接收到的用户互动数据,再进行处理。所谓的被动回复,就是在该Servlet中判断接收到你指定的消息时(例如某个字眼),则直接将想要回复的消息打包成官方指定的XML数据格式,写回到输出流中即可。在这里不过过多解释,如下示例代码:

response.getWriter().write( MessageUtil.MessageToXML(new TextMessage.Builder(fromUserName,toUserName,new Date().getTime(),"最新资讯请查看下方微信菜单栏,谢谢您的关注").build()));

2.客服消息接口
客服消息接口,应用于公众号主动向特定用户(必须满足该用户在48小时内与公众号有交互)发送特定格式的消息,应用场景例如:用户在微页面上完成了抽奖,而这时候公众号主动向用户推送中奖信息。所回复的不同消息的格式,参见开发者文档,下面以回复文本消息作为示例,需要注意的是推送的消息data必须满足json格式,请求类型为post。返回的json数据中,若errorcode为0,则代表推送成功。

 //推送中奖消息
        String data = "{"+
                "\"touser\":\""+openid+"\","+
                "\"msgtype\":\"text\","+
                "\"text\":"+
                "{"+
                "\"content\":\""+content+"\""+
                "}"+
                "}";
        System.out.println(data);
        String reMsg0 = UrlReqUtil.post("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+access_token,data);
        JSONObject jsonObject = JSONObject.fromObject(reMsg0);
        if(0 != (Integer) jsonObject.get("errcode")) throw new RuntimeException("通知用户失败");

3.模板消息接口
模板消息接口的使用场景大体与客服消息接口一致,只是不需要证明对象用户“在线”,即48小时内与当前公众号有交互记录,因而应用范围更为广泛。在具有权限的服务号中使用该接口时,需要向系统申请对应模板,并得到模板号,作为调用凭据。在测试号环境下,则需要自定义模板。例如:
这里写图片描述
其中模板内容需要严格遵循指定的格式,即在需要调用才填入的变量值的定义方式为:{{xxxx.DATA}},其中“xxxx”为调用时对应的字段名。
以下是调用代码:jsonData数据部分遵循json数据格式。
其中touser:为用户在该公众号下的openid
template_id:为模板id
对于每个字段,包含两个值,一是value,即填入模板的具体值;二是color,即对应的字体颜色。
请求方式为post,判断是否成功同样是依据errcode字段,为0则成功。

        //推送模板消息
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String jsonData = "{" +
                "\"touser\":\""+openid+"\"," +
                "\"template_id\":\"maD2W1yaTvkXmh1dRjXEsMHUc9dDP8Xh1eANP***ig\"," +
                "\"topcolor\":\"#FF0000\"," +
                "\"data\":{" +
                "\"title\":{\"value\":\"恭喜您中奖啦\",\"color\":\"#173177\"}," +
                "\"nickname\":{\"value\":\""+nickname+"\",\"color\":\"#173177\"}," +
                "\"prizeLevel\":{\"value\":\""+rewardLevel+"\",\"color\":\"#173177\"}," +
                "\"prizeContent\":{\"value\":\""+ ConfigParamUtil.PRIZE_CONTENT.split(",")[rewardLevel]+"\",\"color\":\"#173177\"}," +
                "\"time\":{\"value\":\""+dateFormat.format(new Date())+"\",\"color\":\"#173177\"}," +
                "\"bonus\":{\"value\":\"10积分\",\"color\":\"#173177\"}}}";
        String reMsg1 = UrlReqUtil.post("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token,jsonData);
        JSONObject jsonObject = JSONObject.fromObject(reMsg1);
        if(0 != (Integer) jsonObject.get("errcode")) throw new RuntimeException("通知用户失败");

猜你喜欢

转载自blog.csdn.net/u013248535/article/details/53836859
今日推荐