《PHP編程:php微信高級(jí)接口調(diào)用方法(自定義菜單接口、客服接口、二維碼)》要點(diǎn):
本文介紹了PHP編程:php微信高級(jí)接口調(diào)用方法(自定義菜單接口、客服接口、二維碼),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP應(yīng)用怎么調(diào)用微信高級(jí)接口
PHP應(yīng)用微信高級(jí)接口和微信普通接口的區(qū)別
PHP應(yīng)用后臺(tái)服務(wù)器可以調(diào)用微信的接口與微信用戶進(jìn)行訊息的通信,這樣的行為就是在調(diào)用微信的接口,這些接口是基礎(chǔ)接口,你不需要任何付費(fèi)行為或者身份認(rèn)證行為就可以調(diào)用.但是有一些高級(jí)接口,你的微信公眾號(hào)必須達(dá)到一定的權(quán)限如通過(guò)微信認(rèn)證才能調(diào)用自定義菜單、微信支付等高級(jí)功能.
不過(guò)微信公眾帳號(hào)的測(cè)試號(hào)系統(tǒng)可以應(yīng)用這些高級(jí)接口(微信支付等涉及交易的接口除外).
PHP應(yīng)用微信高級(jí)接口的調(diào)用
PHP應(yīng)用微信高級(jí)接口的調(diào)用需要先調(diào)用一個(gè)token_access接口,只有先調(diào)用這個(gè)接口才能調(diào)用其它高級(jí)接口.
如下:連通高級(jí)接口示意圖
PHP應(yīng)用
PHP應(yīng)用調(diào)用token_access需要用到appID和appsecreset(在微信公眾號(hào)平臺(tái)開(kāi)發(fā)(一)中已經(jīng)講述這兩者的由來(lái))
PHP應(yīng)用調(diào)用代碼如下
PHP應(yīng)用
<?php
$appid = "wxbad0b4x543aa0b5e";
$appsecret = "ed222a84da15cd24c4bdfa5d9adbabf2";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
//下面是一個(gè)cURL會(huì)話過(guò)程,通過(guò)這個(gè)會(huì)話可以返回一段字符串{"access_token":"NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjb"}
這就是我們要獲得的Access Token了.在調(diào)用高級(jí)功能接口的時(shí)候就靠它.這個(gè)過(guò)程用的時(shí)候直接引用就好,不需要深究,這個(gè)cURL系統(tǒng)相關(guān)函數(shù)有點(diǎn)多而且復(fù)雜.
$ch = curl_init();//初始化
curl_setopt($ch, CURLOPT_URL, $url);//與url建立對(duì)話
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //進(jìn)行配置
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //進(jìn)行配置
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//進(jìn)行配置
$output = curl_exec($ch);//執(zhí)行對(duì)話,獲取接口數(shù)據(jù)Access Token
curl_close($ch);//關(guān)閉會(huì)話
$jsoninfo = json_decode($output, true);//解碼接口數(shù)據(jù),將json格式字符串轉(zhuǎn)換成php變量或數(shù)組.默認(rèn)是變量,加true后是數(shù)組.
$access_token = $jsoninfo["access_token"];
?>
PHP應(yīng)用調(diào)用微信高級(jí)接口
PHP應(yīng)用1)、調(diào)用自定義菜單功能
PHP應(yīng)用
//創(chuàng)建一個(gè)自定義菜單的json字符串
$jsonmenu = '{
"button":[
{
"name":"關(guān)于我們",
"sub_button":[
{
"type":"click",
"name":"公司簡(jiǎn)介",
"key":"公司簡(jiǎn)介"
},
{
"type":"click",
"name":"社會(huì)責(zé)任",
"key":"社會(huì)責(zé)任"
},
{
"type":"click",
"name":"聯(lián)系我們",
"key":"聯(lián)系我們"
}]
},
{
"name":"產(chǎn)品服務(wù)",
"sub_button":[
{
"type":"click",
"name":"微信平臺(tái)",
"key":"微信平臺(tái)"
},
{
"type":"click",
"name":"微博應(yīng)用",
"key":"微博應(yīng)用"
},
{
"type":"click",
"name":"手機(jī)網(wǎng)站",
"key":"手機(jī)網(wǎng)站"
}]
},
{
"name":"技術(shù)支持",
"sub_button":[
{
"type":"click",
"name":"文檔下載",
"key":"文檔下載"
},
{
"type":"click",
"name":"技術(shù)社區(qū)",
"key":"技術(shù)社區(qū)"
},
{
"type":"click",
"name":"服務(wù)熱線",
"key":"服務(wù)熱線"
}]
}]
}';
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;//接口地址
$result = https_request($url, $jsonmenu);//與接口建立會(huì)話
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;
}
//把這段代碼加入到上面的調(diào)用Access Token接口的代碼中就可以實(shí)現(xiàn)在微信公眾號(hào)界面添加菜單的功能.
PHP應(yīng)用當(dāng)我們?yōu)槲⑿殴娞?hào)添加菜單后怎么樣設(shè)置點(diǎn)擊菜單時(shí)會(huì)出現(xiàn)相應(yīng)的效果呢?
這里涉及到另一種xml類(lèi)型的數(shù)據(jù)傳遞:
PHP應(yīng)用
<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[公司簡(jiǎn)介]]></EventKey>
</xml>
//上面是點(diǎn)擊click菜單的數(shù)據(jù)傳遞類(lèi)型,數(shù)據(jù)會(huì)發(fā)送給后臺(tái)服務(wù)器,然后服務(wù)器做出響應(yīng).
PHP應(yīng)用菜單類(lèi)型有多種,xml類(lèi)型差別,詳細(xì)情況可以在微信公眾號(hào)平臺(tái)上查看相應(yīng)文檔.
PHP應(yīng)用*這里要說(shuō)明的是只要你有微信公眾號(hào)的appID和appsecret,在任何服務(wù)器空間運(yùn)行這段php代碼都可以進(jìn)入微信服務(wù)器調(diào)用相應(yīng)功能,不一定非要在進(jìn)行了token驗(yàn)證的服務(wù)器下運(yùn)行.token驗(yàn)證是為了后臺(tái)服務(wù)器進(jìn)行判斷數(shù)據(jù)來(lái)源是否是來(lái)自微信服務(wù)器,與調(diào)用微信服務(wù)器的高級(jí)接口并沒(méi)有多大的關(guān)聯(lián).
php文件一定要在服務(wù)器運(yùn)行才會(huì)產(chǎn)生效果.
PHP應(yīng)用其它高級(jí)接口的調(diào)用都同調(diào)用自定義菜單一樣.
PHP應(yīng)用2)、調(diào)用客服接口
PHP應(yīng)用當(dāng)微信用戶主動(dòng)發(fā)消息 給微信公眾帳號(hào)的時(shí)候(包括發(fā)送信息、單擊自定義菜單click事件、訂閱事件、掃描二維碼、支付成功事件)微信會(huì)把消息數(shù)據(jù)推送給開(kāi)發(fā)者.開(kāi)發(fā)者在一段時(shí)間內(nèi)可以調(diào)用客服接口消息,通過(guò)post一個(gè)JSON數(shù)據(jù)包來(lái)發(fā)送消息給用戶.
PHP應(yīng)用下圖所示即為openID的獲取方式.
PHP應(yīng)用
PHP應(yīng)用
$data = '{
"touser":"'.$openid.'",
"msgtype":"text",
"text":
{
"content":"Hello World"
}
}';//通過(guò)基礎(chǔ)消息接口發(fā)送的數(shù)據(jù)是XML格式的,但是調(diào)用客服接口發(fā)送的數(shù)據(jù)是json數(shù)據(jù)格式,更易傳輸.
$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;
}
PHP應(yīng)用客服接口發(fā)送圖文消息、音樂(lè)消息、視頻消息具體格式請(qǐng)參看微信公眾平臺(tái)上的開(kāi)發(fā)幫助文檔.
客服接口可以和消息接口混合使用.
PHP應(yīng)用這里大家可能不明白既然可以直接通過(guò)被動(dòng)響應(yīng)消息的接口發(fā)送xml數(shù)據(jù)給用戶,為什么還需要這樣一個(gè)客服接口?可以這樣理解,被動(dòng)響應(yīng)消息是一次性的只能回復(fù)一次相同的消息.如你向一個(gè)音樂(lè)平臺(tái)輸入一個(gè)歌星名稱,通過(guò)被動(dòng)響應(yīng)方式發(fā)送的消息永遠(yuǎn)只會(huì)回復(fù)你一首相同的歌.但是通過(guò)客服接口方式可以每次回復(fù)不同的 歌曲,這涉及到MySQL數(shù)據(jù)庫(kù).
PHP應(yīng)用再簡(jiǎn)單一點(diǎn),一個(gè)查看快遞包括地址的微信公眾平臺(tái).你每次輸入同一個(gè)訂單編號(hào),后臺(tái)卻能夠回復(fù)訂單每次所在的位置(針對(duì)同樣的文本卻可以做出不同的回應(yīng))就像是人工回復(fù)一樣,這就是客服接口 .
PHP應(yīng)用3)、生成二維碼接口
PHP應(yīng)用二維碼類(lèi)型分兩種,分別是臨時(shí)二維碼eh 和永久二維碼,前者與過(guò)期時(shí)間,最長(zhǎng)是1800s.
生成二維碼你需要調(diào)用3個(gè)接口,
第一個(gè)是access_token
第二個(gè)是生成ticket接口
第三個(gè)是通過(guò)第二個(gè)接口生成的ticket來(lái)?yè)Q取二維碼圖片.
PHP應(yīng)用
$access_token = " xDx0pD_ZvXkHM3oeu5oGjDt1_9HxlA-9g0vtR6MZ-v4r7MpvZYC4ee4OxN97Lr4irkPKE94tzBUhpZG_OvqAC3D3XaWJIGIn0eeIZnfaofO1C3LNzGphd_rEv3pIimsW9lO-4FOw6D44T3sNsQ5yXQ";//假定獲取的ACCESS TOKEN為這段代碼.
//臨時(shí)二維碼
$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";//創(chuàng)建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對(duì)面二維碼圖片代碼.
$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));
}
PHP應(yīng)用在服務(wù)器空間運(yùn)行這段代碼,瀏覽器會(huì)生成一張二維碼圖片.
PHP應(yīng)用獲取非微信功能接口,比如獲取交通信息、天氣預(yù)報(bào).
PHP應(yīng)用以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持維易PHP.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/2564.html