【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么實(shí)現(xiàn)小程序發(fā)送服務(wù)通知_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么實(shí)現(xiàn)小程序發(fā)送服務(wù)通知_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么實(shí)現(xiàn)小程序發(fā)送服務(wù)通知_第3頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么實(shí)現(xiàn)小程序發(fā)送服務(wù)通知_第4頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么實(shí)現(xiàn)小程序發(fā)送服務(wù)通知_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么實(shí)現(xiàn)小程序發(fā)送服務(wù)通知

這篇文章主要介紹了怎么實(shí)現(xiàn)小程序發(fā)送服務(wù)通知,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓在下帶著大家一起了解一下。如何實(shí)現(xiàn)小程序發(fā)送服務(wù)通知?小程序給用戶發(fā)送消息需要比較多的驗(yàn)證,剛剛遇到這個(gè)需求可能會(huì)花較長時(shí)間研究測試,所以從基礎(chǔ)整理了一整套發(fā)送消息的邏輯,為以后開發(fā)消息通知功能提供思路,減少學(xué)習(xí)時(shí)間發(fā)送模板消息主要有以下幾個(gè)部分一、獲取access_token二、建立消息模板三、獲取form_id四、發(fā)送消息通知五、設(shè)定定時(shí)任務(wù)一、獲取access_token一、獲取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的可用性/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("/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

<!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//自行獲取當(dāng)前用戶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;}//過濾開發(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='/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ā)送消息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文件,可以用來測試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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論