php微信高級接口調(diào)用方法(自定義菜單接口、客服接口、二維碼)
怎么調(diào)用微信高級接口
微信高級接口和微信普通接口的區(qū)別
后臺服務(wù)器可以調(diào)用微信的接口與微信用戶進(jìn)行訊息的通信,這樣的行為就是在調(diào)用微信的接口,這些接口是基礎(chǔ)接口,你不需要任何付費(fèi)行為或者身份認(rèn)證行為就可以調(diào)用。但是有一些高級接口,你的微信公眾號必須達(dá)到一定的權(quán)限如通過微信認(rèn)證才能調(diào)用自定義菜單、微信支付等高級功能。
不過微信公眾帳號的測試號系統(tǒng)可以應(yīng)用這些高級接口(微信支付等涉及交易的接口除外)。
微信高級接口的調(diào)用
微信高級接口的調(diào)用需要先調(diào)用一個(gè)token_access接口,只有先調(diào)用這個(gè)接口才能調(diào)用其它高級接口。
如下:連通高級接口示意圖
調(diào)用token_access需要用到appID和appsecreset(在微信公眾號平臺開發(fā)(一)中已經(jīng)講述這兩者的由來)
調(diào)用代碼如下
<?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ì)話過程,通過這個(gè)會(huì)話可以返回一段字符串{"access_token":"NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjb"} 這就是我們要獲得的Access Token了。在調(diào)用高級功能接口的時(shí)候就靠它。這個(gè)過程用的時(shí)候直接引用就好,不需要深究,這個(gè)cURL系統(tǒng)相關(guān)函數(shù)有點(diǎn)多而且復(fù)雜。 $ch = curl_init();//初始化 curl_setopt($ch, CURLOPT_URL, $url);//與url建立對話 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í)行對話,獲取接口數(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"]; ?>
調(diào)用微信高級接口
1)、調(diào)用自定義菜單功能
//創(chuàng)建一個(gè)自定義菜單的json字符串 $jsonmenu = '{ "button":[ { "name":"關(guān)于我們", "sub_button":[ { "type":"click", "name":"公司簡介", "key":"公司簡介" }, { "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":"微信平臺", "key":"微信平臺" }, { "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)在微信公眾號界面添加菜單的功能。
當(dāng)我們?yōu)槲⑿殴娞柼砑硬藛魏笤趺礃釉O(shè)置點(diǎn)擊菜單時(shí)會(huì)出現(xiàn)相應(yīng)的效果呢?
這里涉及到另一種xml類型的數(shù)據(jù)傳遞:
<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> //上面是點(diǎn)擊click菜單的數(shù)據(jù)傳遞類型,數(shù)據(jù)會(huì)發(fā)送給后臺服務(wù)器,然后服務(wù)器做出響應(yīng)。
菜單類型有多種,xml類型差別,詳細(xì)情況可以在微信公眾號平臺上查看相應(yīng)文檔。
*這里要說明的是只要你有微信公眾號的appID和appsecret,在任何服務(wù)器空間運(yùn)行這段php代碼都可以進(jìn)入微信服務(wù)器調(diào)用相應(yīng)功能,不一定非要在進(jìn)行了token驗(yàn)證的服務(wù)器下運(yùn)行。token驗(yàn)證是為了后臺服務(wù)器進(jìn)行判斷數(shù)據(jù)來源是否是來自微信服務(wù)器,與調(diào)用微信服務(wù)器的高級接口并沒有多大的關(guān)聯(lián)。
php文件一定要在服務(wù)器運(yùn)行才會(huì)產(chǎn)生效果。
其它高級接口的調(diào)用都同調(diào)用自定義菜單一樣。
2)、調(diào)用客服接口
當(dāng)微信用戶主動(dòng)發(fā)消息 給微信公眾帳號的時(shí)候(包括發(fā)送信息、單擊自定義菜單click事件、訂閱事件、掃描二維碼、支付成功事件)微信會(huì)把消息數(shù)據(jù)推送給開發(fā)者。開發(fā)者在一段時(shí)間內(nèi)可以調(diào)用客服接口消息,通過post一個(gè)JSON數(shù)據(jù)包來發(fā)送消息給用戶。
$openid = "o7Lp5t6n59DeX3U0C7Kric9qEx-Q";//微信用戶都有一個(gè)openID
下圖所示即為openID的獲取方式。
$data = '{ "touser":"'.$openid.'", "msgtype":"text", "text": { "content":"Hello World" } }';//通過基礎(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; }
客服接口發(fā)送圖文消息、音樂消息、視頻消息具體格式請參看微信公眾平臺上的開發(fā)幫助文檔。
客服接口可以和消息接口混合使用。
這里大家可能不明白既然可以直接通過被動(dòng)響應(yīng)消息的接口發(fā)送xml數(shù)據(jù)給用戶,為什么還需要這樣一個(gè)客服接口?可以這樣理解,被動(dòng)響應(yīng)消息是一次性的只能回復(fù)一次相同的消息。如你向一個(gè)音樂平臺輸入一個(gè)歌星名稱,通過被動(dòng)響應(yīng)方式發(fā)送的消息永遠(yuǎn)只會(huì)回復(fù)你一首相同的歌。但是通過客服接口方式可以每次回復(fù)不同的 歌曲,這涉及到MySQL數(shù)據(jù)庫。
再簡單一點(diǎn),一個(gè)查看快遞包括地址的微信公眾平臺。你每次輸入同一個(gè)訂單編號,后臺卻能夠回復(fù)訂單每次所在的位置(針對同樣的文本卻可以做出不同的回應(yīng))就像是人工回復(fù)一樣,這就是客服接口 。
3)、生成二維碼接口
二維碼類型分兩種,分別是臨時(shí)二維碼eh 和永久二維碼,前者與過期時(shí)間,最長是1800s。
生成二維碼你需要調(diào)用3個(gè)接口,
第一個(gè)是access_token
第二個(gè)是生成ticket接口
第三個(gè)是通過第二個(gè)接口生成的ticket來換取二維碼圖片。
$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對面二維碼圖片代碼。 $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)); }
在服務(wù)器空間運(yùn)行這段代碼,瀏覽器會(huì)生成一張二維碼圖片。
獲取非微信功能接口,比如獲取交通信息、天氣預(yù)報(bào)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 微信小程序開發(fā)之獲取用戶手機(jī)號碼(php接口解密)
- ThinkPHP框架實(shí)現(xiàn)的微信支付接口開發(fā)完整示例
- php獲取微信基礎(chǔ)接口憑證Access_token
- PHP封裝的微信公眾平臺接口開發(fā)操作類完整示例
- thinkPHP微信分享接口JSSDK用法實(shí)例
- 詳解使用php調(diào)用微信接口上傳永久素材
- PHP實(shí)現(xiàn)微信JS-SDK接口選擇相冊及拍照并上傳的方法
- PHP配合微信小程序?qū)崿F(xiàn)獲取手機(jī)號碼詳解
- 微信小程序結(jié)合ThinkPHP5授權(quán)登陸后獲取手機(jī)號
- PHP請求微信接口獲取用戶電話號功能示例
相關(guān)文章
使用PHPStudy搭建Cloudreve網(wǎng)盤服務(wù)的流程步驟
自云存儲(chǔ)概念興起已經(jīng)有段時(shí)間了,各互聯(lián)網(wǎng)大廠也紛紛加入戰(zhàn)局,一時(shí)間公有云盤遍地開花,今天我們就為大家介紹,如何使用Cpolar與Cloudreve,在個(gè)人Windows電腦上搭建一個(gè)強(qiáng)大的PHP云盤系統(tǒng),需要的朋友可以參考下2024-02-02phalcon model在插入或更新時(shí)會(huì)自動(dòng)驗(yàn)證非空字段的解決辦法
這篇文章主要介紹了phalcon model在插入或更新時(shí)會(huì)自動(dòng)驗(yàn)證非空字段的解決辦法,需要的朋友可以參考下2016-12-12Symfony2針對輸入時(shí)間進(jìn)行查詢的方法分析
這篇文章主要介紹了Symfony2針對輸入時(shí)間進(jìn)行查詢的方法,結(jié)合實(shí)例形式分析了Symfony2針對mysql及MongoDB的輸入時(shí)間進(jìn)行轉(zhuǎn)換與查詢的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06PHP實(shí)現(xiàn)財(cái)務(wù)審核通過后返現(xiàn)金額到客戶的功能
有這么一個(gè)返現(xiàn)的系統(tǒng),當(dāng)前端客戶發(fā)起提現(xiàn)的時(shí)候,后端就要通過審核這筆返現(xiàn)訂單,才可以返現(xiàn)到客戶的賬號里。這篇文章主要介紹了PHP實(shí)現(xiàn)財(cái)務(wù)審核通過后返現(xiàn)金額到客戶 ,需要的朋友可以參考下2019-07-07Zend Framework校驗(yàn)器Zend_Validate用法詳解
這篇文章主要介紹了Zend Framework校驗(yàn)器Zend_Validate用法,結(jié)合實(shí)例形式分析了校驗(yàn)器Zend_Validate的功能、使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-12-12一個(gè)好用的PHP驗(yàn)證碼類實(shí)例分享
這篇文章主要介紹了一個(gè)好用的PHP驗(yàn)證碼類實(shí)例,有需要的朋友可以參考一下2013-12-12