全网整合营销服务商

营销型网站+SEO优化+关键词快排=一站式服务

免费咨询热线:15959292472

[南昌专门做seo的公司]如何实现小程序发送服务通知

  如何实现小程序发送服务通知△-◁○?

  小程序给用户发送消息需要比较多的验证,刚刚遇到这个需求可能会花较长时间研究测试,所以从基础整理了一整套发送消息的逻辑▷▷★☆,为以后开发消息通知功能提供思路▪●,减少学习时间

  发送模板消息主要有以下几个部分

  

 

  一□□、获取access_token

  二、阿里地区日喀则市小程序制作公司[贵阳专业seo公司]微信小程序开发教程之增加mixin扩展,建立消息模板

  三、宁波市小程序开发哪家好获取form_id

  四、山西省小程序开发哪家好[南昌专门做seo的公司]发送消息通知

  五◆◆-、设定定时任务

  一、获取access_token

  

 

  向微信请求发送消息时,会需要到access_token,access_token相当于是小程序的身份证,虽然有appid和appsecret这2个证明,但是微信为了保证安全性●▲=▼,就用了access_token这个有时效的身份证明来验证,一条access_token只有2小时有效期,而且单个小程序1天只能请求1000次access_token▼●▪,所以我们需要一套逻辑来保证access_token的可用性

  

https://api□△▲=.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

 

  只需要向上面这个地址请求就可以返回对应的access_token

  根据这个接口,写如下方法

  

public function test(){
$appId = ''△▼•;
$appSecret = '▷■★;';
$token = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="▼○;.$appId."□☆;&secret="▼▼;●….$appSecret);
$token = json_decode($token);
$token = $token->access_token◇◇◆=;
db('token'•□▼;)->where('id'▽▽◆•,1)->update(['access_token'=>◆☆▪■;$token])▼▽;//覆盖上一条access_token
}

 

  再设置一个定时器每小时触发一次该接口,之后就可以随意取出肯定能用的token了

  

$token = db('▼•;token'★◁;)->▼■★○;find()■◆;
$token = $token['access_token'△•;];

 

  二、建立消息模板

  在小程序微信公众平台的左边栏有一个模板消息的选项卡,只需要按照文档添加一个模板消息,就可以得到对应的对应的模板ID,这一步基本都是网页自行操作,不作更多展示

  三、获取form_id

  微信为了防止小程序对用户进行过多消息通知◇▷…★,对消息通知进行了一个限制▪☆□,每发送一条消息通知,就需要一条form_id或者prepay_id

  prepay_id是用户在使用微信支付之后返回的Id,本文中不做详解

  form_id是与button绑定的Id,每当用户点击绑定过的button就会返回一条form_id,一条form_id的有效期是7天,且每个用户的form_id只能对该用户使用,所以我们需要一个专门的逻辑来保存和使用form_id

  

①设计form_id表结构
form_id有2个条件▷=▪◆,第一个是仅7天内有效,第二个是仅对创建form_id的用户有效,针对这2个要求建立如下表
创建时间用户id
idcreateTimeopenIdform_id
id作为主键自增不用解释
createTime作为找到过期form_id的标志▪★=,设置定时任务,删除过期form_id
openId用来找到用户自己的form_id来使用
②取到form_id
<!--pages/index/index△★◇.wxml-->
<▽□◆◁;form report-submit='ture' bindsubmit='form_id'>
 <△◆●;button form-type="submit">确定</button>
<★◆△■;/form>
// pages/index/index.js
form_id: function(e) {
 wx.request({
 url: 'test.com/index/index/form_id'▲◆;,//自行替换接口
 method: "•=;POST"◁▼▲●,
 data: {
 form_id: e◁●▪▼.detail.formId,
 openId: openId//自行获取当前用户openId
 }=★…●,
 header▪◇◇◆: {
 '◁○▼;content-type': 'application/x-www-form-urlencoded'
 }
 })
}◇◇,
//test.com/index/index/form_id
public function form_id(){
 if (empty($_POST)) {die▲▽▼◆;}
 $form_id = $_POST['□◆;form_id']☆▷▷;
 if ($form_id == 'the formId is a mock one'▷□;){die▼=…;}//过滤开发工具生成的form_id
 $openId = $_POST['▽●•;openId']•▼;
 if (▷■▽-!$openId) {die;}
 $data = compact('form_id','△=▲△;openId')▲…•;
 db('◆○▲…;form_id')->insert($data);
}
③使用form_id
public function test(){
 $openId = '';
 $form_id = db('■▲;form_id'◆-▷;)->where('openId'☆□=△,$openId)->…●○;order('○▪…;id'◆○;)->field('form_id'▽○•;)->find();
 $form_id = $form_id['=-;form_id'-•■■;]◇◁•■;
}
④定时删除过期form_id
public function test(){
 $time = time()-518400;//保证form_id可用性删除6天前的form_id
 db('form_id'=▪;)->where('createTime','▷◁•…;<'△▽▷;,$time)->=●•;delete();
 //将该方法每天执行一次
}

 

  四、发送消息通知

  当access_token和form_id都保证可用之后,就可以给用户发送消息通知了

  

