溪口鄉(xiāng)如何實(shí)現(xiàn)小程序發(fā)送服務(wù)通知

閱讀 24416  ·  發(fā)布日期 2020-08-24 17:26  ·  溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】 如何實(shí)現(xiàn)小程序發(fā)送服務(wù)通知?小程序給用戶發(fā)送消息需要比較多的驗(yàn)證,剛剛遇到這個(gè)需求可能會(huì)花較長(zhǎng)時(shí)間研究測(cè)試,所以從基礎(chǔ)整理了一整套發(fā)送消息的邏輯,為以后開發(fā)消息通知功能提供思路,減少學(xué)習(xí)時(shí)間發(fā)送模板消息主要有以下幾個(gè)部分一、獲取access_token二、建立消息模板三、獲取form_id四、發(fā)送消息通知五、設(shè)定定時(shí)任... 【溫州小程序開發(fā),溫州微信公眾號(hào),平陽做網(wǎng)站,平陽網(wǎng)站建設(shè)公司,平陽小程序商城制作,昆陽萬全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號(hào),山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...

如何實(shí)現(xiàn)小程序發(fā)送服務(wù)通知

如何實(shí)現(xiàn)小程序發(fā)送服務(wù)通知?小程序給用戶發(fā)送消息需要比較多的驗(yàn)證,剛剛遇到這個(gè)需求可能會(huì)花較長(zhǎng)時(shí)間研究測(cè)試,所以從基礎(chǔ)整理了一整套發(fā)送消息的邏輯,為以后開發(fā)消息通知功能提供思路,減少學(xué)習(xí)時(shí)間發(fā)送模板消息主要有以下幾個(gè)部分一、獲取access_token二、建立消息模板三、獲取form_id四、發(fā)送消息通知五、設(shè)定定時(shí)任務(wù)一、獲取access_token向微信請(qǐng)求發(fā)送消息時(shí),會(huì)需要到access_token,access_token相當(dāng)于是小程序的身份證,雖然有appid和appsecret這2個(gè)證明,但是微信為了保證安全性,就用了access_token這個(gè)有時(shí)效的身份證明來驗(yàn)證,一條access_token只有2小時(shí)有效期,而且單個(gè)小程序1天只能請(qǐng)求1000次access_token,所以我們需要一套邏輯來保證access_token的可用性https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET只需要向上面這個(gè)地址請(qǐng)求就可以返回對(duì)應(yīng)的access_token根據(jù)這個(gè)接口,寫如下方法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 }
再設(shè)置一個(gè)定時(shí)器每小時(shí)觸發(fā)一次該接口,之后就可以隨意取出肯定能用的token了$token = db('
token'
)->find();
$token = $token['
access_token'
];
二、建立消息模板在小程序微信公眾平臺(tái)的左邊欄有一個(gè)模板消息的選項(xiàng)卡,只需要按照文檔添加一個(gè)模板消息,就可以得到對(duì)應(yīng)的對(duì)應(yīng)的模板ID,這一步基本都是網(wǎng)頁自行操作,不作更多展示三、獲取form_id微信為了防止小程序?qū)τ脩暨M(jìn)行過多消息通知,對(duì)消息通知進(jìn)行了一個(gè)限制,每發(fā)送一條消息通知,就需要一條form_id或者prepay_idprepay_id是用戶在使用微信支付之后返回的Id,本文中不做詳解form_id是與button綁定的Id,每當(dāng)用戶點(diǎn)擊綁定過的button就會(huì)返回一條form_id,一條form_id的有效期是7天,且每個(gè)用戶的form_id只能對(duì)該用戶使用,所以我們需要一個(gè)專門的邏輯來保存和使用form_id①設(shè)計(jì)form_id表結(jié)構(gòu) form_id有2個(gè)條件,第一個(gè)是僅7天內(nèi)有效,第二個(gè)是僅對(duì)創(chuàng)建form_id的用戶有效,針對(duì)這2個(gè)要求建立如下表 創(chuàng)建時(shí)間用戶id idcreateTimeopenIdform_id id作為主鍵自增不用解釋 createTime作為找到過期form_id的標(biāo)志,設(shè)置定時(shí)任務(wù),刪除過期form_id openId用來找到用戶自己的form_id來使用 ②取到form_id
ture'
bindsubmit='
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//自行獲取當(dāng)前用戶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;
}
//過濾開發(fā)工具生成的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'
];
}
④定時(shí)刪除過期form_id public function test(){
$time = time()-518400;
//保證form_id可用性刪除6天前的form_id db('
form_id'
)->where('
createTime'
,'
,$time)->delete();
//將該方法每天執(zhí)行一次 }
四、發(fā)送消息通知當(dāng)access_token和form_id都保證可用之后,就可以給用戶發(fā)送消息通知了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'
];
//獲取消息內(nèi)容 $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,//本消息點(diǎn)擊后跳轉(zhuǎn)到的頁面 "form_id" => $form_id, '
data'
=> [ '
keyword1'
=> [ '
value'
=> $title ], '
keyword2'
=> [ '
value'
=> $data1 ], '
keyword3'
=> [ '
value'
=> $data2 ] ], '
emphasis_keyword'
=> "keyword1.DATA"http://消息中要放大的內(nèi)容 ];
$return=json_decode($this->request($request_url,$request_data),true);
//發(fā)送消息,并讀取返回值 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;
}
五、設(shè)定定時(shí)任務(wù)為了保證上述操作都能順利進(jìn)行,我們需要設(shè)定幾個(gè)定時(shí)任務(wù)來幫助消息發(fā)送,先假設(shè)有幾個(gè)方法getToken //每小時(shí)更新一次tokendelForm_id //每天刪除一次6天前的form_idmessage //每分鐘執(zhí)行一次發(fā)送消息首先連接上服務(wù)器打開定時(shí)任務(wù)設(shè)置crontab -e設(shè)置中的每一行就是一個(gè)定時(shí)任務(wù),分成3個(gè)部分1.* * * * * 這5個(gè)參數(shù)分別表示定時(shí)任務(wù)的執(zhí)行時(shí)間,每個(gè)參數(shù)與上個(gè)參數(shù)隔一個(gè)空格,分別為(分)(時(shí))(天)(月)(星期),下面舉例子 * * * * *//每分鐘執(zhí)行一次 0 * * * *//每小時(shí)的第0分鐘執(zhí)行一次 */5 * * * *//每5分鐘執(zhí)行一次 * 23 * * *//每天的23點(diǎn)執(zhí)行一次 * * 1 * *//每月1號(hào)執(zhí)行一次 * * * */2 *//每2個(gè)月執(zhí)行一次 0 0 * * 6//每周6的0點(diǎn)0分執(zhí)行一次2./usr/bin/php這是php執(zhí)行文件的路徑,如果cd到該路徑,給出php執(zhí)行文件路徑就會(huì)執(zhí)行php文件,可以用來測(cè)試php文件是否可以設(shè)置定時(shí)任務(wù)注意,這個(gè)路徑只是一個(gè)快捷方式,真正的php執(zhí)行文件在/usr/local/php/bin/php或者/usr/local/php(版本號(hào))/bin/php,如果在bin下沒有創(chuàng)建快捷方式請(qǐng)自行創(chuàng)建3./項(xiàng)目路徑/執(zhí)行文件這是需要執(zhí)行的php文件路徑,如果寫的是原生php,直接指到該文件即可,如果是用thinkphp框架寫的,那需要指到根目錄或者public目錄下的index.php,后邊跟上/模塊/控制器/方法知道這3點(diǎn)我們就可以寫出上述3個(gè)定時(shí)任務(wù)* */1 * * */usr/bin/php /項(xiàng)目路徑/index.php /index/index/getToken * 4 * * */usr/bin/php /項(xiàng)目路徑/index.php /index/index/delForm_id * * * * */usr/bin/php /項(xiàng)目路徑/index.php /index/index/message最后,重啟一下定時(shí)任務(wù)//CentOS5/CentOS6 /sbin/service crond restart //CentOS7 /bin/systemctl restart crond.service相關(guān)推薦:
小程序教程以上就是如何實(shí)現(xiàn)小程序發(fā)送服務(wù)通知的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標(biāo)簽:
小程序本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!
上一篇:
微信小程序502是什么意思
下一篇:
如何獲取小程序的unionid相關(guān)文章相關(guān)視頻微信小程序中使用echarts微信小程序 絕對(duì)路徑 requireProxy封裝小程序的異步調(diào)用如何實(shí)現(xiàn)微信小程序在電腦上玩微信小程序必須買域名嗎微信小程序中為什么不使用骨架屏,來提升用戶體驗(yàn)?小程序如何設(shè)置類目如何實(shí)現(xiàn)小程序發(fā)送服務(wù)通知小程序項(xiàng)目介紹預(yù)覽登錄小程序中心認(rèn)識(shí)小程序的目錄結(jié)構(gòu)小程序的rpx長(zhǎng)度單位詳解布局奔牛課堂小程序搜素框 [溫州做小程序]