1. 程式人生 > >微信公眾平臺開發入門教程

微信公眾平臺開發入門教程

在這篇微信公眾平臺開發教程中,我們假定你已經有了PHP語言程式、MySQL資料庫、計算機網路通訊、及HTTP/XML/CSS/JS等基礎。

我們將使用微信公眾賬號方倍工作室作為講解的例子,二維碼見左側。

本系列教程將引導你完成如下任務:

  1. 建立新浪雲端計算平臺應用
  2. 啟用微信公眾平臺開發模式
  3. 體驗常用接收訊息及傳送訊息型別
  4. 瞭解資料收發原理及訊息格式

第一章 申請伺服器資源

建立新浪雲端計算應用

申請賬號

我們使用SAE新浪雲端計算平臺作為伺服器資源,並且申請PHP環境+MySQL資料庫作為程式執行環境。
申請地址為:

直接點選上述網址,可以看到右上角微博登入的連結。

點選進入之後,使用新浪微博賬號登入 

登入之後,按照提示註冊個人資訊即可。 

建立新應用 http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 

回到首頁,在選單頂部選擇 控制檯 ,再選擇 雲應用SAE 

進入SAE應用列表

點選下側的建立新應用,這時會彈出提示, 禁止放置違法違規內容,點選繼續建立,彈出如下視窗。

開發語言選擇PHP,執行環境為標準環境,語言版本5.3。二級域名自己想一個名字,也可以就直接用自己的QQ號。應用名稱可以用系統預設填的。

此處配置和本教程必須完全一樣!!!

此處配置和本教程必須完全一樣!!!

此處配置和本教程必須完全一樣!!!

然後點選左下方的建立應用

 

應用建立成功。並自動跳轉到應用列表中,可以看到已經有剛才建立的1354386063這個應用。

建立版本 http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 

點選剛才建立的應用名稱,進入應用主頁。

點選左側的應用管理下面的程式碼管理

在程式碼管理中,選擇使用SVN託管的方式。不要使用雲空間和Git的方式!

跳轉到程式碼管理

點選右側的“建立版本”

版本號預設為1,點選建立,有時會彈出安全登入,需要輸入安全密碼,如果不知道或者忘記了,就點裡面的找回密碼,重新設定一下。:

驗證通過之後,如下所示

到這裡,就成功建立了一個域名URL為 http://1354386063.sinaapp.com/ 

的應用了,記住你的這個URL,後面將會用到。

 原文:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 

上傳程式碼 http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 

下述程式碼是一個微信介面檔案,看不懂沒有關係,你可以暫時不用弄明白它的意思。

複製程式碼
<?php
/*
    方倍工作室 http://www.cnblogs.com/txw1958/
    CopyRight 2013 www.fangbei.org  All Rights Reserved
*/
header('Content-type:text');
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
    $wechatObj->valid();
}else{
    $wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            header('content-type:text');
            echo $echoStr;
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }

    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->Content);
            $time = time();
            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        <FuncFlag>0</FuncFlag>
                        </xml>";
            if($keyword == "?" || $keyword == "?")
            {
                $msgType = "text";
                $contentStr = date("Y-m-d H:i:s",time());
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;
            }
        }else{
            echo "";
            exit;
        }
    }
}
?>
複製程式碼

我們將使用上述程式碼與微信公眾平臺對接。直接下載方倍工作室已經壓縮好的上述程式碼的zip檔案點此進入下載

回到SAE的程式碼管理介面中。

再選擇“上傳程式碼包”,點選上傳檔案,選擇剛才的index.zip檔案,點選上傳,上傳成功後中間是一個綠色的橫條,如下所示

如果沒有綠色的橫條,表示上傳失敗,需要重試。可以考慮在Chrome瀏覽器下重試一下。

點選編輯程式碼按鈕,

 有時候需要輸入自己的安全密碼,如果不記得了就點選“找回密碼”。

安全驗證成功後繼續之前的操作。

我們可以看到index.php已經上傳成功,雙擊可以檢視編輯裡面的程式碼

新浪雲應用的建立就成功了。

經測試,有的應用會自動出現一個叫index.html的檔案,右鍵點選該檔案,並刪除!!

