【移動(dòng)應(yīng)用開發(fā)技術(shù)】微信公眾號(hào)完整開發(fā)的示例分析_第1頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】微信公眾號(hào)完整開發(fā)的示例分析_第2頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】微信公眾號(hào)完整開發(fā)的示例分析_第3頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】微信公眾號(hào)完整開發(fā)的示例分析_第4頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】微信公眾號(hào)完整開發(fā)的示例分析_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】微信公眾號(hào)完整開發(fā)的示例分析

這篇文章將為大家詳細(xì)講解有關(guān)微信公眾號(hào)完整開發(fā)的示例分析,在下覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

這篇文章介紹的內(nèi)容是關(guān)于微信公眾號(hào)開發(fā)完整教程一,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下因?yàn)楣ぷ鞯男枰?,這一兩年對(duì)微信公眾號(hào)和小程序,項(xiàng)目制作的比較多。所以我才打算寫一篇全面的制作教程,當(dāng)然了,最好的教程是微信工作平臺(tái)的文檔。我這里只是講述一下我的工作中的制作流程。所有相關(guān)文章的源碼,我托管在我自己的github上面,歡迎關(guān)注:地址點(diǎn)擊打開鏈接。接下來(lái)開始我們的教程。1.微信與公眾平臺(tái)的區(qū)別:微信:即時(shí)聊天的軟件,屬于一對(duì)一的關(guān)系微信公眾平臺(tái):屬于一對(duì)多的關(guān)系。2.訂閱號(hào)與服務(wù)號(hào)的區(qū)別:訂閱號(hào):針對(duì)個(gè)人或媒體每天可以群發(fā)1條信息,默認(rèn)不具有自定義菜單。服務(wù)器號(hào):針對(duì)企業(yè)或銀行每月可以群發(fā)4條信息,默認(rèn)具有自定義菜單。運(yùn)營(yíng)主體是組織(比如企業(yè)、媒體、公益組織)的,可以申請(qǐng)服務(wù)號(hào)。運(yùn)營(yíng)主體是組織和個(gè)人的可以申請(qǐng)訂閱號(hào),但是個(gè)人不能申請(qǐng)服務(wù)號(hào)。3.公眾平臺(tái)的兩種模式:1、編輯模式:直接使用微信公眾平臺(tái)所提供的后臺(tái)操作進(jìn)行用戶交互。編輯模式可以使用在如下的場(chǎng)景:不具備開發(fā)能力的運(yùn)營(yíng)者,主要是進(jìn)行品牌宣傳、新聞媒體、自助客服的公眾賬號(hào),運(yùn)營(yíng)初期,不需要特別多的功能,開發(fā)模式系統(tǒng)升級(jí),故障等特殊情況2、開發(fā)者模式:直接使用接口代碼實(shí)現(xiàn)用戶的交流4.微信公眾平臺(tái)前期準(zhǔn)備:注冊(cè)公眾平臺(tái),擁有線上服務(wù)器5.認(rèn)識(shí)一下編輯模式:原理:選擇對(duì)象選擇素材進(jìn)行群發(fā):?jiǎn)⒂米远x菜單,并開啟:點(diǎn)擊查看,進(jìn)入設(shè)置界面:上述講述的主要是編輯模式的使用,我想很多人應(yīng)該都會(huì)使用,其實(shí)和我們平常在論壇編輯文章和帖子差不多。6.開發(fā)者模式原理:注意:在開啟開發(fā)者模式之后編輯模式中部分功能不能正常使用。即開發(fā)者模式跟編輯模式存在沖突。進(jìn)入設(shè)置界面:修改配置:設(shè)置結(jié)果如下圖:填寫上你的服務(wù)器文件地址,token,點(diǎn)擊提交,驗(yàn)證即可。如果提交并驗(yàn)證通過(guò),就進(jìn)入到開發(fā)者模式public

function

valid(){

//獲取隨機(jī)字符串

$echoStr

=

input("echostr");

if($echoStr){

//

驗(yàn)證接口的有效性,由于接口有效性的驗(yàn)證必定會(huì)傳遞echostr

參數(shù)

if($this

->checkSignature()){

echo

$echoStr;

exit;

}

}else{

$this->responseMsg();

}

}

protected

function

checkSignature()

{

//

微信加密簽名

$signature

=

input("signature");

$timestamp

=

input("timestamp");//時(shí)間戳

$nonce

=input("nonce");//隨機(jī)數(shù)

$token

=

"weixin";

//token值,必須和你設(shè)置的一樣

$tmpArr

=array($token,$timestamp,$nonce);

sort($tmpArr,SORT_STRING);

$tmpStr

=

implode($tmpArr);

$tmpStr

=sha1($tmpStr);

if($tmpStr

==

$signature){

return

true;

}else{

return

false;

}

}關(guān)于上述代碼中的變量來(lái)源,微信都有詳細(xì)的說(shuō)明,我搭建的公眾號(hào)使用的是PHP7.0版本,TP5.0框架。在這里說(shuō)明一下。上述代碼只會(huì)執(zhí)行一次,開啟開發(fā)者模式之后,就不會(huì)在執(zhí)行,只會(huì)執(zhí)行上述代碼中的responseMsg方法。我們先上傳一段測(cè)試代碼試試,回復(fù)文本消息,是否有回復(fù),代碼如下:public

