本章是系列教程第三篇,。學(xué)習(xí)之前請確保了解了
本篇文章你能學(xué)到:用php為公眾號增加,,修改,,替換,,刪除菜單,。舉一反三,你能用本文的簡單例子寫出適合自己工作的功能,。
新建文件menu.php,,把下面的代碼復(fù)制到文件里,。修改AppID(應(yīng)用ID)與AppSecret(應(yīng)用密鑰,這兩個作用下面會講到)為自己公眾號的,。你將能得到如圖的功能,。點擊菜單一會menu.php會收到XML消息,“王文曉,,百度”會跳轉(zhuǎn)到相應(yīng)網(wǎng)頁,。
menu.php里面的代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <?php
//獲取微信access_token
function getaccess_token(){
//appid與appsecret改成你自己的
$appid = '自己的appid' ;
$appsecret = '自己的appsecret' ;
},
{
"type" : "view" ,
"name" : "百度" ,
echo setmenu( $menu );
|
AppID(應(yīng)用ID)、AppSecret(應(yīng)用密鑰)與access_token
AppID(應(yīng)用ID)與AppSecret(應(yīng)用密鑰)每個公眾號都是唯一的,,它倆組合能獲取access_token,,在與微信服務(wù)器接口交互時,微信驗證access_token才知道你要改哪個公眾號的設(shè)置,。
access_token每天只允許獲取1000次,,但每次獲取的access_token的有效期目前為2個小時,所以可以把獲取的token存到數(shù)據(jù)庫或者文本文件里,,兩小時后再次獲取,。
(中午十二點了,先吃飯,,下午在寫)
AppID(應(yīng)用ID),、AppSecret(應(yīng)用密鑰)在哪查詢
登錄mp.weixin.qq.com選擇基本配置,即可看到
學(xué)習(xí) CURL 函數(shù)
curl功能很強(qiáng)大,,可以做模擬登錄,、刷票、代理,、表單上傳......本篇文章只講要用到的功能:curl模擬get,、模擬post獲取網(wǎng)頁數(shù)據(jù)。
php中curl總的流程
1 2 3 4 | $ch = curl_init(); //初始化一個curl會話到$ch
curl_setopt( $ch , CURLOPT_“相關(guān)配置”,“配置的值”); //$ch中設(shè)置相關(guān)的配置
$data = curl_exec( $ch ); //執(zhí)行curl會話,,返回的結(jié)果放到$data
curl_close( $ch ); //關(guān)閉curl會話
|
curl_setopt常用配置項
配置項 |
作用 |
配置值 |
CURLOPT_URL |
要獲取的地址 |
String類型的地址 |
CURLOPT_RETURNTRANSFER |
返回的網(wǎng)頁數(shù)據(jù)是否直接顯示在網(wǎng)頁上 |
bool,,1為不顯示0為顯示 |
CURLOPT_POST |
是否使用post |
bool,0為不用1為用 |
CURLOPT_POSTFIELDS |
訪問地址時帶過去的post值 |
string或者array類型的值 |
CURLOPT_HEADER |
返回的網(wǎng)頁頭信息是否直接顯示在網(wǎng)頁上 |
bool,,0為不顯示1為顯示 |
CURLOPT_SSL_VERIFYPEER |
訪問https網(wǎng)址時檢查證書是否有效 |
bool |
例1,、get獲取www.網(wǎng)頁數(shù)據(jù)
1 2 3 4 5 6 7 | $ch = curl_init();
curl_setopt( $ch , CURLOPT_URL, $url );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER,1);
$data = curl_exec( $ch );
curl_close( $ch );
var_dump( $data );
|
獲得的網(wǎng)頁數(shù)據(jù)放在$data變量里,然后打印出來$data,,原本是顯示出網(wǎng)頁的字符串,,但是是html語言,所以又變成網(wǎng)頁了
結(jié)果圖如下
例2,、帶post獲取www.網(wǎng)頁數(shù)據(jù)
1 2 3 4 5 6 7 8 | $ch = curl_init();
curl_setopt( $ch , CURLOPT_URL, $url );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER,1);
curl_setopt( $ch , CURLOPT_POSTFIELDS, "who=wangwenxiao" );
$data = curl_exec( $ch );
curl_close( $ch );
var_dump( $data );
|
結(jié)果:跟get方式得到的結(jié)果一樣,,只不過請求時請求頭會帶著post數(shù)據(jù)who=wangwenxiao
獲取access_token流程
獲取地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
把紅色的字改成自己公眾號的AppID(應(yīng)用ID)、AppSecret(應(yīng)用密鑰)即可
相應(yīng)代碼講解:
5-6行改成自己的appid與appsecret
7-13行根據(jù)上面講解是模擬get請求獲取上面網(wǎng)址顯示的數(shù)據(jù),。
返回的數(shù)據(jù)為json數(shù)據(jù){"access_token":"ACCESS_TOKEN的值(512個字節(jié))","expires_in":7200}
14行將上面得到的json格式數(shù)據(jù)轉(zhuǎn)化為數(shù)組,。
15行獲取數(shù)據(jù)中的access_token的值,。
制作菜單詳解
(吃晚飯去,吃完晚飯繼續(xù)寫)
上面代碼設(shè)置的菜單為例,,當(dāng)用戶點擊click類型按鈕時,,我們的服務(wù)器接收到如下XML格式的信息
1 2 3 4 5 6 7 8 | < xml >
< ToUserName > <![CDATA[toUser]]> </ ToUserName >
< FromUserName > <![CDATA[FromUser]]> </ FromUserName >
< CreateTime >123456789</ CreateTime >
< MsgType > <![CDATA[event]]> </ MsgType >
< Event > <![CDATA[CLICK]]> </ Event >
< EventKey > <![CDATA[wwx_one]]> </ EventKey >
</ xml >
|
接收菜單信息
把下面的代碼命名為menureply.php放在服務(wù)器上,并與微信公眾號建立對接,。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <?php
define( "TOKEN" , "xiao" );
//用于回復(fù)用戶
function responseMsg(){
$postStr = $GLOBALS [ "HTTP_RAW_POST_DATA" ];
if (! empty ( $postStr )){
$postObj = simplexml_load_string( $postStr , 'SimpleXMLElement' , LIBXML_NOCDATA);
$fromUsername = $postObj ->FromUserName;
$toUsername = $postObj ->ToUserName;
$event = trim( $postObj ->Event);
$eventkey = trim( $postObj ->EventKey);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
if (! empty ( $event )&& $event == "CLICK" )
{
$msgType = "text" ;
$contentStr = "您點擊了按鈕菜單,,key值為:" . $eventkey ;
$resultStr = sprintf( $textTpl , $fromUsername , $toUsername , $time , $msgType , $contentStr );
echo $resultStr ;
exit ;
}
} else {
echo "" ;
exit ;
}
}
$echoStr = $_GET [ "echostr" ];
if (! empty ( $echoStr )) {
//對接規(guī)則
$signature = $_GET [ "signature" ];
$timestamp = $_GET [ "timestamp" ];
$nonce = $_GET [ "nonce" ];
$token = TOKEN;
$tmpArr = array ( $token , $timestamp , $nonce );
sort( $tmpArr , SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if ( $tmpStr == $signature ){
echo $echoStr ;
} else {
echo "" ;
exit ;
}
} else {
responseMsg();
}
?>
|
對接后的圖(對接方法請看微信公眾號開發(fā)基礎(chǔ)上)
再點擊公眾號的菜單會收到如下信息
我們設(shè)置的eventkey值就是wwx_one。
menureply.php的代碼不詳細(xì)解釋,,仔細(xì)看開頭寫出的那兩篇文章就能理解了
能返回文本消息,,你也就可以做視頻,圖文,,語音消息,。。,。,。。,。,。
本章結(jié)束語
學(xué)到這里,其實你也就可以自己看微信文檔開發(fā)了,。后面我會把微信的九大高級接口怎么使用詳細(xì)介紹一遍,,有問題歡迎留言。
本文寫作用時14小時
|