微信开发 - 推送模板消息

微信模板消息推送

微信模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

那么,如何通过模板消息接口发送模板消息。大概分为三个部分:

  1. 申请模板消息功能插件
  2. 构造模板消息体
  3. 发送模板消息

一、申请添加模板消息功能插件

模板消息只对认证的服务号开放。

在微信公众平台的后台,依次进入“功能->添加功能插件->模板消息”,即可申请模板消息。

微信开发 - 推送模板消息

 点击申请

微信开发 - 推送模板消息
 

申请时,需要选择公众账号服务所处的2个行业,每月可更改1次所选行业,并且账号仅可使用所属行业中相关的模板

微信开发 - 推送模板消息
提交,等待申请通过后,可在模板库中看到模板消息列表

微信开发 - 推送模板消息
进入想要使用的模板,点击添加


微信开发 - 推送模板消息
添加后就存放到“我的模板”库中了

微信开发 - 推送模板消息
 查看模板的详情,可以看到模板的id及各项内容参数名


微信开发 - 推送模板消息
不同的模板消息的内容结构不一样。这些ID及字段名将在程序中使用到。

当然,如果在模板库中找不到自己所需模板,可在模板库列表页点击右边的“帮助我们完善模板库”,自定义模板。

微信开发 - 推送模板消息
 

阅读《模板消息申请添加前必读指引》后,点确认,进入添加自定义模板页,每月只能自定义三个模板

微信开发 - 推送模板消息
点击下一步等待审核,审核通过后就可以使用自定义的模板

二、构造模板消息体

以一个信用卡还款提醒的模板为例,它的内容如下:

微信开发 - 推送模板消息
并根据微信模板消息接口,可知POST请求参数格式如下:

微信开发 - 推送模板消息
按照上述内容及格式,构造模板消息体如下:

def templateData()
{
    def data = [:]
    data.put("first", [value: "尊敬的张三,您名下的:"])
    data.put("OPERATE", [value: "招商银行", color:"#173177"])
    data.put("AMT", [value: "1234", color:"#173177"])
    data.put("STATUS", [value: "13日", color:"#173177"])
    data.put("DATE", [value: "1234元", color:"#173177"])
    data.put("REMARK", [value: "备注:请及时还款,避免逾期"])
    
    def templateData = [:]
    templateData.put("touser", "ovBRNwCc6wigvmThgCEEOh7lRwMY")
    templateData.put("template_id", "hLIrwUMBOq0Er3AmhxUTCp_aOGk-uJnjVYgKSnRSSSg")
    templateData.put("url", "")
    templateData.put("data", data)
    return templateData
}

其中,touser 为要推送者的openid,template_id为所选消息模板的id

三、发送模板消息

模板消息是使用access_token作为授权来发送

获取access_token值,请参照:http://hellolove.iteye.com/blog/2333874

def sendMessage()
{
    def accessToken = getAccessToken()
    def templateData = templateData()
    def params = JsonOutput.toJson(templateData)

    String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN"
    requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken)
    URL url = new URL(requestUrl)
        
    HttpURLConnection connection = (HttpURLConnection) url.openConnection()
    connection.setDoOutput(true)
    connection.setRequestMethod("POST")
    connection.setRequestProperty("Content-Type", "application/json")
    connection.outputStream.withWriter { Writer writer -> writer.write params }
    
    if (connection.getResponseCode() == 200)
    {
        def result = connection.inputStream.withReader { Reader reader -> reader.text }
        return result
    }
    else
    {
        return 0
    }
}

调用发送方法,实现效果如下如示:


微信开发 - 推送模板消息
 

参考文档:

https://mp.weixin.qq.com/wiki/5/6dde9eaa909f83354e0094dc3ad99e05.html

http://www.cnblogs.com/txw1958/p/wechat-template-message.html
 

相关推荐