微信小程序订阅消息后端开发,如何实现长尾词精准推送?

2026-04-03 10:571阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1154个文字,预计阅读时间需要5分钟。

微信小程序订阅消息后端开发,如何实现长尾词精准推送?

订购消息说明+订购消息是微信近期推出的一项功能,用来替代原有的模板消息(原有的模板消息即将下线)+订购消息的功能比模板消息有所提升,包括‘7天’的限制取消,同时具有‘一次性’和‘永久’的订购选项。

订阅消息说明

订阅消息是微信近期新出的一个能力,用来代替原有的模板消息(原有的模板消息即将下线)

订阅消息的功能较模板消息有所提升,"7天"的限制取消,同时有"一次性"和"永久"订阅.(功能上是这样说的,但是实际开发时发现"永久"订阅还是对小程序的服务类目有要求的,客户的小程序只支持"一次性"订阅)

官方通道:
小程序前端:点击进入
小程序服务端:点击进入

开发思路

用户在小程序内触发按钮或进行支付操作时前端调用订阅消息授权框,默认一次授权只能发送一次订阅消息
如果用户勾选"下次自动授权",下次将不再弹出授权框->点击按钮直接拥有一次发送订阅消息的机会,此处不需要模板消息的"formId",较之前更简单
经过测试,如果在小程序上多次点击触发授权的按钮,发送订阅消息的机会可以累加!!!
(如,1分钟内点击了10次按钮,后面将拥有10次发送订阅消息的机会,什么时候发都可以)

微信小程序订阅消息后端开发,如何实现长尾词精准推送?

代码实现(仅java后端)

实体类部分

1.TemplateParam.java

public class TemplateParam { private String key; private String value; public TemplateParam(String key,String value){ this.key=key; this.value=value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } }

2.Template.java