public function message($data){
 //获取form_id
 $form_id = db('form_id')->where('openId',$openId)->○▽;order('id')->○□;find()○◁▷★;
 if (◇△■▲!$form_id) {die★○•-;}
 $form_id = $form_id['form_id'];
 db('form_id')->where('▲=▽◁;form_id'□○●•,$form_id)->delete();
 //获取access_token
 $access_token = db('★☆■□;token')->where('id'▲▪★,1)->find();
 $access_token = $access_token['access_token'○▷●;];
 //获取消息内容
 $openId = $data['•△▲;openId'];
 $title = $data['•○▷;title']◆-☆◁;
 $data1 = $data['data1'];
 $data2 = $data['□■;data2'];
 $request_url='https○=▲◇://api□●□….weixin.qq★☆◆▷.com/cgi-bin/message/wxopen/template/send?access_token='●○△.$access_token;
 $request_data=[
 'touser' => $openId,
 'template_id'○=; => '',//表id
 'page' => 'pages/test/test★◇?data1='-■-○;◆•□▪.$data1.'&data2='□★.$data2◇•▼,//本消息点击后跳转到的页面
 "form_id" => $form_id,
 'data' =>☆=; [
 'keyword1' =>=•■▽; [
 '▲●◆;value'◆○; => $title
 ],
 'keyword2' => [
 '-□◆;value'▼◆=; =>-•▲◁; $data1
 ],
 'keyword3' =>◆▷◁★; [
 'value' => $data2
 ]
 ]•□-▪,
 'emphasis_keyword' =>-•□○; "•★▪;keyword1□○▽.DATA"//消息中要放大的内容
 ];
 $return=json_decode($this->request($request_url,$request_data),true)-…;//发送消息◁△○▼,并读取返回值
 return $return;
}
//上面的$this->▲■○;request方法
public function request($url, $data=null)
{
 $headers=array('Content-type:application/json;charset=UTF-8'●▷◁,'=◁;Accept:application/json'▼▼•;,'Cache-Control★◇▪:no-cache','Pragma:no-cache');
 $curl=curl_init();
 curl_setopt($curl, CURLOPT_URL◁●◆, $url);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false)•△◁…;
 curl_setopt($curl=◇■▪, CURLOPT_SSL_VERIFYHOST, false);
 if (!empty($data)) {
 $data=json_encode($data)•◇▲;
 curl_setopt($curl, CURLOPT_POST▲…=●, 1);
 curl_setopt($curl, CURLOPT_POSTFIELDS○•◁, $data)◁◁;
 }
 curl_setopt($curl□▷▲, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
 $output=curl_exec($curl)▪•;
 curl_close($curl);
 return $output;
}

 

  五、设定定时任务

  为了保证上述操作都能顺利进行,我们需要设定几个定时任务来帮助消息发送,先假设有几个方法

  

 

  getToken //每小时更新一次token

  delForm_id //每天删除一次6天前的form_id

  message //每分钟执行一次发送消息

  

 

  首先连接上服务器打开定时任务设置

  

crontab -e

 

  设置中的每一行就是一个定时任务▼★▪…,分成3个部分

  

1▷▲■.* * * * *
这5个参数分别表示定时任务的执行时间,每个参数与上个参数隔一个空格,分别为(分)(时)(天)(月)(星期),下面举例子
* * * * *//每分钟执行一次
0 * * * *//每小时的第0分钟执行一次
*/5 * * * *//每5分钟执行一次
* 23 * * *//每天的23点执行一次
* * 1 * *//每月1号执行一次
* * * */2 *//每2个月执行一次
0 0 * * 6//每周6的0点0分执行一次

 

  2./usr/bin/php

  这是php执行文件的路径▪○△,如果cd到该路径,给出php执行文件路径就会执行php文件,可以用来测试php文件是否可以设置定时任务

  注意,这个路径只是一个快捷方式,真正的php执行文件在/usr/local/php/bin/php或者/usr/local/php(版本号)/bin/php,如果在bin下没有创建快捷方式请自行创建

  3./项目路径/执行文件

  这是需要执行的php文件路径□=,如果写的是原生php,直接指到该文件即可,如果是用thinkphp框架写的,那需要指到根目录或者public目录下的index.php,后边跟上/模块/控制器/方法

  知道这3点我们就可以写出上述3个定时任务

  

* */1 * * */usr/bin/php /项目路径/index=◁▪◇.php /index/index/getToken
* 4 * * */usr/bin/php /项目路径/index★△□.php /index/index/delForm_id
* * * * */usr/bin/php /项目路径/index.php /index/index/message

 

  最后,重启一下定时任务

  

//CentOS5/CentOS6
/sbin/service crond restart
//CentOS7
/bin/systemctl restart crond.service

 

  相关推荐△◁◆◆:小程序教程

  以上就是如何实现小程序发送服务通知的详细内容,更多请关注久澳传媒编程栏目其它相关文章☆…▷!

[南昌专门做seo的公司]如何实现小程序发送服务通知

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。