最近公司用到了微信公眾平台,所以研究了一下微信公眾號的開發技術,總體來說比較簡單,結合現有的平台核技術,實現起來非常方便。
首先先來了解一下微信公眾平台。
“微信,是一個生活方式” ,這是微信的自我評價,是不是覺得如果那天不在朋友圈裡分享一下自己的最新狀態,
並且收到幾個贊和評價的話,會覺得空虛寂寞呢?它實實在在的改變了我們的生活方式。
“ 微信,也是一個生意方式 ”,在微信成為我們日常必備之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方法只是第一次驗證服務器調用,驗證完後即可刪掉。