最近公司用到了微信公眾平台,所以研究了一下微信公眾號的開發技術,總體來說比較簡單,結合現有的平台核技術,實現起來非常方便。
首先先來了解一下微信公眾平台。
“微信,是一個生活方式” ,這是微信的自我評價,是不是覺得如果那天不在朋友圈裡分享一下自己的最新狀態,
並且收到幾個贊和評價的話,會覺得空虛寂寞呢?它實實在在的改變了我們的生活方式。
“ 微信,也是一個生意方式 ”,在微信成為我們日常必備之app的同時,它同樣具備巨大的的商業
或許不應該稱為潛力,因為有很多人已經獲利,名人們在微信上開設公眾賬戶來吸金,商家來做推廣,
服務行業借此拓展渠道,甚至微信已經支持支付了, 還有越來越的自媒體在微信平台湧現出來。
這篇文章就是介紹如何快速的成為公眾平台開發者,由於個人只能申請訂閱號,因此本文是以訂閱號為例。
關於訂閱號和服務號的區別,請參見 微信公眾平台服務號、訂閱號的相關說明。
從微信用戶角度簡單來說:
訂閱號 主要用於信息輻射,典型的如各家 新聞媒體 。
服務號 主要由於自助服務,典型的如 招商銀行 。
關於微信公眾帳號注冊的步驟就不再多說了,可以找到大量的圖文教程。
帳號注冊成功之後,需要驗證自己的服務器,如果你沒有自己的服務器,那可以用新浪SAE或者百度BAE,本文采用的是新浪SAE平台來搭建服務器。
注冊過程略,使用新浪SAE創建應用,可以選擇應用開發框架,選項中有比較熱門的開發框架,選擇微信公眾平台phpSDK,點擊後跳轉到介紹頁面,點擊安裝框架,系統會生成一個搭建好的微信公眾平台應用,為了方便開發,我們可以使用svn來管理此應用代碼,關於svn搭建可參見sae代碼部署手冊。
使用新浪SAE是比較方便的,如果我們有自己的服務器,可以把代碼clone到自己的服務器上,下面來看一下代碼
首先定義一個Wechat的基類
<? __construct(, = (->isValid() && ->validateSignature( (['echostr' ->debug = ((&, 'errorHandler' = () (['HTTP_RAW_POST_DATA'], 'SimpleXMLElement', ->request = (, (['echostr' validateSignature( = ['signature' = ['timestamp' = ['nonce' = (, , ( (()) == getRequest( = ( === -> = ( ((->request[ ->request[ responseText(, = 0 ( TextResponse(->getRequest('fromusername'), ->getRequest('tousername'), , responseMusic(, , , , = 0 ( MusicResponse(->getRequest('fromusername'), ->getRequest('tousername'), , , , , responseNews(, = 0 ( NewsResponse(->getRequest('fromusername'), ->getRequest('tousername'), , responseVoice(, = 0 ( TextResponse(->getRequest('fromusername'), ->getRequest('tousername'), , (->getRequest('msgtype' 'event': (->getRequest('event' 'subscribe': -> 'unsubscribe': -> 'LOCATION': -> 'CLICK': -> 'VIEW': -> 'text': -> 'image': -> 'location': -> 'link': -> 'voice': -> : -> errorHandler(, , , ( ! -> = => 'Warning', => 'Notice', => 'User Error', => 'User Warning', => 'User Notice', => 'Strict', E_RECOVERABLE_ERROR => 'Recoverable Error', E_DEPRECATED => 'Deprecated', E_USER_DEPRECATED => 'User Deprecated', = <<< %s: % : % Line: % ->responseText((, [], , , __construct(, , ->toUserName = ->fromUserName = ->funcFlag = TextResponse = <<< <xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>%s<FuncFlag> </xml> __construct(, , , = 0 parent::__construct(, , ->content = (->template, ->toUserName, ->fromUserName, (), ->content, -> MusicResponse = <<< <xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <MusicUrl><![CDATA[%s]]></MusicUrl> <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> </Music> <FuncFlag>%s<FuncFlag> </xml> __construct(, , , , , , parent::__construct(, , ->title = ->description = ->musicUrl = ->hqMusicUrl = (->template, ->toUserName, ->fromUserName, (), ->title, ->description, ->musicUrl, ->hqMusicUrl, -> NewsResponse = = <<< <xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles> % </Articles> <FuncFlag>%s<FuncFlag> </xml>' }
此基類我稍作了更改,包含了能實現的微信所有的接口,通過繼承 `Wechat` 類進行擴展,例如通過重寫 `onSubscribe()` 等方法響應關注等請求,下面是實現的示例代碼:
<? ('src/Wechat.php' MyWechat ->responseText('歡迎關注韓聰的微信號' ->responseText('您的地理位置為:' . ->getRequest('Latitude') . ',' . ->getRequest('Longitude' =->getRequest('EventKey' ( 'C001': ->responseText('我贏了' 'C002': ->responseText('我最近很好o(∩_∩)o ' 'C003': ->responseText('謝謝(*^__^*) 嘻嘻' ->responseText('收到了文字消息:' . ->getRequest('content' = NewsResponseItem('標題一', '描述一', ->getRequest('picurl'), ->getRequest('picurl')), NewsResponseItem('標題二', '描述二', ->getRequest('picurl'), ->getRequest('picurl')), ->responseNews( ->responseText('收到了位置消息:' . ->getRequest('location_x') . ',' . ->getRequest('location_y' ->responseText('收到了鏈接:' . ->getRequest('url' ->responseVoice('收到了語音:' . ->getRequest('recognition' ->responseText('收到了未知類型消息:' . ->getRequest('msgtype' = MyWechat('hancong', ->run();
以上代碼部分功能需要開通服務號並且申請認證,比如語音識別,地理信息,添加菜單的功能,申請認證需要300元/年,可以享受微信所有的接口功能。
注:如果驗證服務器URL,需要修改一句代碼
= MyWechat('hancong', ->validateSignature('hancong');
驗證完後回復調用run方法,validateSignature方法只是第一次驗證服務器調用,驗證完後即可刪掉。