微信公眾號平臺開發(三):幾大微信介面的呼叫
文章結構
1、怎麼呼叫微信高階介面
2、呼叫微信高階幾大例項
2.1、呼叫自定義選單介面
2.2、客服介面
2.3、生成二維碼
3、獲取非微信功能介面,如天氣網的天氣介面、股票網站的資訊介面。
怎麼呼叫微信高階介面
微信高階介面和微信普通介面的區別
後臺伺服器可以呼叫微信的介面與微信使用者進行訊息的通訊,這樣的行為就是在呼叫微信的介面,這些介面是基礎介面,你不需要任何付費行為或者身份認證行為就可以呼叫。但是有一些高階介面,你的微信公眾號必須達到一定的許可權如通過微信認證才能呼叫自定義選單、微信支付等高階功能。
不過微信公眾帳號的測試號系統可以應用這些高階介面(微信支付等涉及交易的介面除外)。
微信高階介面的呼叫
微信高階介面的呼叫需要先呼叫一個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"];
?>
2、呼叫微信高階介面
呼叫自定義選單功能
//建立一個自定義選單的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檔案一定要在伺服器執行才會產生效果。
其它高階介面的呼叫都同調用自定義選單一樣。
呼叫客服介面
當微信使用者主動發訊息 給微信公眾帳號的時候(包括髮送資訊、單擊自定義選單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資料庫。
再簡單一點,一個檢視快遞包括地址的微信公眾平臺。你每次輸入同一個訂單編號,後臺卻能夠回覆訂單每次所在的位置(針對同樣的文字卻可以做出不同的迴應)就像是人工回覆一樣,這就是客服介面 。
生成二維碼介面
二維碼型別分兩種,分別是臨時二維碼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、呼叫微信高階幾大例項 2.1、呼叫自定義選單介面 2.2、客服介面 2.3、生成二維碼 3、獲取非微信功能介面,如天氣網的天氣介面、股票網站的資訊介面。 怎麼呼叫微信高階介
微信公眾號之接入微信公眾號伺服器開發(二)
說明:該篇部落格是博主一字一碼編寫的,實屬不易,請尊重原創,謝謝大家! 接著上一篇部落格繼續往下寫 :https://blog.csdn.net/qq_41782425/article/details/85319116 一丶敘述 開發說明 Python程式碼實
微信公眾號之接入微信公眾號伺服器開發(一)
說明:該篇部落格是博主一字一碼編寫的,實屬不易,請尊重原創,謝謝大家! 一丶概述 公眾號與公眾平臺 1. 微信賬號型別 個人號 公眾號 訂閱號 服務號 企業號 2. 公眾號 微信公眾號主要面向名人、政府、媒體、企
微信公眾號平臺開發(二)信息的分類.md
數據 msg 額外 環境 con pic 響應 我們 高質量 在上一篇博客中,我們只是簡單地與微信服務器建立了連接,接下來就是從微信服務器中接收信息了。在SecurityController中,我定義了兩個方法(get和post)。Get方法是我們用來與微信服務器建立連接,
微信公眾號爬坑(react)
方案 頁面 esp scope tor 公眾號 span com undefine 1. wx is not undefined 解決方案: 在引入微信 JS-SDK 前,設置 define 和 require 值為 null。代碼如下: 1 <script
微信公眾號入門筆記(一)啟用伺服器配置
最近研究了下微信公眾號開發,這幾篇文章是我的筆記。 首先你要有個公眾號,去https://mp.weixin.qq.com/註冊。現在個人只能註冊訂閱號,訂閱號有些介面是不開放的,沒辦法我們只好先看看它開放的介面了。 我們登入後臺,去看一下公眾平臺開發者文件,“開發者必
微信公眾號入門筆記(四)獲取access_token
作者:zhutulang 以下是微信公眾平臺開發者文件中擷取的內容: access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_t
《扶持中小微企業發展政策指南》(三):中國制造2025
價值鏈 品牌管理 智能控制 卓越 操作系統 回收 開發 專用 發展 政策依據 國務院《關於印發<中國制造2025>的通知》(國發〔2015〕28號) 發布部門 國務院 戰略任務和重點 (1)提高國家制造業創新能力 加強關鍵核心技術研發。強化企業技術創新主體地位,
星雲鏈智能合約開發(三):運行星雲鏈
星雲鏈智能合約開發 安裝星雲鏈 創世區塊配置 在項目根目錄下的conf/default/genesis.conf,為創世區塊配置文件。 meta { # 每條鏈的唯一標識 # 每個區塊和交易只會屬於一條唯一的鏈,保證安全性 chain_id: 100 } consensus { #
即時通訊音視訊開發(三):視訊編解碼之編碼基礎
前言 即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。 系列文章 《即時通訊音視訊開發(一):視訊編解碼之理論概述》 《即時通訊音視訊
Python爬蟲開發(三):資料儲存以及多執行緒
0×00 介紹 本文我們就兩個方面來討論如何改進我們的爬蟲:資料儲存和多執行緒,當然我承認這是為我們以後要討論的一些東西做鋪墊。 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論
iOS 元件化開發(三):載入資原始檔
經過前兩篇文章的學習,相信對元件化開發有了大致的瞭解,那我們這篇文章就來講講資原始檔的載入吧 這裡我新建了一個LXFMain元件庫,主要是用來顯示TabBar的玩意,然後再進行元件化抽離出來,其中的過程這裡不再贅述,還沒了解過的同學建議先閱讀下這兩篇文
java後端開發(三):開發框架解讀
前言 本篇講述後端開發中用到的主要框架,旨在瞭解框架的意義和種類 什麼是框架 我相信對於大部分開發人員來說,框架再熟悉不過了,但是要給未接觸過的人講明白恐怕是非常難的,本節的目的就是讓讀者對於框架有50%的認知,剩下的需要在實踐中體會。 框架與P
Qt移動應用開發(三):使用精靈圖片實現幀動畫
上一篇博文講到了Qt Quick對於動畫的一般支援,動畫的形式多樣,配合不同的插值函式,可以幾乎實現所有想要的動畫效果,而對於遊戲的一些特殊的效果比如說幀動畫,Qt更是有專門的類來實現。下面我們就來看看Qt Quick中究竟是對幀動畫是如何實現的吧。 原
MFC框架介面開發(三):多文件介面
介紹 多文件介面中,一個主框架內可以有多個子框架。每個子框架可以看成是一個單文件的主框架。 例項 1.建立一個多文件程式,去掉文件/檢視框架支援; 2.新建一個檢視類,作為每個子框架視窗將要顯示的檢視: class CMainView:pu
Unity編輯器開發(三):實戰、開發一個AB包編輯器工具
前言 本系列將會從零開始開發一個輕量級的AB包編輯器工具(也就是打包或者管理AssetBundle的工具),完成以後,他的最終應用介面可能是如下這樣的: 介面詳解: 1、Create:建立一個新的空的AB包; 2、Rename:重新命名當前選中的AB
Android Studio下的NDK開發(三):C中通過JNIEnv訪問Java中的內容
1、編寫java native類 直接上程式碼 public class JniUntil { public static int a=7; public static int b=8; public static int sum(int a,
使用Eclipse RCP進行桌面程式開發(三):檢視和透檢視
Eclipse RCP開發中,和使用者進行互動最多的介面,應該是檢視了,而透檢視就是將已有的檢視、選單、工具欄、編輯器等等進行組合和佈局。看完這一節,我們就可以建立如下圖這樣的程式介面了。 首先我們來介紹一下檢視,建立一個檢視其實非常簡單,只要從org.eclipse.ui
(轉)我所經歷的大數據平臺發展史(三):互聯網時代 ? 上篇
舉例 不堪 電信 oop poc 這樣的 數據庫 .com 智能 編者按:本文是松子(李博源)的大數據平臺發展史系列文章的第二篇(共四篇),本系列以獨特的視角,比較了非互聯網和互聯網兩個時代以及傳統與非傳統兩個行業。是對數據平臺發展的一個回憶,對非互聯網、互聯網,從
opencv學習筆記(三):幾種去噪濾波器的實現
現在在上數字影象處理的課程,最近的一次作業要求不用OpenCV自帶的濾波器函式來實現幾種濾波器,以實現對加入椒鹽噪聲的影象的去噪。也是對markdown編輯器的一次練習。 椒鹽噪聲 椒鹽噪聲是一種很簡單的噪聲,即隨機將影象中一定數量的畫素點設定為0(黑)