function

responseMsg()

{

//get

post

data,

May

be

due

to

the

different

environments

$postStr

=

file_get_contents('php://input');

//extract

post

data

if

(!empty($postStr)){

/*

libxml_disable_entity_loader

is

to

prevent

XML

eXternal

Entity

Injection,

the

best

way

is

to

check

the

validity

of

xml

by

yourself

*/

libxml_disable_entity_loader(true);

$postObj

=

simplexml_load_string($postStr,

'SimpleXMLElement',

LIBXML_NOCDATA);

$fromUsername

=

$postObj->FromUserName;

$toUsername

=

$postObj->ToUserName;

$keyword

=

trim($postObj->Content);

$time

=

time();

$textTpl

=

"<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[%s]]></MsgType>

<Content><![CDATA[%s]]></Content>

<FuncFlag>0</FuncFlag>

</xml>";

if(!empty(

$keyword

))

{

$msgType

=

"text";

$contentStr

=

"Welcome

to

wechat

world!";

$resultStr

=

sprintf($textTpl,

$fromUsername,

$toUsername,

$time,

$msgType,

$contentStr);

echo

$resultStr;

}else{

echo

"Input

something...";

}

}else

{

echo

"";

exit;

}

}結(jié)果如下:,由于微信的網(wǎng)頁(yè)授權(quán)的限制,所以我們可以申請(qǐng)測(cè)試賬號(hào),我這里使用的就是測(cè)試賬號(hào)。上述的開啟開發(fā)者模式是一樣的。只需要去申請(qǐng)一個(gè)測(cè)試賬號(hào)就好。申請(qǐng)的地方:如果出現(xiàn)上述的代碼,說(shuō)明我們已經(jīng)測(cè)試成功。接下來(lái),我們開始獲取access_token的值,這個(gè)參數(shù)對(duì)于我們來(lái)說(shuō)很重要。因?yàn)閍ccess_token是公眾號(hào)的全局唯一接口調(diào)用憑據(jù),公眾號(hào)調(diào)用各接口時(shí)都需使用access_token。開發(fā)者需要進(jìn)行妥善保存。access_token的存儲(chǔ)至少要保留512個(gè)字符空間。access_token的有效期目前為2個(gè)小時(shí),需定時(shí)刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。access_token是身份認(rèn)證其他接口基本上都需要使用該值進(jìn)行驗(yàn)證。7.access_token獲?。海梢栽诒镜販y(cè)試)獲取access_token方式一:結(jié)果如下:獲取access_token方式二:結(jié)果如下:我們開始對(duì)上述的代碼進(jìn)行封裝,因?yàn)閍ccess_token,每天只能調(diào)用2000次,所以我們要緩存起來(lái),這樣才能達(dá)到復(fù)用的效果,//獲取請(qǐng)求的地址的方法if(!function_exists("http_curl")){

function

http_curl($url,$data

=array(),$method

="get",$returnType

="json")

{

//1.開啟會(huì)話

$ch

=

curl_init();

//2.設(shè)置參數(shù)

curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

if($method!="get"){

curl_setopt($ch,CURLOPT_POST,TRUE);

curl_setopt($ch,CURLOPT_POSTFIELDS,$data);

}

curl_setopt($ch,CURLOPT_URL,$url);

//執(zhí)行會(huì)話

$json

=

curl_exec($ch);

curl_close($ch);

if($returnType

==

"json"){

return

json_decode($json,true);

}

return

$json;

}

}

if(!function_exists('get_access_token')){

function

get_access_token()

{

$appid

=

"wx1ba8f59d9e2c0be0";

//微信的appid

$secret

="9e65155599fb9ec047455e197ff6e121";

//微信的開發(fā)者密鑰

//

讀取緩存中的內(nèi)容

include_once

"MyMemcache.php";

//引入緩存方法文件

$obj

=

new

\MyMemcache("53");

$value

=

$obj

->get($appid);

if(!$value){

$url

=

"/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;

$result

=

http_curl($url);

$value

=

$result['access_token'];

$obj->set($appid,$value,7000);

}

return

$value;

}

}上述代碼就是我對(duì)這兩個(gè)方法的封裝,其中我們用到了緩存技術(shù):緩存的方法如下://memcache操作類class

MyMemcache{

public

$conn;

public

$isMemcache

=true;

public

function

__construct($host="",$port='11211')

{

//

建立連接

if(class_exists('MyMemcache')){

$obj

=new

\Memcache();

}else{

$this

->isMemcache

=false;

$obj

=new

\Memcached();

}

$obj

->addServer($host,$port);

$this

->conn

=$obj;

}

//獲取數(shù)據(jù)

public

function

get($key)

{

return

$this->conn->get($key);

}

//設(shè)置數(shù)據(jù)

public

function

set($key,$value,$expire=0)

{

if($this->isMemcache){

$this->conn->set($key,$value,0,$expire);

}else{

//

Memcached擴(kuò)展的操作方式

$this->conn->set($key,$value,$expire);

}

}

}結(jié)合上述的三個(gè)方法,我們就可以實(shí)現(xiàn)獲取access_token的值,并保存在緩存系統(tǒng),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論