一、 準備工作
a) 賬號
- 在SAE上面注冊一個賬號。
- 在微信公眾號開發平臺地址 https://mp.weixin.qq.com 注冊一個微信公眾號。
注意:1、個人只能申請到個人類型的訂閱號。
2、微信公眾號認證需要300大洋。
- 申請公眾號測試號地址
http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
二、 微信公眾賬號介紹
服務號、訂閱號、企業號的介紹(區別)
1、訂閱號:主要偏于為用戶傳達資訊(類似報紙雜志),認證前后都是每天只可以群發一條消息;
2、服務號:主要偏于服務交互(類似銀行,114,提供服務查詢),認證前后都是每個月可群發4條消息;
3、企業號:主要用于公司內部通訊使用,需要先有成員的通訊信息驗證才可以關注成功企業號;
溫馨提示:
1、如果想簡單的發送消息,達到宣傳效果,建議可選擇訂閱號;
2、如果想進行商品銷售,進行商品售賣,建議可申請服務號;
3、如果想用來管理內部企業員工、團隊,對內使用,可申請企業號。
三、 微信數據收發原理以及消息數據格式
3、1 開發者模式成為開發者時的消息校驗原理
開發者提交信息后,微信服務器將發送GET請求到填寫的服務器地址URL上,并且帶上四個參數(signature、timestamp、nonce、echostr),開發者通過對簽名(signature)的檢驗,來判斷此條信息的真實性。
驗證成功之后,開發者接受用戶消息的時候,微信也都會帶上前面三個參數(signature、timestamp、nonce)訪問開發者設置的URL,開發者依然通過簽名的校驗判斷消息的真實性。
加密/校驗流程如下:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信
3、2 成為開發者后消息收發的原理
微信消息收發原理圖:
其實,我們需要做的事情,就是對HTTP請求,做出響應。也就是拿到微信服務器給我們的數據,然后處理后再返回去。
上圖的消息收發過程是這樣的:用戶用手機發送一個?給微信公眾號,微信服務器接受到? 然后組裝一個消息發送給我們自己的服務器,我們的服務器回復一個時間,并且將時間也按照一定的規則組裝,回復給公眾號,公眾號所在的服務器再回復給用戶。
四、 接入指南
接入微信公眾號平臺開發,需要按照如下步驟:
1、 填寫服務器配置
2、 驗證服務器地址的有效性
3、 依據接口文檔實現業務邏輯
第一步:填寫服務器配置
進入微信公眾平臺https://mp.weixin.qq.com
在左側列表中最下方,找到基本配置,點擊進入
點擊啟用,如果編輯模式開啟了。那就先把編輯模式關閉。
點擊“修改配置”按鈕,按照要求填寫。
參數說明:
其中URL是開發者用來接收微信消息和事件的接口URL。
Token是開發者任意填寫的,但是填寫的要與代碼中的一致。Token是用作簽名(填寫的Token會和接口URL中包含的Token進行對比,從而驗證安全性),Token是為了用來驗證發送我們的信息是否來自微信服務器。
第二步:驗證服務器地址的有效性
開發者提供信息后,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶四個參數:
開發者通過檢驗signature對請求進行校驗。若確認此次GET請求來自微信服務器,需要原樣返回echostr參數的內容。這樣就接入成功了,否則接入失敗。
接入的代碼如下:
//獲得參數 signature nonce token timestamp echostr
$nonce = $_GET['nonce'];
$token = 'imooc';
$timestamp = $_GET['timestamp'];
$echostr = $_GET['echostr'];
$signature = $_GET['signature'];
//第一步:形成數組,然后按字典序排序
$array = array();
$tmpArr= array($nonce, $timestamp, $token);
sort($tmpArr,SORT_STRING);
//第二步:拼接成字符串,sha1加密 ,然后與signature進行校驗
$str = sha1( implode( $tmpArr ) );
//第三步:獲得加密后的字符串與signature對比
if( $str == $signature && $echostr ){
//第一次接入weixin api接口的時候
echo $echostr;
exit;
}
第三部:依據接口文檔實現業務邏輯
驗證URL有效性后即接入生效,成為開發者。
經歷過第一次驗證后,此后用戶每次向公眾號發送消息、或者產生自定義菜單點擊事件時,開發者填寫的服務器配置URL將得到微信服務器推送過來的消息和事件,然后開發者可以依據自身業務邏輯進行相應,例如回復消息等。
其他需要知道的:
1、 用戶向公眾號發送消息時,公眾號收到的消息發送者是一個OpenID,每個用戶對每個公眾號有一個唯一的OpenID。
2、 微信公眾號接口只支持80端口
五、 接受普通消息
當普通微信用戶向微信公眾賬號發消息時,微信服務器將POST消息的XML數據發送到我們自己的服務器上,也就是我們在微信公眾平臺填寫的URL
普通消息有:文本消息、圖片消息、語言消息、視頻消息、地理位置消息。
接受文本消息的XML格式
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
當微信服務器接受到用戶發送的消息,微信服務器再把這條消息通過XML格式組裝后,發送給我們的服務器。那么,如果我們想要回復文本消息。我們也需要把消息通過XML格式組裝好發送給微信服務器,微信服務器再發送給用戶。
回復文本消息的XML格式:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>
實例代碼:
注意,$toUser 是指將這個消息返回給誰。因為我們是將消息回復給用戶的,所以
$toUser = $this->postObj->FromUserName;//獲取到發送消息給微信公眾號的用戶openId
素材管理
新增臨時素材
公眾號經常需要用到一些臨時性的多媒體素材的場景,例如在使用接口特別是發送消息時,對多媒體文件、多媒體消息的獲取和調用等操作,是通過media_id來進行的。素材管理接口對所有認證的訂閱號和服務號開發。通過本接口,公眾號可以新增一些臨時素材(即上傳臨時多媒體文件)。
請注意:
1、對于臨時素材,每個素材(media_id)會在開發者上傳或粉絲發送到微信服務器3天后自動刪除(所以用戶發送給開發者的素材,若開發者需要,應盡快下載到本地),以節省服務器資源。
2、media_id是可復用的。
3、素材的格式大小等要求與公眾平臺官網一致。具體是,圖片大小不超過2M,支持bmp/png/jpeg/jpg/gif格式,語音大小不超過2M,長度不超過60秒(公眾平臺官網可以在文章中插入小于30分鐘的語音,但這些語音不能用于群發等場景,只能放在文章內,這方面接口暫不支持),支持mp3/wma/wav/amr格式
4、需使用https調用本接口。
調用接口地址
https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
其他需要注意的問題:
1、 文件上傳時通過CURL POST方式提交的,POST內容需要是數組格式。
2、 上傳的文件必須先在你的服務器,然后獲取到上傳文件所在服務器的絕對路徑。并且需要在絕對路徑前面加上@以示區分。
3、 在Window服務上,路徑分隔符為斜杠\,例子:@D:\soft\logo.jpg
而在Linux服務器上,路徑分隔符為反斜杠/ 例子:@/tmp/logo.jpg
代碼示例:
獲取臨時素材
公眾號可以使用本接口從微信服務器下載臨時的多媒體素材。
接口調用URL
http請求方式: GET,https調用
https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
參數說明
參數 |
是否必須 |
說明 |
access_token |
是 |
調用接口憑證 |
media_id |
是 |
媒體文件ID |
返回說明
正確情況下的返回HTTP頭如下:
HTTP/1.1 200 OK
Connection: close
Content-Type: image/jpeg
Content-disposition: attachment; filename="MEDIA_ID.jpg"
Date: Sun, 06 Jan 2013 10:20:18 GMT
Cache-Control: no-cache, must-revalidate
Content-Length: 339721
curl -G "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
發送消息
發送客服消息
當用戶主動發消息給公眾號的時候(包括發送信息、點擊自定義菜單、訂閱事件、掃描二維碼事件),微信將會把消息數據推送給開發者,開發者在一段時間內可以調用客服消息接口,通過POST一個JSON數據包來發送消息給普通用戶,在48小時內不限制發送次數。此接口主要用于客服等有人工消息處理環節的功能,方便開發者為用戶提供更加優質的服務。
調用的接口URL
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
具體參考文檔http://mp.weixin.qq.com/wiki/7/12a5a320ae96fecdf0e15cb06123de9f.html
至于為什么需要客服接口呢?
因為微信公眾平臺一直沒有推出手機客服端,除了程序的自動應答,運營者還需要一些人工回復,而人工回復目前一般都是通過電腦端操作,有了客服接口可以使運營者使用手機回復。
獲取用戶基本信息
在關注者與公眾號產生消息交互后,公眾號可獲得關注者的OpenID(加密后的微信號,每個用戶對每個公眾號的OpenID是唯一的。對于不同公眾號,同一用戶的openid不同)。公眾號可通過本接口來根據OpenID獲取用戶基本信息,包括昵稱、頭像、性別、所在城市、語言和關注時間。
文章列表