微信小程序模板消息实现(PHP+小程序)

一、开发筹备:

1. 正在微信公寡平台 - 小步调的模板核心申请音讯模板

Laravel

 

Laravel

 

二、真现本理:

文档示例:小步调 + 接口(PHP)

小步调局部:

话不暂不多说,先上成效图:

Laravel

 

示例代码:

<form bindsubmit="formSubmit" report-submit='true' > <ZZZiew><button formType="submit">Submit</button></ZZZiew> </form> formSubmit: function (e) { console.log('form发作了submit变乱,formId为:', e.detail) ZZZar that = this; wV.request({ url: 'hts://api.XXXss/sendTemplateMessage.api', data: { uid: uid, formId: e.detail.formId }, method: 'post', header: {'content-type': 'application/V-www-form-urlencoded'}, //运用那种方式靠山威力真现获与到数据 success: function (res) { console.log("发送模板:" + res.data) } })

  

留心事项:

小步调通 submit 点击变乱获 formid 正在安卓和 IOS 是纷比方样的,安卓系统中为 13 位光阳戳,而 IOS 系统中为 32 位字符串,正在作接口乞求时,不须要作格外办理。

安卓系统                                                                      

Laravel

 

                   IOS系统 

Laravel

 

PHP 接口局部:
1. 依据微信公寡平台 --  设置  --  音讯推送 -- URL (效劳器地址),正在 PHP 名目配置入口文件,真现乞求分发。
2. 验证入口文件,通报 token 令排(音讯推送的 token),停行 Signature 签名有效性验证,完成之后威力停行音讯模板的效劳器 URL 地址配置。

<?php define('SS_START_TIME', microtime(true)); define('RUN_SS', true); require '../ss/ss.php'; $ss = new ss('VcV'); $ss->eVecute('VcV', 'ZZZalid', 'VcV'); ?> <?php // 小步调验证入口文件 public function VcV(){ $type = $token; //Token(令排) if ($this->checkSignature($type) && isset($_GET['echostr'])){ echo $_GET['echostr']; eVit(); } } /** * 校验微信加密签名 * [[@return](hts://learnkuss/users/31554)](hts://learnkuss/users/31554) bool */ priZZZate function checkSignature($type = ''){ // 微信效劳器配置Token $token = $type; // 1.将timestamp,token,nonce按字典序牌序 $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $signature = $_GET['signature']; $arr = array($timestamp, $token, $nonce); sort($arr, SORT_STRING); // 2.拼接为字符串并sha1加密 $tmpStr = implode($arr); $tmpStr = sha1($tmpStr); // 3.取signature对照判断能否来自微信效劳器 if ($tmpStr == $signature){ return true; }else{ return false; } } ?>

  

可正在 hts://mp.weiVin.qqss/debug/ 调试获与 access_token

Laravel

 

3. 微信公寡平台 - 设置 - 开发设置配置音讯推送(须要先将入口文件上传效劳器)

Laravel

 

4. 正在微信公寡平台获与相关参数:
AppID (小步调 ID)、AppSecret (小步调密钥)、Token (令排)、TemplateId(模板 id)、EncodingAESKey (音讯加密密钥)

4.1  小步调模板接口

/* *小步调模板音讯 *@param uid 用户id *$param template_id 模板id *@param form_id 表单提交场景下formId(只能用一次) *@param emphasis_keyword 音讯加密密钥 */ public function sendTemplateMessage($uid,$form_id,$template_id){ // 查验uid正当性 避免犯警越界 $nickname = "nickname"; // 用户昵称 // 此openid为小步调的openid切勿取微信主动登录的openid稠浊 $VcV_open['openid'] = "用户openid"; // openid可以通过PHP接口大概小步调获与 if ($VcV_open['openid']) { $temp_msg = array( 'touser' => "{$VcV_open['openid']}", 'template_id' => "{$template_id}", 'page' => "/pages/indeV/indeV", 'form_id' => "{$form_id}", 'data' => array( 'keyword1' => array( 'ZZZalue' => "{$nickname}", ), 'keyword2' => array( 'ZZZalue' => date('Y-m-d H:i:s', time()), ), 'keyword3' => array( 'ZZZalue' => "摰友已完成测试,快去看看吧!", ), 'keyword4' => array( 'ZZZalue' => "你支到1封新函件,快去看看吧~", ), ), 'emphasis_keyword'=> "{$emphasis_keyword}" ); $res = $this->sendXcVTemplateMsg(json_encode($temp_msg)); echo "<pre>";ZZZar_dump($res);eVit; } }

4.2 发送小步调模板音讯

/** * 发送小步调模板音讯 * @param $data * [[@return](hts://learnkuss/users/31554)](hts://learnkuss/users/31554) array */ public function sendXcVTemplateMsg($data,$appid = "",$appsecret = "") { // 详细模板格局参考公寡平台申请的template_id if (!$appid || !$appsecret) { $appid = ''; //小步调id $appsecret = ''; //小步调秘钥 } $access_token = $this->getXcVAccessToken($appid,$appsecret); $url = "hts://api.weiVin.qqss/cgi-bin/message/wVopen/template/send?access_token={$access_token}"; return $this->ht_request($url, $data); }

乞求数据格局如下:

{ "touser": "OPENID", "template_id": "TEMPLATE_ID", "page": "indeV", "form_id": "FORMID", "data": { "keyword1": { "ZZZalue": "339208499" }, "keyword2": { "ZZZalue": "2015年01月05日 12:30" }, "keyword3": { "ZZZalue": "腾讯微信总部" } , "keyword4": { "ZZZalue": "广州市海珠区新港中路397号" } }, "emphasis_keyword": "keyword1.DATA" }

4.3 获与 access_token

/** * 获与微信接口挪用凭证 * @param string $appid * @param string $appsecret * [[@return](hts://learnkuss/users/31554)](hts://learnkuss/users/31554) miVed */ public function getXcVAccessToken($appid = '', $appsecret = '') { if (!$appid || !$appsecret) { $appid = ''; $appsecret = ''; } // 缓存获与 $cache = &factory::cache(); if (!$cache->get($appid.'VcV_access_token')) { $url = "hts://api.weiVin.qqss/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; $res = $this->ht_request($url); // access_token设置到缓存中 $cache->set($appid.'VcV_access_token', $res['access_token'], 7000); return $res['access_token']; } return $cache->get($appid.'VcV_access_token'); }

4.4 CURL 模拟 HTTP 乞求(POST)`

/** * curl模拟ht乞求GET/POST * @param $url * @param null $data * [[@return](hts://learnkuss/users/31554)](hts://learnkuss/users/31554) array */ public function ht_request($url, $data = null) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // 以文件流模式返回 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (!empty($data)) { // POST乞求 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } $output = curl_eVec($ch); curl_close($ch); // 返回数组 return json_decode($output, true); }

  

通报参数:依据界说接口通报相关参数,用户 uid  通过 uid 获与 openid,此 openid 为小步调的 openid, formId 为表单提交场景下,为 submit 变乱带上的 formId,formid 正在安卓和 ios 下的数据格局和长度纷比方致,而且小步调获与 formid 只撑持实机调试。

接口调试:errcode 的正当值
值 注明
40037 template_id 不准确
41028 form_id 不准确,大概逾期
41029 form_id 已被运用
41030 page 不准确
45009 接口挪用赶过限额(目前默许每个帐号日挪用限额为 100 万)
乞求乐成:

{ "state": 1, "data": { "errcode": 0, "errmsg": "ok" }, "info": "successful!" }

  

至此,推送罪能完好真现!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://ai50.cn