import java.util.List; public class Template { private String touser; private String template_id; private String page; private List<TemplateParam> templateParamList; public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public String getTemplate_id() { return template_id; } public void setTemplate_id(String template_id) { this.template_id = template_id; } public String getPage() { return page; } public void setPage(String page) { this.page = page; } public String toJSON() { StringBuffer buffer = new StringBuffer(); buffer.append("{"); buffer.append(String.format("\"touser\":\"%s\"", this.touser)).append(","); buffer.append(String.format("\"template_id\":\"%s\"", this.template_id)).append(","); buffer.append(String.format("\"page\":\"%s\"", this.page)).append(","); buffer.append("\"data\":{"); TemplateParam param = null; for (int i = 0; i < this.templateParamList.size(); i++) { param = templateParamList.get(i); // 判断是否追加逗号 if (i < this.templateParamList.size() - 1){ buffer.append(String.format("\"%s\": {\"value\":\"%s\"},", param.getKey(), param.getValue())); }else{ buffer.append(String.format("\"%s\": {\"value\":\"%s\"}", param.getKey(), param.getValue())); } } buffer.append("}"); buffer.append("}"); return buffer.toString(); } public List<TemplateParam> getTemplateParamList() { return templateParamList; } public void setTemplateParamList(List<TemplateParam> templateParamList) { this.templateParamList = templateParamList; } }

工具类部分

1.CommonUtil.java

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import net.sf.json.JSONObject; public class CommonUtil { public static JSONObject api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + 小程序的appid + "&secret=" + 小程序的Secret String result = HttpUtil.sendGet(url); JSONObject object=JSON.parseObject(result); String Access_Token = object.getString("access_token");

2.发送订阅消息

Template template=new Template(); template.setTemplate_id("填写小程序申请的订阅消息id"); template.setTouser("用户的openid"); template.setPage("pages/index/index"); List<TemplateParam> paras=new ArrayList<TemplateParam>(); paras.add(new TemplateParam("character_string2","000001")); paras.add(new TemplateParam("amount1","888.88")); paras.add(new TemplateParam("date3","2015年01月05日")); paras.add(new TemplateParam("thing4","请进入小程序查1看")); template.setTemplateParamList(paras); String requestUrl="api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN"; requestUrl=requestUrl.replace("ACCESS_TOKEN", Access_Token); System.out.println(template.toJSON()); net.sf.json.JSONObject jsonResult=CommonUtil.httpsRequest(requestUrl, "POST", template.toJSON()); if(jsonResult!=null){ System.out.println(jsonResult); int errorCode=jsonResult.getInt("errcode"); String errorMessage=jsonResult.getString("errmsg"); if(errorCode==0){ System.out.println("Send Success"); }else{ System.out.println("订阅消息发送失败:"+errorCode+","+errorMessage); } }

总结

1.本文阅读对象为初学者,所有各种工具类.jar包都粘出来了,直接复制即可使用
2.通过该功能的开发,发现小程序的通知类功能监管更加严格,必须用户授权才可以发订阅消息,同时用户可以更方便的取消订阅,所以建议开发者慎用此功能

到此这篇关于微信小程序订阅消息(java后端实现)开发的文章就介绍到这了,更多相关小程序订阅消息内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

本文共计1154个文字,预计阅读时间需要5分钟。

微信小程序订阅消息后端开发,如何实现长尾词精准推送?

订购消息说明+订购消息是微信近期推出的一项功能,用来替代原有的模板消息(原有的模板消息即将下线)+订购消息的功能比模板消息有所提升,包括‘7天’的限制取消,同时具有‘一次性’和‘永久’的订购选项。

订阅消息说明

订阅消息是微信近期新出的一个能力,用来代替原有的模板消息(原有的模板消息即将下线)

订阅消息的功能较模板消息有所提升,"7天"的限制取消,同时有"一次性"和"永久"订阅.(功能上是这样说的,但是实际开发时发现"永久"订阅还是对小程序的服务类目有要求的,客户的小程序只支持"一次性"订阅)

官方通道:
小程序前端:点击进入
小程序服务端:点击进入

开发思路

用户在小程序内触发按钮或进行支付操作时前端调用订阅消息授权框,默认一次授权只能发送一次订阅消息
如果用户勾选"下次自动授权",下次将不再弹出授权框->点击按钮直接拥有一次发送订阅消息的机会,此处不需要模板消息的"formId",较之前更简单
经过测试,如果在小程序上多次点击触发授权的按钮,发送订阅消息的机会可以累加!!!
(如,1分钟内点击了10次按钮,后面将拥有10次发送订阅消息的机会,什么时候发都可以)

微信小程序订阅消息后端开发,如何实现长尾词精准推送?

代码实现(仅java后端)

实体类部分

1.TemplateParam.java

public class TemplateParam { private String key; private String value; public TemplateParam(String key,String value){ this.key=key; this.value=value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } }

2.Template.java

import java.util.List; public class Template { private String touser; private String template_id; private String page; private List<TemplateParam> templateParamList; public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public String getTemplate_id() { return template_id; } public void setTemplate_id(String template_id) { this.template_id = template_id; } public String getPage() { return page; } public void setPage(String page) { this.page = page; } public String toJSON() { StringBuffer buffer = new StringBuffer(); buffer.append("{"); buffer.append(String.format("\"touser\":\"%s\"", this.touser)).append(","); buffer.append(String.format("\"template_id\":\"%s\"", this.template_id)).append(","); buffer.append(String.format("\"page\":\"%s\"", this.page)).append(","); buffer.append("\"data\":{"); TemplateParam param = null; for (int i = 0; i < this.templateParamList.size(); i++) { param = templateParamList.get(i); // 判断是否追加逗号 if (i < this.templateParamList.size() - 1){ buffer.append(String.format("\"%s\": {\"value\":\"%s\"},", param.getKey(), param.getValue())); }else{ buffer.append(String.format("\"%s\": {\"value\":\"%s\"}", param.getKey(), param.getValue())); } } buffer.append("}"); buffer.append("}"); return buffer.toString(); } public List<TemplateParam> getTemplateParamList() { return templateParamList; } public void setTemplateParamList(List<TemplateParam> templateParamList) { this.templateParamList = templateParamList; } }

工具类部分

1.CommonUtil.java

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import net.sf.json.JSONObject; public class CommonUtil { public static JSONObject api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + 小程序的appid + "&secret=" + 小程序的Secret String result = HttpUtil.sendGet(url); JSONObject object=JSON.parseObject(result); String Access_Token = object.getString("access_token");

2.发送订阅消息

Template template=new Template(); template.setTemplate_id("填写小程序申请的订阅消息id"); template.setTouser("用户的openid"); template.setPage("pages/index/index"); List<TemplateParam> paras=new ArrayList<TemplateParam>(); paras.add(new TemplateParam("character_string2","000001")); paras.add(new TemplateParam("amount1","888.88")); paras.add(new TemplateParam("date3","2015年01月05日")); paras.add(new TemplateParam("thing4","请进入小程序查1看")); template.setTemplateParamList(paras); String requestUrl="api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN"; requestUrl=requestUrl.replace("ACCESS_TOKEN", Access_Token); System.out.println(template.toJSON()); net.sf.json.JSONObject jsonResult=CommonUtil.httpsRequest(requestUrl, "POST", template.toJSON()); if(jsonResult!=null){ System.out.println(jsonResult); int errorCode=jsonResult.getInt("errcode"); String errorMessage=jsonResult.getString("errmsg"); if(errorCode==0){ System.out.println("Send Success"); }else{ System.out.println("订阅消息发送失败:"+errorCode+","+errorMessage); } }

总结

1.本文阅读对象为初学者,所有各种工具类.jar包都粘出来了,直接复制即可使用
2.通过该功能的开发,发现小程序的通知类功能监管更加严格,必须用户授权才可以发订阅消息,同时用户可以更方便的取消订阅,所以建议开发者慎用此功能

到此这篇关于微信小程序订阅消息(java后端实现)开发的文章就介绍到这了,更多相关小程序订阅消息内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!