文章出處

一、 準備工作

a) 賬號

  1. SAE上面注冊一個賬號
  2. 在微信公眾號開發平臺地址 https://mp.weixin.qq.com  注冊一個微信公眾號。

注意:1、個人只能申請到個人類型的訂閱號。

2、微信公眾號認證需要300大洋。

  1. 申請公眾號測試號地址

http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

 

二、 微信公眾賬號介紹

 

 

服務號、訂閱號、企業號的介紹(區別) 

1、訂閱號:主要偏于為用戶傳達資訊(類似報紙雜志),認證前后都是每天只可以群發一條消息;

2、服務號:主要偏于服務交互(類似銀行,114,提供服務查詢),認證前后都是每個月可群發4條消息;

3、企業號:主要用于公司內部通訊使用,需要先有成員的通訊信息驗證才可以關注成功企業號;

溫馨提示:

1、如果想簡單的發送消息,達到宣傳效果,建議可選擇訂閱號;

2、如果想進行商品銷售,進行商品售賣,建議可申請服務號;

3、如果想用來管理內部企業員工、團隊,對內使用,可申請企業號。

 

 

三、 微信數據收發原理以及消息數據格式

 

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

開發者提交信息后,微信服務器將發送GET請求到填寫的服務器地址URL上,并且帶上四個參數(signaturetimestampnonceechostr),開發者通過對簽名(signature)的檢驗,來判斷此條信息的真實性。

驗證成功之后,開發者接受用戶消息的時候,微信也都會帶上前面三個參數(signaturetimestampnonce)訪問開發者設置的URL,開發者依然通過簽名的校驗判斷消息的真實性。

加密/校驗流程如下:

1. tokentimestampnonce三個參數進行字典序排序

2. 將三個參數字符串拼接成一個字符串進行sha1加密

3. 開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信

 

32 成為開發者后消息收發的原理

微信消息收發原理圖:

 

其實,我們需要做的事情,就是對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天后自動刪除(所以用戶發送給開發者的素材,若開發者需要,應盡快下載到本地),以節省服務器資源。

2media_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獲取用戶基本信息,包括昵稱、頭像、性別、所在城市、語言和關注時間。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()