如何实现微信小程序模板消息推送服务教程-徽乐汇

关于微信小程序模板消息实现的方法,网上已经有不少的教程,我就没有必要的写多么详实的内容。只不过,上一次在创建模板消息获取凭证的时候,总是不能成功,最后才发现,report-submit 忘记了加上造成花费了许多时间去找原因,多么痛的领悟!想着也很久没有写教程笔记了,抽时间做个记录。

一、了解什么是模板消息

了解模板消息,我们可以来看看微信开发文档的说明。

基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。

- 模板推送位置:服务通知

- 模板下发条件:用户本人在微信体系内与页面有交互行为后触发,详见 [下发条件说明]

- 模板跳转能力:点击查看详情仅能跳转下发模板的该帐号的各个页面

模板消息即是通过微信的服务通知下发的消息,在某种条件下,用户收到的通知消息。服务通知的消息与微信服务号,或者朋友对话收到的通知是一样的,出现在聊天列表中。与微信公众号的订阅号不同,订阅号是被折叠的。

二、如何使用模板消息

首先,需要选择合适的模板消息 ID 。

模板消息 ID 的选择和获取,这里就不多讲,不清楚的可以访问微信开发文档了。小程序模板消息 ID ,登录 https://mp.weixin.qq.com 后台的模板消息处进行选择。

其次,需要获取推送消息的 formId 。

微信开发文档中说:页面的 <form></form> 组件,属性 report-submittrue 时,可以声明为需要发送模板消息,此时点击按钮提交表单可以获取 formId,用于发送模板消息。意思就是获取 formId 必须要在表单提交的状态下才可以。

举个例子:比如艾码汇小程序需要对发表话题的帖子进行消息推送,主要目的是在帖子通过审核的时候,发送消息通知作者。

1. 创建发表话题的表单


<form bindsubmit="add" report-submit="true">
  ……此处为表单相关内容 …..
  <button>立即提交</button>
</form>

表单中的 report-submit 必须存在,而且必须是 true 。一定不要忘了!!!

2. 提交表单的时候,需要存储 formId


const add = function (e) {
  let formid = e.detail.formId
  ……此处为表单动作函数…...
}

把获取的 formid 传送到服务器进行存储。注意:开发工具状态下 formid 是无效的,必须是真机调试或体验版和正式版才能生效。

三、调用接口下发模板消息

1. 获取调用接口凭证 access_token

通过 GET 方式获取接口凭证,请求地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 其中需要两个参数,分别是小程序的 appid 和 appsecret 。小程序的 appid 可以在微信小程序后台开发选项中直接看到,appsecret 则需要生成。

WordPress 获取 access_token 可以通过 PHP 函数 file_get_contents($url) 进行获取页面内容 。


$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
$content = file_get_contents($url);
$token = json_decode($content);
$access_token = $token->access_token;

这样就获取了调用接口凭证。

2. 发送模板消息

通过小程序的 appid 和 appsecret 获取了调用接口凭证,接下来就要通过 POST 方式把数据进行封装推送给用户了。请求地址:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN其中 accsess_token 就是上面的接口凭证。

下发模板消息必须的参数分别有:access_token(接口凭证),touser(接收消息的用户 openid),template_id(模板消息 ID),form_id(消息凭证)。另外其他参数非必须,但是,如果没有 data 数据,那么用户接收到的将会是空模板消息。至于 data 数据,则根据模板消息选取的关键词进行设置。比如以评论消息模板为例,选择三个关键词,分别是:回复者,回复内容,回复时间。


$data = array( 
​  "keyword1" => array( "value" => "小明" ),
  "keyword2" => array( "value" => "这是回复内容哦" ),
  "keyword3" => array( "value" => "2019-03-23 20:34:06" )
);

3. 推送消息动作

以 PHP 为例,使用 Curl 方式进行消息推送动作。注意:服务器需要支持 Curl 扩展。


function get_content_by_curl($url,$post_data=array(),$header=array()) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, ​$url);
  curl_setopt($ch, CURLOPT_HTTPHEADER, ​$header);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
​  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
​  curl_setopt($ch, CURLOPT_POST, 1);
​  curl_setopt($ch, CURLOPT_POSTFIELDS, ​$post_data);
  curl_setopt($ch, CURLOPT_TIMEOUT, 500);
​  curl_setopt($ch, CURLOPT_AUTOREFERER,true);
  $content = curl_exec(​$ch);
  $info = curl_getinfo(​$ch,CURLINFO_EFFECTIVE_URL);
  $code = curl_getinfo(​$ch,CURLINFO_HTTP_CODE);
​  curl_close($ch);
  if($code == "200") {
​    return $content;
​  } else {
​    return null;
​  }
}

$url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=".​$token->access_token;
$header = array("Content-Type: application/json;charset=UTF-8" );
get_content_by_curl($url,json_encode($data),$header);

这样就执行了 POST 模板消息数据了。

四、最简单的推送服务

如果觉得搞一个小程序推送服务很麻烦,其实,可以使用 vPush 推送服务,简单,易用,可创建推送接口,而且,不要求小程序后端是什么框架都可以接入。vPush 推送服务是古人云 小程序开发的推送服务系统,支持小程序查看推送任务。有需要的可以联系我(微信号:e80111947),定制小程序推送接口服务。订阅会员也可以找我哦,可以享受九折优惠!