關鍵字:微信公衆平臺 開發教程
做者:方倍工做室
出處:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html
php
在這篇入門教程中,咱們假定你已經有了PHP語言程序、MySQL數據庫、計算機網絡通信及XML語言基礎。若是你尚未,那麼請先學習相關知識。html
咱們將使用微信公衆帳號豆立方(微信號:BeanCube)做爲講解的例子。web
這篇入門教程將引導你完成以下任務:數據庫
建立百度雲應用api
申請帳號微信
登陸http://developer.baidu.com/bae ,使用郵箱或者手機註冊一個帳號,註冊須要同時綁定手機而且驗證郵箱。網絡
建立應用app
註冊並登陸成功之後,點擊右上側的,彈出以下窗口。微信公衆平臺
應用名稱本身隨便填寫一個,接入方式選擇「手機web應用」,而後點擊肯定。scrapy
說明:在如下的教程中,您能夠將全部我填寫爲pondbay的地方改成你的一個相應的名稱,若是您沒有想好名稱,最簡單的方法就是qq這兩個字符+qq號碼,好比方倍工做室的QQ是1354386063,那麼就將"pondbay"改成"qq1354386063"
選擇「雲環境(BAE)」,
在新的窗口中,填寫應用域名的名稱,環境類型選擇PHP,其餘根據本身須要選擇或者使用上圖默認值,而後點擊肯定
注意:此處填寫的域名將要在下面填寫URL時用到。能夠先保存下來。
建立版本
在版本管理中,點擊建立新版本
版本號填寫0,而後保存。
上傳代碼
將如下代碼中的token改成你的名稱,並另存爲index.php。
注意:此處填寫的Token將要在下面填寫URL時用到。能夠先保存下來。
<?php /* 方倍工做室 CopyRight 2013 www.doucube.com All Rights Reserved */ define("TOKEN", "pondbay"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
而後將其壓縮成zip格式
這樣會生成一個index.zip的文件。
回來版本管理中
選擇包上傳更新
選擇剛纔壓縮好的zip包,點擊上傳。
肯定生效,而且點擊 ,點擊後以下圖。
百度雲應用的建立就成功了。
微信公衆平臺開發模式
高級功能
微信公衆平臺地址:https://mp.weixin.qq.com
登陸微信公衆平臺後臺,選擇高級功能
進入後就看到兩種模式
咱們須要關閉編輯模式。點擊編輯模式的進入
滑動關閉
開發模式
進入開發模式裏面
點擊成爲開發者
彈出URL和Token填寫框
此處的URL爲建立百度雲應用的域名,包括後面的duapp.com,而Token爲index.php中定義的值。
URL: http://pondbay.duapp.com
Token: pondbay
填寫以下圖,
提交成功
再滑動右上角啓用按鈕。
至此,你已經成功啓用開發模式。
接收消息類型
目前普通用戶能向公衆帳號推送五種格式的消息:文本(包括表情)、語音、圖片、視頻、位置、連接。名片發送會失敗。
下面就這五種分別詳解以下:
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[/::)/::)/::)/::)/::)]]></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://mmsns.qpic.cn/mmsns/L4qjYtOibuml238YYBcfS2FQ8JtNN69Bc4bbbscvQRrljbedVjlMEAA/0]]></PicUrl> <MsgId>5836982871638042400</MsgId> </xml>
XML格式講解
ToUserName 消息接收方微信號,通常爲公衆平臺帳號微信號
FromUserName 消息發送方微信號
CreateTime 消息建立時間
MsgType 消息類型;圖片消息爲image
PicUrl 圖片連接地址,能夠用HTTP GET獲取
MsgId 消息ID號
3. 語音
發送語音
後臺格式:
<xml> <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName> <CreateTime>1359028025</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MediaId><![CDATA[hGm9wmKth8RO_tuv5k9fJkSbovXWzZVYwG2jSsL7ukCqq6q1SiLzYnFEngFNUijs]]></MediaId> <Format><![CDATA[amr]]></Format> <MsgId>5836980921722890003</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]]></FLACFromUserName> <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號
發送消息類型
目前公衆帳號能向普通用戶推送三種格式的消息:文本、圖文、音樂。其中圖文消息包括單條圖文消息和多條圖文消息,展現方式有一點點不一樣。
另外,回覆的消息支持星標操做:經過填寫FuncFlag字段爲1來對回覆消息作星標操做後,能夠在實時消息的星標消息分類中找到對應的推送消息。
下面就這幾種分別詳解以下:
1. 文本消息格式
回覆文本
後臺格式:
<xml> <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName> <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName> <CreateTime>1359036631</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[★★★★豆立方★★★★ 微信公衆平臺上最好玩的圖片及視頻應用]]></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> <Description><![CDATA[溫度:3℃ 溼度:43﹪ 風速:西南風2級]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl> <Url><![CDATA[]]></Url> </item> </Articles> <FuncFlag>0</FuncFlag> </xml>
2.2 多條圖文消息
<xml> <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName> <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName> <CreateTime>1359011829</CreateTime> <MsgType><![CDATA[news]]></MsgType> <Content><![CDATA[]]></Content> <ArticleCount>8</ArticleCount> <Articles> <item> <Title><![CDATA[【天津】天氣實況 溫度:3℃ 溼度:43﹪ 風速:西南風2級]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月24日 週四 2℃~-7℃ 晴 北風3-4級轉東南風小於3級]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月25日 週五 -1℃~-8℃ 晴 東南風小於3級轉東北風3-4級]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月26日 週六 -1℃~-7℃ 多雲 東北風3-4級轉東南風小於3級]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月27日 週日 0℃~-6℃ 多雲 東南風小於3級轉東北風3-4級]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月28日 週一 -1℃~-8℃ 多雲 東北風3-4級轉南風小於3級]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月29日 週二 1℃~-5℃ 多雲 南風小於3級轉3-4級]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[方倍工做室 版權全部]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[]]></PicUrl> <Url><![CDATA[]]></Url> </item> </Articles> <FuncFlag>0</FuncFlag> </xml>
XML格式講解
FromUserName 消息發送方
ToUserName 消息接收方
CreateTime 消息建立時間
MsgType 消息類型,圖文消息必須填寫news
Content 消息內容,圖文消息可填空
ArticleCount 圖文消息個數,限制爲10條之內
Articles 多條圖文消息信息,默認第一個item爲大圖
Title 圖文消息標題
Description 圖文消息描述
PicUrl 圖片連接,支持JPG、PNG格式,較好的效果爲大圖640*320,小圖80*80
Url 點擊圖文消息跳轉連接
FuncFlag 星標字段
3. 音樂消息
後臺格式:
<xml> <ToUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></ToUserName> <FromUserName><![CDATA[gh_b629c48b653e]]></FromUserName> <CreateTime>1372310544</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[最炫民族風]]></Title> <Description><![CDATA[鳳凰傳奇]]></Description> <MusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></MusicUrl> <HQMusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></HQMusicUrl> </Music> <FuncFlag>0</FuncFlag> </xml>
XML格式講解
ToUserName 接收方賬號(收到的OpenID)
FromUserName 開發者微信號
CreateTime 消息建立時間
MsgType 消息類型,此處爲music
Title 音樂標題
Description 音樂描述
MusicUrl 音樂連接
HQMusicUrl 高質量音樂連接,WIFI環境優先使用該連接播放音樂
FuncFlag 位0x0001被標誌時,星標剛收到的消息。
事件消息類型
目前用戶在關注和取消關注的時候會自動向公衆平臺發送事件推送消息:
1. 關注事件
<xml> <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName> <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName> <CreateTime>1372307736</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[]]></EventKey> </xml>
2. 取消關注事件
<xml> <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName> <FromUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></FromUserName> <CreateTime>1372309890</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[unsubscribe]]></Event> <EventKey><![CDATA[]]></EventKey> </xml>
XML格式講解
ToUserName 接收方微信號
FromUserName 發送方微信號,若爲普通用戶,則是一個OpenID
CreateTime 消息建立時間
MsgType 消息類型,event
Event 事件類型,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點擊事件)
EventKey 事件KEY值,與自定義菜單接口中KEY值對應
簡單的自動回覆
咱們在官方的例子上作一些修改,實現了一個發送「?」就能回覆當前時間的功能。
該例子是接收文本消息($postObj->Content),而且回覆文本消息($msgType = "text";)的。
你能夠把如下代碼保存爲index.php,按照上面提供的方法從新上傳。
代碼以下:
<?php /* 方倍工做室 CopyRight 2013 www.doucube.com All Rights Reserved */ define("TOKEN", "pondbay"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); class wechatCallbackapiTest { 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 == "?") { $msgType = "text"; $contentStr = date("Y-m-d H:i:s",time()); $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } }else{ echo ""; exit; } } } ?>
效果以下: