微信開發(微信公衆號)

1、 準備工做javascript

a) 帳號html

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

注意:一、我的只能申請到我的類型的訂閱號。java

二、微信公衆號認證須要300大洋。api

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

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

 

2、 微信公衆帳號介紹安全

 

 

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

一、訂閱號:主要偏於爲用戶傳達資訊(相似報紙雜誌),認證先後都是天天只能夠羣發一條消息;微信

二、服務號:主要偏於服務交互(相似銀行,114,提供服務查詢),認證先後都是每月可羣發4條消息;微信公衆平臺

三、企業號:主要用於公司內部通信使用,須要先有成員的通信信息驗證才能夠關注成功企業號;curl

舒適提示:

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

二、若是想進行商品銷售,進行商品售賣,建議可申請服務號;

三、若是想用來管理內部企業員工、團隊,對內使用,可申請企業號。

 

 

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

 

三、1 開發者模式成爲開發者時的消息校驗原理

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

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

加密/校驗流程以下:

1. 將token、timestamp、nonce三個參數進行字典序排序

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

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

 

三、2 成爲開發者後消息收發的原理

微信消息收發原理圖:

 

其實,咱們須要作的事情,就是對HTTP請求,作出響應。也就是拿到微信服務器給咱們的數據,而後處理後再返回去。

 

上圖的消息收發過程是這樣的:用戶用手機發送一個?給微信公衆號,微信服務器接受到? 而後組裝一個消息發送給咱們本身的服務器,咱們的服務器回覆一個時間,而且將時間也按照必定的規則組裝,回覆給公衆號,公衆號所在的服務器再回復給用戶。

 

 

4、 接入指南

接入微信公衆號平臺開發,須要按照以下步驟:

一、 填寫服務器配置

二、 驗證服務器地址的有效性

三、 依據接口文檔實現業務邏輯

 

第一步:填寫服務器配置

進入微信公衆平臺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將獲得微信服務器推送過來的消息和事件,而後開發者能夠依據自身業務邏輯進行相應,例如回覆消息等。

 

其餘須要知道的:

一、 用戶向公衆號發送消息時,公衆號收到的消息發送者是一個OpenID,每一個用戶對每一個公衆號有一個惟一的OpenID。

二、 微信公衆號接口只支持80端口

5、 接受普通消息

當普通微信用戶向微信公衆帳號發消息時,微信服務器將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來進行的。素材管理接口對全部認證的訂閱號和服務號開發。經過本接口,公衆號能夠新增一些臨時素材(即上傳臨時多媒體文件)。

請注意:

一、對於臨時素材,每一個素材(media_id)會在開發者上傳或粉絲髮送到微信服務器3天后自動刪除(因此用戶發送給開發者的素材,若開發者須要,應儘快下載到本地),以節省服務器資源。

二、media_id是可複用的。

三、素材的格式大小等要求與公衆平臺官網一致。具體是,圖片大小不超過2M,支持bmp/png/jpeg/jpg/gif格式,語音大小不超過2M,長度不超過60秒(公衆平臺官網能夠在文章中插入小於30分鐘的語音,但這些語音不能用於羣發等場景,只能放在文章內,這方面接口暫不支持),支持mp3/wma/wav/amr格式

四、需使用https調用本接口。

 

調用接口地址

https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

 

其餘須要注意的問題:

一、 文件上傳時經過CURL POST方式提交的,POST內容須要是數組格式。

 

二、 上傳的文件必須先在你的服務器,而後獲取到上傳文件所在服務器的絕對路徑。而且須要在絕對路徑前面加上@以示區分。

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

轉自:http://www.cnblogs.com/sushaolian/p/5786698.html

相關文章
相關標籤/搜索