只需要我們自己上傳的index.php和config.yaml檔案就可以了。多餘的要刪除!!!

實名認證

新浪SAE要求使用者實名認證之後才能正常使用新浪雲。實名認證是免費的。認證後可獲得200個雲豆。

在左側目錄列表中,找到實名認證目錄,在頁面中上傳身份證並等待稽核,稽核成功之後,如下圖所示。

充值(本步驟可選擇性進行)

新浪雲SAE實行的是配額免費+超額付費的方式,相關標準請檢視SAE價格體系介紹。初期對於大部分使用者來說免費配額已夠用,如果您將來使用量比較大建議預先至少充值100元獲得10000雲豆,以免超額後應用被禁用而影響業務。

第二章 啟用開發模式

微信公眾平臺開發模式

①個人開發者使用測試號

個人學習開發建議使用測試號 

登入後,在介面配置資訊中填寫剛才生成的URL地址和Token.

URL地址就是QQ號的二級域名地址:http://1.1354386063.applinzi.com/ 或者  http://1354386063.applinzi.com/都可以。

Token在程式中固定為 weixin

填寫好提交

頂部顯示配置成功

如果提示“token驗證失敗”,多重次幾次。

②企業開發者並且有訂閱號或者服務號

登入微信公眾平臺後臺,在左側列表中最下方,找到“ 基本配置 ”,點選進入

進入伺服器配置填寫框。

點選“修改配置”按鈕

此處的URL為上篇中介紹的雲應用的域名,而Token在index.php中定義為weixin。EncodingAESKey則不用填,點選“隨機生成”讓自動生成一個,訊息加解密方式選擇“明文模式”,然後點選“提交”按鈕。

在彈出的提示框中,點選“確定”

配置修改後如圖所示,再點選“啟用”按鈕

詢問“是否確定開啟伺服器配置”,點選“確定”

如果提示“token驗證失敗”,可以先重次幾次,微信伺服器有時候不穩定。另外新浪SAE要求進行實名認證,請先上傳身份證進行實名認證並通過稽核後再試!

如果還是失敗,請先用微信偵錯程式測試一下url和token是否正確,點此檢視詳細測試方法

成功啟用後如圖。

恭喜,你成功啟用開發模式。

自動回覆

在上面的例子中,實現了一個傳送“?”就能回覆當前時間的功能。
效果如下:

至此,你的微信公眾平臺賬號已經實現自動回覆了。 

第三章 常用訊息型別接收與傳送

全能型訊息程式碼程式碼

你可以使用微信支付購買我們的全能版微信開發入門教程程式碼,僅需要¥1元,支援一下我們。

微信掃描二維碼關注後返回購買圖文連結,然後進入購買:

將程式碼下載後按照上述同樣的方法配置到介面中,可以體驗到更多,更強的功能。

效果圖如下

  

  

 

 

你將體驗到微信公眾賬號中最常見的接收訊息及傳送訊息的型別。

第四章 資料收發原理及訊息資料格式

★ 本章是理論部分,初學者會比較難以理解,不用太過追究,看不懂可以跳過去。

開發模式成為開發者時的訊息校驗原理

在開發者首次提交驗證申請時,微信伺服器將傳送GET請求到填寫的URL上,並且帶上四個引數(signature、timestamp、nonce、echostr),開發者通過對簽名(即signature)的效驗,來判斷此條訊息的真實性。

此後,每次開發者接收使用者訊息的時候,微信也都會帶上前面三個引數(signature、timestamp、nonce)訪問開發者設定的URL,開發者依然通過對簽名的效驗判斷此條訊息的真實性。效驗方式與首次提交驗證申請一致。

引數 描述
signature 微信加密簽名,signature結合了開發者填寫的token引數和請求中的timestamp引數、nonce引數。
timestamp 時間戳
nonce 隨機數
echostr 隨機字串

開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信伺服器,請原樣返回echostr引數內容,則接入生效,成為開發者成功,否則接入失敗。

加密/校驗流程如下:
1. 將token、timestamp、nonce三個引數進行字典序排序
2. 將三個引數字串拼接成一個字串進行sha1加密
3. 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信

啟用介面是由程式碼中的checkSignature()函式來實現校驗的。如果對這一原理難以理解,可以暫時不用深究,繼續看下面

