程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php微信高級接口調用方法(自定義菜單接口、客服接口、二維碼),php客服

php微信高級接口調用方法(自定義菜單接口、客服接口、二維碼),php客服

編輯:關於PHP編程

php微信高級接口調用方法(自定義菜單接口、客服接口、二維碼),php客服


怎麼調用微信高級接口

微信高級接口和微信普通接口的區別

後台服務器可以調用微信的接口與微信用戶進行訊息的通信,這樣的行為就是在調用微信的接口,這些接口是基礎接口,你不需要任何付費行為或者身份認證行為就可以調用。但是有一些高級接口,你的微信公眾號必須達到一定的權限如通過微信認證才能調用自定義菜單、微信支付等高級功能。
不過微信公眾帳號的測試號系統可以應用這些高級接口(微信支付等涉及交易的接口除外)。

微信高級接口的調用

微信高級接口的調用需要先調用一個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 Token
curl_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)); 
}

在服務器空間運行這段代碼,浏覽器會生成一張二維碼圖片。

獲取非微信功能接口,比如獲取交通信息、天氣預報。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持幫客之家。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved