应坑乡如何实现小程序发送服务通知
阅读 21679 · 发布日期 2020-08-24 17:26 · 温州优光网络科技有限公司|建站|APP小程序制作|做网站SEO推广优化
【摘要】
如何实现小程序发送服务通知?小程序给用户发送消息需要比较多的验证,刚刚遇到这个需求可能会花较长时间研究测试,所以从基础整理了一整套发送消息的逻辑,为以后开发消息通知功能提供思路,减少学习时间发送模板消息主要有以下几个部分一、获取access_token二、建立消息模板三、获取form_id四、发送消息通知五、设定定时任... 【温州小程序开发,温州微信公众号,平阳做网站,平阳网站建设公司,平阳小程序商城制作,昆阳万全做网站,鳌江水头小程序,萧江腾蛟微信公众号,山门顺溪南雁海西南麂凤卧麻步怀溪网络网店服务,政采云网店管理服务】...
如何实现小程序发送服务通知?小程序给用户发送消息需要比较多的验证,刚刚遇到这个需求可能会花较长时间研究测试,所以从基础整理了一整套发送消息的逻辑,为以后开发消息通知功能提供思路,减少学习时间发送模板消息主要有以下几个部分一、获取access_token二、建立消息模板三、获取form_id四、发送消息通知五、设定定时任务一、获取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_idprepay_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.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 //每小时更新一次tokendelForm_id //每天删除一次6天前的form_idmessage //每分钟执行一次发送消息首先连接上服务器打开定时任务设置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相关推荐:
小程序教程以上就是如何实现小程序发送服务通知的详细内容,更多请关注php中文网其它相关文章!
微信
分享相关标签:
小程序本文原创发布php中文网,转载请注明出处,感谢您的尊重!
上一篇:
微信小程序502是什么意思
下一篇:
如何获取小程序的unionid相关文章相关视频微信小程序中使用echarts微信小程序 绝对路径 requireProxy封装小程序的异步调用如何实现微信小程序在电脑上玩微信小程序必须买域名吗微信小程序中为什么不使用骨架屏,来提升用户体验?小程序如何设置类目如何实现小程序发送服务通知小程序项目介绍预览登录小程序中心认识小程序的目录结构小程序的rpx长度单位详解布局奔牛课堂小程序搜素框 [温州做小程序]