一、 準備工作 a) 賬號
注意:1、個人只能申請到個人類型的訂閱號,。 2,、微信公眾號認證需要300大洋。
http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index 二,、 微信公眾賬號介紹
服務(wù)號,、訂閱號、企業(yè)號的介紹(區(qū)別) 1,、訂閱號:主要偏于為用戶傳達資訊(類似報紙雜志),,認證前后都是每天只可以群發(fā)一條消息; 2,、服務(wù)號:主要偏于服務(wù)交互(類似銀行,,114,提供服務(wù)查詢),,認證前后都是每個月可群發(fā)4條消息,; 3、企業(yè)號:主要用于公司內(nèi)部通訊使用,,需要先有成員的通訊信息驗證才可以關(guān)注成功企業(yè)號,; 溫馨提示: 1、如果想簡單的發(fā)送消息,,達到宣傳效果,,建議可選擇訂閱號; 2,、如果想進行商品銷售,,進行商品售賣,建議可申請服務(wù)號,; 3,、如果想用來管理內(nèi)部企業(yè)員工、團隊,,對內(nèi)使用,,可申請企業(yè)號。
三,、 微信數(shù)據(jù)收發(fā)原理以及消息數(shù)據(jù)格式 3,、1 開發(fā)者模式成為開發(fā)者時的消息校驗原理 開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器地址URL上,,并且?guī)纤膫€參數(shù)(signature,、timestamp,、nonce、echostr),,開發(fā)者通過對簽名(signature)的檢驗,,來判斷此條信息的真實性,。 驗證成功之后,,開發(fā)者接受用戶消息的時候,微信也都會帶上前面三個參數(shù)(signature,、timestamp,、nonce)訪問開發(fā)者設(shè)置的URL,開發(fā)者依然通過簽名的校驗判斷消息的真實性,。 加密/校驗流程如下: 1. 將token,、timestamp、nonce三個參數(shù)進行字典序排序 2. 將三個參數(shù)字符串拼接成一個字符串進行sha1加密 3. 開發(fā)者獲得加密后的字符串可與signature對比,,標識該請求來源于微信 3,、2 成為開發(fā)者后消息收發(fā)的原理 微信消息收發(fā)原理圖:
其實,,我們需要做的事情,就是對HTTP請求,,做出響應(yīng),。也就是拿到微信服務(wù)器給我們的數(shù)據(jù),然后處理后再返回去,。 上圖的消息收發(fā)過程是這樣的:用戶用手機發(fā)送一個?給微信公眾號,,微信服務(wù)器接受到? 然后組裝一個消息發(fā)送給我們自己的服務(wù)器,,我們的服務(wù)器回復一個時間,,并且將時間也按照一定的規(guī)則組裝,回復給公眾號,,公眾號所在的服務(wù)器再回復給用戶,。 四、 接入指南 接入微信公眾號平臺開發(fā),,需要按照如下步驟: 1,、 填寫服務(wù)器配置 2、 驗證服務(wù)器地址的有效性 3,、 依據(jù)接口文檔實現(xiàn)業(yè)務(wù)邏輯 第一步:填寫服務(wù)器配置 進入微信公眾平臺https://mp.weixin.qq.com 在左側(cè)列表中最下方,,找到基本配置,點擊進入
點擊啟用,,如果編輯模式開啟了,。那就先把編輯模式關(guān)閉。 點擊“修改配置”按鈕,,按照要求填寫,。 參數(shù)說明: 其中URL是開發(fā)者用來接收微信消息和事件的接口URL。 Token是開發(fā)者任意填寫的,,但是填寫的要與代碼中的一致,。Token是用作簽名(填寫的Token會和接口URL中包含的Token進行對比,從而驗證安全性),Token是為了用來驗證發(fā)送我們的信息是否來自微信服務(wù)器,。 第二步:驗證服務(wù)器地址的有效性 開發(fā)者提供信息后,,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器地址URL上,GET請求攜帶四個參數(shù): 開發(fā)者通過檢驗signature對請求進行校驗,。若確認此次GET請求來自微信服務(wù)器,,需要原樣返回echostr參數(shù)的內(nèi)容。這樣就接入成功了,,否則接入失敗,。 第一個坑,注意點 這個URL地址我的理解就是第一次開啟測試以后沒有實際用途,是想讓你有一臺真正的服務(wù)器來返回校驗,這樣才讓你開啟開發(fā)者模式事實上一下藍色代碼就可以通過. public function checksignature() { $echoStr = $_GET["echostr"]; echo $echoStr; } 嚴格接入的代碼如下: //獲得參數(shù) signature nonce token timestamp echostr $nonce = $_GET['nonce']; $token = 'imooc'; $timestamp = $_GET['timestamp']; $echostr = $_GET['echostr']; $signature = $_GET['signature']; //第一步:形成數(shù)組,然后按字典序排序 $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; } 微信公眾平臺下Access Token的概念及獲取方法,。 一、Access Token access_token是公眾號的全局唯一票據(jù),,公眾號調(diào)用各接口時都需使用access_token,。正常情況下access_token有效期為7200秒,重復獲取將導致上次獲取的access_token失效,。 公眾號可以使用AppID和AppSecret調(diào)用本接口來獲取access_token,。AppID和AppSecret可在開發(fā)模式中獲得(需要已經(jīng)成為開發(fā)者,且?guī)ぬ枦]有異常狀態(tài)),。注意調(diào)用所有微信接口時均需使用https協(xié)議,。 接口調(diào)用請求說明 http請求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 參數(shù)說明
返回說明 正常情況下,,微信會返回下述JSON數(shù)據(jù)包給公眾號: {"access_token":"ACCESS_TOKEN","expires_in":7200}
錯誤時微信會返回錯誤碼等信息,JSON數(shù)據(jù)包示例如下(該示例為AppID無效錯誤): {"errcode":40013,"errmsg":"invalid appid"} 二,、AppId和AppSecret在微信后臺使用找到開發(fā)-基本配置 進入后,,即可看到 開發(fā)者ID(AppID) 和 開發(fā)者密碼(AppSecret) ,其中開發(fā)者密碼(AppSecret) 是隱藏的,需要設(shè)置或重置時才能顯示,。 重置后,,得到AppSecret如下圖所示。 三,、配置IP白名單獲取Access Token,,需要預(yù)先設(shè)置IP白名單,IP白名單由服務(wù)器提供商提供,,不清楚的可以向提供商咨詢,。以下是我們使用 新浪云的白名單的配置 四、獲取Access Token程序?qū)崿F(xiàn)如下 $appid = "";$appsecret = "";$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch); curl_close($ch);$jsoninfo = json_decode($output, true);$access_token = $jsoninfo["access_token"]; 你也可以直接在瀏覽器地址欄中,,拼接出地址,,執(zhí)行后,獲得如下數(shù)據(jù) {"access_token":"N2L7KXa084WvelONYjkJ_traBMCCvy_UKmpUUzlrQ0EA2yNp3Iz6eSUrRG0bhaR_viswd50vDuPkY5nG43d1gbm-olT2KRMxOsVE08RfeD9lvK9lMguNG9kpIkKGZEjIf8Jv2m9fFhf8bnNa-yQH3g","expires_in":7200} 參數(shù)說明如下
五,、工具獲取或者使用方倍工作室的微信公眾號類型檢測器,地址為: 這樣也獲得了access token 第三部:依據(jù)接口文檔實現(xiàn)業(yè)務(wù)邏輯 其他需要知道的: 一定要先建立白名單,讓服務(wù)器可以通過,URL驗證的時候需不需要忘記了,反正先設(shè)置IP了沒錯 啟用后成功后,開發(fā)模式,原先的自定義菜單會消失,而新的菜單也不允許建立(建立使用命令建立的),需要關(guān)閉開發(fā)模式停用菜單,然后再開啟開發(fā)模式,才能建立 多用用測試工具,所有的都可以用測試工具來驗證,測試工具都不通過,那么就別在代碼上去找出問題的原因了. 實際上,關(guān)閉服務(wù)器后,對方代碼只要通過 appid和appsecret2個信息就可以完成大部分業(yè)務(wù),比如自定義菜單,比如素材管理,比如粉絲管理 1,、 用戶向公眾號發(fā)送消息時,,公眾號收到的消息發(fā)送者是一個OpenID,每個用戶對每個公眾號有一個唯一的OpenID,。 2,、 微信公眾號接口只支持80端口 五、 接受普通消息 當普通微信用戶向微信公眾賬號發(fā)消息時,,微信服務(wù)器將POST消息的XML數(shù)據(jù)發(fā)送到我們自己的服務(wù)器上,,也就是我們在微信公眾平臺填寫的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> 當微信服務(wù)器接受到用戶發(fā)送的消息,,微信服務(wù)器再把這條消息通過XML格式組裝后,發(fā)送給我們的服務(wù)器,。那么,,如果我們想要回復文本消息。我們也需要把消息通過XML格式組裝好發(fā)送給微信服務(wù)器,,微信服務(wù)器再發(fā)送給用戶,。 回復文本消息的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;//獲取到發(fā)送消息給微信公眾號的用戶openId 素材管理新增臨時素材公眾號經(jīng)常需要用到一些臨時性的多媒體素材的場景,例如在使用接口特別是發(fā)送消息時,對多媒體文件,、多媒體消息的獲取和調(diào)用等操作,,是通過media_id來進行的。素材管理接口對所有認證的訂閱號和服務(wù)號開發(fā),。通過本接口,,公眾號可以新增一些臨時素材(即上傳臨時多媒體文件),。 請注意: 1,、對于臨時素材,每個素材(media_id)會在開發(fā)者上傳或粉絲發(fā)送到微信服務(wù)器3天后自動刪除(所以用戶發(fā)送給開發(fā)者的素材,,若開發(fā)者需要,,應(yīng)盡快下載到本地),以節(jié)省服務(wù)器資源,。 2,、media_id是可復用的。 3,、素材的格式大小等要求與公眾平臺官網(wǎng)一致,。具體是,圖片大小不超過2M,,支持bmp/png/jpeg/jpg/gif格式,,語音大小不超過2M,長度不超過60秒(公眾平臺官網(wǎng)可以在文章中插入小于30分鐘的語音,,但這些語音不能用于群發(fā)等場景,,只能放在文章內(nèi),這方面接口暫不支持),,支持mp3/wma/wav/amr格式 4,、需使用https調(diào)用本接口。 調(diào)用接口地址 https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE 其他需要注意的問題: 1,、 文件上傳時通過CURL POST方式提交的,,POST內(nèi)容需要是數(shù)組格式。
2,、 上傳的文件必須先在你的服務(wù)器,,然后獲取到上傳文件所在服務(wù)器的絕對路徑。并且需要在絕對路徑前面加上@以示區(qū)分,。 3,、 在Window服務(wù)上,路徑分隔符為斜杠\,,例子:@D:\soft\logo.jpg 而在Linux服務(wù)器上,,路徑分隔符為反斜杠/ 例子:@/tmp/logo.jpg 代碼示例:
獲取臨時素材公眾號可以使用本接口從微信服務(wù)器下載臨時的多媒體素材。 接口調(diào)用URL http請求方式: GET,https調(diào)用 https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID 參數(shù)說明
返回說明 正確情況下的返回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" 發(fā)送消息發(fā)送客服消息當用戶主動發(fā)消息給公眾號的時候(包括發(fā)送信息、點擊自定義菜單,、訂閱事件,、掃描二維碼事件),微信將會把消息數(shù)據(jù)推送給開發(fā)者,,開發(fā)者在一段時間內(nèi)可以調(diào)用客服消息接口,,通過POST一個JSON數(shù)據(jù)包來發(fā)送消息給普通用戶,在48小時內(nèi)不限制發(fā)送次數(shù),。此接口主要用于客服等有人工消息處理環(huán)節(jié)的功能,,方便開發(fā)者為用戶提供更加優(yōu)質(zhì)的服務(wù)。 調(diào)用的接口URL https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 具體參考文檔http://mp.weixin.qq.com/wiki/7/12a5a320ae96fecdf0e15cb06123de9f.html 至于為什么需要客服接口呢,? 因為微信公眾平臺一直沒有推出手機客服端,,除了程序的自動應(yīng)答,運營者還需要一些人工回復,,而人工回復目前一般都是通過電腦端操作,,有了客服接口可以使運營者使用手機回復。 獲取用戶基本信息在關(guān)注者與公眾號產(chǎn)生消息交互后,,公眾號可獲得關(guān)注者的OpenID(加密后的微信號,,每個用戶對每個公眾號的OpenID是唯一的。對于不同公眾號,,同一用戶的openid不同),。公眾號可通過本接口來根據(jù)OpenID獲取用戶基本信息,包括昵稱,、頭像,、性別、所在城市,、語言和關(guān)注時間,。 |
|
來自: 仴嗈黿嗌鄦嶜 > 《微信開發(fā)》