




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么实现小程序发送服务通知
这篇文章主要介绍了怎么实现小程序发送服务通知,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让在下带着大家一起了解一下。如何实现小程序发送服务通知?小程序给用户发送消息需要比较多的验证,刚刚遇到这个需求可能会花较长时间研究测试,所以从基础整理了一整套发送消息的逻辑,为以后开发消息通知功能提供思路,减少学习时间发送模板消息主要有以下几个部分一、获取access_token二、建立消息模板三、获取form_id四、发送消息通知五、设定定时任务一、获取access_token一、获取access_token二、建立消息模板三、获取form_id四、发送消息通知五、设定定时任务一、获取access_token向微信请求发送消息时,会需要到access_token,access_token相当于是小程序的身份证,虽然有appid和appsecret这2个证明,但是微信为了保证安全性,就用了access_token这个有时效的身份证明来验证,一条access_token只有2小时有效期,而且单个小程序1天只能请求1000次access_token,所以我们需要一套逻辑来保证access_token的可用性/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET只需要向上面这个地址请求就可以返回对应的access_token根据这个接口,写如下方法public
function
test(){
$appId
=
'';
$appSecret
=
'';
$token
=
file_get_contents("/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
<!s/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:
'/index/index/form_id',//自行替换接口
method:
"POST",
data:
{
form_id:
e.detail.formId,
openId:
openId//自行获取当前用户openId
},
header:
{
'content-type':
'application/x-www-form-urlencoded'
}
})
},
///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='/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 //每分钟执行一次发送消息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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邵阳市新邵县2025届四下数学期末检测模拟试题含解析
- 房产最高额担保合同
- 宽城满族自治县2025年数学五年级第二学期期末综合测试模拟试题含答案
- 2025年度企业单位借款合同范例
- 山东省枣庄市滕州市2024-2025学年高二下学期第一次检测历史试卷(含答案)
- 餐饮服务外包合同范本多条款
- 科研仪器设备采购合同
- 物资供应合同
- 傣族民间舞的风格特点
- 三年级上册4、水生植物教案
- 销售立项申请表
- YC/T 322-2018片烟气调贮存养护技术规范
- 迈瑞麻醉机介绍精品课件
- GB/T 20441.4-2006测量传声器第4部分:工作标准传声器规范
- GB 25535-2010食品安全国家标准食品添加剂结冷胶
- GA/T 966-2011物证的封装要求
- 全套课件公共部门人力资源管理
- 双心治疗课件
- 广东省肇庆市各县区乡镇行政村村庄村名明细及行政区划代码
- 缓和医疗精品课件
- 儿童功能性独立评定量表(WeeFIM)
评论
0/150
提交评论