成為開發者後訊息收發時的原理

上一章節中圖,當用戶傳送一個“?”時,系統回覆了一個時間

這一原理的訊息流程圖如下所示。

從上圖可以看出,使用者在傳送一個?後,微信伺服器將組裝一個訊息傳送給我們自己的伺服器,自己的伺服器然後回覆一個時間,並且將該時間也按一定的規則組裝,回覆給公眾賬號,公眾賬號再回復給使用者,在這個收發過程中,傳送方和接收方進行了調換(ToUserName和FromUserName值互換),收發都是以xml格式在後臺進行傳輸的,

所以掌握各種訊息型別的接收回復就是進行微信公眾平臺開發的基礎

下面對前面所述的各種訊息型別講解其XML資料包的格式。

各種收發訊息的XML資料包分析

接收訊息

1. 文字(包括表情)
接收文字及表情

文字後臺格式:

複製程式碼
<xml>
 <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
 <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
 <CreateTime>1359028446</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[測試文字]]></Content>
 <MsgId>5836982729904121631</MsgId>
</xml>
複製程式碼

表情後臺格式

複製程式碼
<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
<FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
<CreateTime>1359044526</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[/::)/::~/::B/::|/:8-)]]></Content>
<MsgId>5837051792978241864</MsgId>
</xml>
複製程式碼

XML格式講解

複製程式碼
ToUserName 訊息接收方微訊號,一般為公眾平臺賬號微訊號
FromUserName 訊息傳送方微訊號
CreateTime 訊息建立時間
MsgType 訊息型別;文字訊息為text
Content 訊息內容
MsgId 訊息ID號
複製程式碼

可以看出,文字和表情的訊息型別均為文字

2. 圖片
接收圖片

後臺格式:

複製程式碼
<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
<FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
<CreateTime>1359028479</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[http://mmbiz.qpic.cn/mmbiz/L4qjYtOibummHn90t1mnaibYiaR8ljyicF3MW7XX3BLp1qZgUb7CtZ0DxqYFI4uAQH1FWs3hUicpibjF0pOqLEQyDMlg/0]]></PicUrl>
<MsgId>5836982871638042400</MsgId>
<MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId>
</xml>
複製程式碼

XML格式講解

複製程式碼
ToUserName 訊息接收方微訊號,一般為公眾平臺賬號微訊號
FromUserName 訊息傳送方微訊號
CreateTime 訊息建立時間
MsgType 訊息型別;圖片訊息為image
PicUrl 圖片連結地址,可以用HTTP GET獲取
MsgId 訊息ID號
複製程式碼

3. 語音
接收語音

後臺格式:

複製程式碼
<xml>
    <ToUserName><![CDATA[gh_d035bb259cf5]]></ToUserName>
    <FromUserName><![CDATA[owEUGj4BW8yeWRvyEERiVGKwAF1Q]]></FromUserName>
    <CreateTime>1364883809</CreateTime>
    <MsgType><![CDATA[voice]]></MsgType>
    <MediaId><![CDATA[JfmCezZ3Cwp0FwUvMADwwhvp-XScuvpictubpw0c6ALyA8tj3HLU4PoXzMpIY72P]]></MediaId>
    <Format><![CDATA[amr]]></Format>
    <MsgId>5862131322594912688</MsgId>
</xml>
複製程式碼

XML格式講解

複製程式碼
ToUserName 訊息接收方微訊號,一般為公眾平臺賬號微訊號
FromUserName 訊息傳送方微訊號
CreateTime 訊息建立時間
MsgType 訊息型別;語音訊息為voice
MediaId 媒體ID
Format 語音格式,這裡為amr
MsgId 訊息ID號
複製程式碼
附:AMR介面簡介
全稱Adaptive Multi-Rate,主要用於移動裝置的音訊,壓縮比比較大,但相對其他的壓縮格式質量比較差,由於多用於人聲,通話,效果還是很不錯的。

4. 視訊

接收視訊

後臺格式:

複製程式碼
xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
<FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
<CreateTime>1359028186</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[DBVFRIj29LB2hxuYpc0R6VLyxwgyCHZPbRj_IIs6YaGhutyXUKtFSDcSCPeoqUYr]]></MediaId>
<ThumbMediaId><![CDATA[mxUJ5gcCeesJwx2T9qsk62YzIclCP_HnRdfTQcojlPeT2G9Q3d22UkSLyBFLZ01J]]></ThumbMediaId>
<MsgId>5836981613212624665</MsgId>
</xml>
複製程式碼

