




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發技術】怎么實現小程序發送服務通知
這篇文章主要介紹了怎么實現小程序發送服務通知,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓在下帶著大家一起了解一下。如何實現小程序發送服務通知?小程序給用戶發送消息需要比較多的驗證,剛剛遇到這個需求可能會花較長時間研究測試,所以從基礎整理了一整套發送消息的邏輯,為以后開發消息通知功能提供思路,減少學習時間發送模板消息主要有以下幾個部分一、獲取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"http://消息中要放大的內容
];
$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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車輛贈與及駕駛培訓合同范本
- 財務總監薪酬體系設計與優化合同
- 物流企業成本控制與財務績效提升合同
- 餐飲廚師薪酬待遇及晉升合同
- 邴琰婚姻解除協議財產分割子女撫養與共同債務清算
- 車庫設施抵押貸款及利率調整合同樣本
- 車輛維修借款借條范本及維修配件銷售合同
- 知識產權典當質押借款合同范本
- 二年級數學計算題專項練習集錦
- 贛南科技學院《藥學分子生物學》2023-2024學年第二學期期末試卷
- 專利培訓專利基礎知識
- 談談如何做好科研工作課件
- 《閥門檢修及維護》課件
- 30題投資管理類崗位常見面試問題含HR問題考察點及參考回答
- 15D501 建筑物防雷設施安裝
- 世界500強CFO的財務管理筆記2
- 申請提取住房公積金個人授權、承諾書(樣表)
- 小動物外科手術學-浙江大學中國大學mooc課后章節答案期末考試題庫2023年
- 物流公司運輸安全管理制度
- 三個合伙人分配合同范本
- PLC課程設計-四人搶答器
評論
0/150
提交評論