怎麼調用進階介面
進階介面和普通介面的區別
後台伺服器可以調用的介面與使用者進行訊息的通訊,這樣的行為就是在調用的介面,這些介面是基礎介面,你不需要任何付費行為或者身份認證行為就可以調用。但是有一些進階介面,你的公眾號必須達到一定的許可權如通過認證才能調用自訂菜單、支付等進階功能。
不過公眾帳號的測試號系統可以應用這些進階介面(支付等涉及交易的介面除外)。
進階介面的調用
進階介面的調用需要先調用一個token_access介面,只有先調用這個介面才能調用其它進階介面。
如下:連通進階介面
調用token_access需要用到appID和appsecreset(在公眾號平台開發(一)中已經講述這兩者的由來)
調用代碼如下
<?php$appid = "wxbad0b4x543aa0b5e";$appsecret = "ed222a84da15cd24c4bdfa5d9adbabf2";$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";//下面是一個cURL會話過程,通過這個會話可以返回一段字串{"access_token":"NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjb"}這就是我們要獲得的Access Token了。在調用進階功能介面的時候就靠它。這個過程用的時候直接引用就好,不需要深究,這個cURL系統相關函數有點多而且複雜。$ch = curl_init();//初始化curl_setopt($ch, CURLOPT_URL, $url);//與url建立對話curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //進行配置curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //進行配置curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//進行配置$output = curl_exec($ch);//執行對話,擷取介面資料Access Tokencurl_close($ch);//關閉會話$jsoninfo = json_decode($output, true);//解碼介面資料,將json格式字串轉換成php變數或數組。預設是變數,加true後是數組。$access_token = $jsoninfo["access_token"];?>
調用進階介面
1)、調用自訂菜單功能
//建立一個自訂菜單的json字串 $jsonmenu = '{ "button":[ { "name":"關於我們", "sub_button":[ { "type":"click", "name":"公司簡介", "key":"公司簡介" }, { "type":"click", "name":"社會責任", "key":"社會責任" }, { "type":"click", "name":"聯絡我們", "key":"聯絡我們" }] }, { "name":"產品服務", "sub_button":[ { "type":"click", "name":"平台", "key":"平台" }, { "type":"click", "name":"微博應用", "key":"微博應用" }, { "type":"click", "name":"手機網站", "key":"手機網站" }] }, { "name":"支援人員", "sub_button":[ { "type":"click", "name":"文檔下載", "key":"文檔下載" }, { "type":"click", "name":"技術社區", "key":"技術社區" }, { "type":"click", "name":"服務熱線", "key":"服務熱線" }] }] }'; $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;//介面地址$result = https_request($url, $jsonmenu);//與介面建立會話var_dump($result);function https_request($url,$data = null){ $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)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output;}//把這段代碼加入到上面的調用Access Token介面的代碼中就可以實現在公眾號介面添加菜單的功能。
當我們為公眾號添加菜單後怎麼樣設定點擊菜單時會出現相應的效果呢?
這裡涉及到另一種xml類型的資料傳遞:
<xml><ToUserName><![CDATA[gh_82479813ed64]]></ToUserName><FromUserName><![CDATA[ojpX_jig-gyi3_Q9fHXQ4rdHniQs]]></FromUserName><CreateTime>1392297442</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[CLICK]]></Event><EventKey><![CDATA[公司簡介]]></EventKey></xml>//上面是點擊click菜單的資料傳遞類型,資料會發送給後台伺服器,然後伺服器做出響應。
菜單類型有多種,xml類型差別,詳細情況可以在公眾號平台上查看相應文檔。
*這裡要說明的是只要你有公眾號的appID和appsecret,在任何伺服器空間運行這段php代碼都可以進入伺服器調用相應功能,不一定非要在進行了token驗證的伺服器下運行。token驗證是為了後台伺服器進行判斷資料來源是否是來自伺服器,與調用伺服器的進階介面並沒有多大的關聯。
php檔案一定要在伺服器運行才會產生效果。
其它進階介面的調用都同調用自訂菜單一樣。
2)、調用客服介面
當使用者主動發訊息 給公眾帳號的時候(包括髮送資訊、單擊自訂菜單click事件、訂閱事件、掃描二維碼、支付成功事件)會把訊息資料推送給開發人員。開發人員在一段時間內可以調用客服介面訊息,通過post一個JSON資料包來發送訊息給使用者。
代碼如下:
$access_token = "nFX6GFsspSLBKJLgMQ3kj1YM8_FchRE7vE2ZOIlmfiCOQntZKnBwuOen2GCBpFHBYS4QLGX9fGoVfA36tftME2sRiYsKPzgGQKU-ygU7x8cgy_1tlQ4n1mhSumwQEGy6PK6rdTdo8O8GROuGE3Hiag";$openid = "o7Lp5t6n59DeX3U0C7Kric9qEx-Q";//使用者都有一個openID
所示即為openID的擷取方式。
$data = '{ "touser":"'.$openid.'", "msgtype":"text", "text": { "content":"Hello World" }}';//通過基礎訊息介面發送的資料是XML格式的,但是調用客服介面發送的資料是json資料格式,更易傳輸。 $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token;$result = https_request($url,$data);var_dump($result);function https_request($url,$data){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if (curl_errno($curl)) { return 'Errno'.curl_error($curl); } curl_close($curl); return $result;}
客服介面發送圖文訊息、音樂訊息、影像訊息具體格式請參看公眾平台上的開發協助文檔。
客服介面可以和訊息介面混合使用。
這裡大家可能不明白既然可以直接通過被動響應訊息的介面發送xml資料給使用者,為什麼還需要這樣一個客服介面?可以這樣理解,被動響應訊息是一次性的只能回複一次相同的訊息。如你向一個音樂平台輸入一個歌星名稱,通過被動回應程式式發送的訊息永遠只會回複你一首相同的歌。但是通過客服介面方式可以每次回複不同的 歌曲,這涉及到MySQL資料庫。
再簡單一點,一個查看快遞包括地址的公眾平台。你每次輸入同一個訂單編號,後台卻能夠回複訂單每次所在的位置(針對同樣的文本卻可以做出不同的回應)就像是人工回複一樣,這就是客服介面 。
3)、產生二維碼介面
二維碼類型分兩種,分別是臨時二維碼eh 和永久二維碼,前者與到期時間,最長是1800s。
產生二維碼你需要調用3個介面,
第一個是access_token
第二個是產生ticket介面
第三個是通過第二個介面產生的ticket來換取二維碼圖片。
$access_token = " xDx0pD_ZvXkHM3oeu5oGjDt1_9HxlA-9g0vtR6MZ-v4r7MpvZYC4ee4OxN97Lr4irkPKE94tzBUhpZG_OvqAC3D3XaWJIGIn0eeIZnfaofO1C3LNzGphd_rEv3pIimsW9lO-4FOw6D44T3sNsQ5yXQ";//假定擷取的ACCESS TOKEN為這段代碼。//臨時二維碼$qrcode = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 10000}}}';//永久二維碼$qrcode = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 1000}}}';$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token";//建立ticket介面$result = https_request($url,$qrcode);$jsoninfo = json_decode($result, true);$ticket = $jsoninfo["ticket"];function https_request($url, $data = null){ $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)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output;}$ticket = "gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==";//擷取ticket的字串$url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($ticket);//ticket對面二維碼圖片代碼。$imageInfo = downloadWeixinFile($url);$filename = "qrcode.jpg";$local_file = fopen($filename, 'w');if (false !== $local_file){ if (false !== fwrite($local_file, $imageInfo["body"])) { fclose($local_file); }}function downloadWeixinFile($url){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_NOBODY, 0); //只取body頭 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $package = curl_exec($ch); $httpinfo = curl_getinfo($ch); curl_close($ch); return array_merge(array('body' => $package), array('header' => $httpinfo)); }
在伺服器空間運行這段代碼,瀏覽器會產生一張二維碼圖片。
擷取非功能介面,比如擷取交通訊息、天氣預報。