XML格式講解

複製程式碼
ToUserName 訊息接收方微訊號,一般為公眾平臺賬號微訊號
FromUserName 訊息傳送方微訊號
CreateTime 訊息建立時間
MsgType 訊息型別;視訊訊息為video
MediaId 媒體ID
ThumbMediaId 媒體縮略ID?
MsgId 訊息ID號
複製程式碼

5. 位置

接收位置

後臺格式:

複製程式碼
<xml>
<ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
<FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
<CreateTime>1359036619</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>22.539968</Location_X>
<Location_Y>113.954980</Location_Y>
<Scale>16</Scale>
<Label><![CDATA[中國廣東省深圳市南山區華僑城深南大道9789號 郵政編碼: 518057]]></Label>
<MsgId>5837017832671832047</MsgId>
</xml>
複製程式碼

XML格式講解

複製程式碼
 ToUserName 訊息接收方微訊號,一般為公眾平臺賬號微訊號
 FromUserName 訊息傳送方微訊號
 CreateTime 訊息建立時間
 MsgType 訊息型別,地理位置為location
 Location_X 地理位置緯度
 Location_Y 地理位置經度
 Scale 地圖縮放大小
 Label 地理位置資訊
 MsgId 訊息ID號
複製程式碼

6. 連結

接收連結

後臺格式:

複製程式碼
<xml>
<ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> 
<FromUserName><![CDATA[oIDrpjl2LYdfTAM-oxDgB4XZcnc8]]></FromUserName> 
<CreateTime>1359709372</CreateTime> 
<MsgType><![CDATA[link]]></MsgType> 
<Title><![CDATA[微信公眾平臺開發者的江湖]]></Title> 
<Description><![CDATA[陳坤的微信公眾號這段時間大火,大家..]]></Description> 
<Url><![CDATA[http://israel.duapp.com/web/photo.php]]></Url> 
<MsgId>5839907284805129867</MsgId> 
</xml> 
複製程式碼

XML格式講解

複製程式碼
 ToUserName 訊息接收方微訊號,一般為公眾平臺賬號微訊號
 FromUserName 訊息傳送方微訊號
 CreateTime 訊息建立時間
 MsgType 訊息型別,連結為link
 Title 圖文訊息標題
 Description 圖文訊息描述
 Url 點選圖文訊息跳轉連結
 MsgId 訊息ID號
複製程式碼

回覆訊息

只介紹三種格式的訊息:文字、圖文、音樂。其中圖文訊息包括單條圖文訊息和多條圖文訊息,展示方式有一點點不同。

1. 文字訊息格式
回覆文字

後臺格式:

複製程式碼
<xml>
<ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName>
<FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName>
<CreateTime>1359036631</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[【深圳】天氣實況 溫度:27℃ 溼度:59% 風速:東北風3級
11月03日 週日 27℃~23℃ 小雨 東北風4-5級
11月04日 週一 26℃~21℃ 陣雨 微風
11月05日 週二 27℃~22℃ 陰 微風]]></Content>
<FuncFlag>0</FuncFlag>
</xml>
複製程式碼

XML格式講解

複製程式碼
 FromUserName 訊息傳送方
 ToUserName 訊息接收方
 CreateTime 訊息建立時間
 MsgType 訊息型別,文字訊息必須填寫text
 Content 訊息內容,大小限制在2048位元組,欄位為空為不合法請求
 FuncFlag 星標欄位
複製程式碼

 
2. 圖文訊息格式
2.1 單條圖文訊息
回覆單條圖文


後臺格式:

複製程式碼
<xml>
    <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName>
    <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName>
    <CreateTime>1359011899</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
    <Content><![CDATA[]]></Content>
    <ArticleCount>1</ArticleCount>
    <Articles>
        <item>
            <Title><![CDATA[[蘋果產品資訊查詢]]></Title>
            <Des