微信小程序> 微信小程序-----消息模版(最全解释)

微信小程序-----消息模版(最全解释)

浏览量:831 时间: 来源:醉卧码场君莫笑

最近小程序在码界里嫌弃腥风血雨,每一个码奴都感觉世界给自己又多开一个扇窗,本菜鸟也眼红不已,就尝试着写了一个小程序,今天跟大家分享一下自己在写消息模版时候遇到的坑,希望能帮助每一位路过踩坑的道友;

文章目录

    • 1.写小程序消息模版第一步:配置消息推送
    • 2.消息模板
    • 3.发送模板消息

1.写小程序消息模版第一步:配置消息推送

1.1 登录微信公众平台,选择左侧侧边栏==>设置==>开发设置==>消息推送==> 启用
小程序
1.2 配置消息推送

url:小程序使用URL与小程序接口同;例如:https://www.1314520.com/api/checkSiginature

Token(令牌): 自己定义Token值;要与后端代码中Token同

EncodingAESKey:随机生成就好,自定义也可

消息加密方式:简易兼容模式

数据格式:JOSN与XML根据个人习惯

后端php 验证代码如下:

private function checkSignature(){    $signature = $_GET["signature"];    $timestamp = $_GET["timestamp"];    $nonce = $_GET["nonce"];     $token = TOKEN;    $tmpArr = array($token, $timestamp, $nonce);    sort($tmpArr, SORT_STRING);    $tmpStr = implode( $tmpArr );    $tmpStr = sha1( $tmpStr );     if($tmpStr == $signature){        return $_GET['echostr']    }else{        return false    }}

小程序

2.消息模板

2.1.申请新消息模板

消息模板只有在我的模板中才可以使用,首先我们可以根据自己需求在模板库中查找适合自己的,如果没有,就申请新的模板,选择模板时要注意,至少选择两个参数

小程序
2.2.选用已存在的模板
小程序

3.发送模板消息

模板消息不能根据自己的想法任意发送,使用一个触发性事件;有两种情况触发
1.表单提交(获取formid)
2.支付(获取prepay_id)

3.1 获取模板ID
(1)通过模版消息管理接口获取模版ID(详见模版消息管理)
(2)在微信公众平台手动配置获取模版ID(模块2.2,点击我的模板==>点击详情==>点击复制或手动复制写入代码中)
3.2 获取formId 或 prepay_id

页面的  组件,属性report-submit=true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。
注意:因为我们是在开发者工具中测试,所以得到的formId值为the formId is a mock one。在真机中我们可以得到一个具体的值,利用该值结合其他参数就可以发送模板消息啦,所以测试真实场景务必在真机中测试

<form bindsubmit="formSubmit" report-submit='true'>  <view class="section">    <view class="section__title">input</view>    <input name="input" placeholder="please input here" />    <view>{{san}}</view>  </view>  <view class="btn-area">    <button formType="submit">Submit</button>  </view></form>
  formSubmit: function (e) {//获取formId    console.log(e.detail.formId);  },

3.3 调用接口下发模板消息
小程序
解释官方文档参数:
1.touser 用户在登录小程序获取,用户在小程序的唯一标示------openid
2.template_id  所需下发的模板消息ID(模块3.1获取的模板ID)
3.page 点击模板卡片后跳转的页面
4.form_id 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id(模块3.2获取)
5.data 模板内容,不填下发为空,对应模板消息参数
6.color 模板内容颜色(非必填)
7.emphasis_keyword 模板需要放大的关键词,不填则默认无放大(非必填)
以php代码为例,啥都不说。。。。放码过来:

获取小程序token

    private function getToken()    {        $appid = '小程序appid';        $secret = '小程序secret';        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";        return $data = $this->curlGet($url);    }

通过post请求发送消息模板

    private function getHttpArray($url,$post_data) {        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //没有这个会自动输出,不用print_r();也会在后面多个1        curl_setopt($ch, CURLOPT_POST, 1);        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);        $output = curl_exec($ch);        curl_close($ch);        $out = json_decode($output);        return $out;    }

通过get请求发送消息模板

    private function curlGet($url) {        //1.初始化Curl        $curl = curl_init();        //设置curl传输选项        curl_setopt($curl, CURLOPT_URL, $url);//访问ip地址        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//设置为FALSE 禁止 cURL 验证对等证书        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置为1或true时,获取的信息以字符串返回        $data = curl_exec($curl); //返回值        curl_close($curl);        $out = json_decode($data,true);        return $out;    }

发送模板消息

 public function smallWXmessage() {$data = <<<END{  "touser": "OPENID",  "template_id": "TEMPLATE_ID",  "page": "index",  "form_id": "FORMID",  "data": {      "keyword1": {          "value": "339208499"      },      "keyword2": {          "value": "2015年01月05日 12:30"      },      "keyword3": {          "value": "粤海喜来登酒店"      } ,      "keyword4": {          "value": "广州市天河区天河路208号"      }  },  "emphasis_keyword": "keyword1.DATA"}END;    $access = json_decode($this->getToken(),true);  //获取token    $access_token= $access['access_token'];    $url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" . $access_token;$data = $this->getHttpArray($url,$data);  //post请求urlreturn $data;}

php中<<<END END定义字符串要注意,
1.以<<<END开始标记开始,以END结束标记结束,结束标记必须**顶头写**,不能有缩进和空格,且在结束标记末尾要有分号 。
2.开始标记和开始标记相同;但是不只限于END;比如常用大写的EOT、EOD、EOF来表示
3.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。

好了,我们去请求一下试试,哇,哇,成功了,舒服。。。。。。看图
小程序

好;我们现在已经成功发送了一个小程序消息,
但是我想无线发送小程序模板消息可不可以呢?
答案:在巨大的限制下是可以实现的
限制1: 小程序发送消息必须由表单提交事件获取formid或者支付prepay_id才能推送
限制2: formid、prepay_id的有效期都是7天,也就是说超过7天后,formid失效无法再发送。
限制3: 一个formid有效期内只能发送一条模板消息给用户,一个prepay_id有效期内只能发送三条模板消息给用户
实现方式:当用户使用小程序时,产生的formid、prepay_id我们根据用户id进行存储,如果用户活跃的情况下,我们可以实现无线发送小程序模板消息

希望能帮助每一个愿意在程序世界遨游的道友,喜欢的小伙伴可收藏,感谢您的观赏
不对的地方还希望多多批评和指出

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