鏈接將使你的企業號更具價值,你可使用如下三種方式,鏈接你的企業號及企業應用:php
一、企業應用調用企業號提供的接口,管理或查詢企業號後臺所管理的資源、或給成員發送消息等,如下稱主動調用模式。java
二、企業號把用戶發送的消息或用戶觸發的事件推送給企業應用,由企業應用處理,如下稱回調模式。python
三、用戶在微信中閱讀企業應用下發的H5頁面,該頁面能夠調用微信提供的原生接口,使用微信開放的終端能力,如下稱JSAPI模式。c++
經過這三種鏈接方式的結合,你能夠在企業號中創建功能強大的移動輕應用,並依託微信數億活躍用戶,幫助企業方便、快捷地實現應用的部署,並確保應用的活躍度。c#
1、主動調用api
一、簡述瀏覽器
主動調用是最基本的鏈接模式,當你的應用調用企業號時,需使用https協議、Json數據格式、UTF8編碼,訪問域名爲https://qyapi.weixin.qq.com,數據包不須要加密。安全
在每次主動調用企業號接口時須要帶上AccessToken參數。AccessToken參數由CorpID和Secret換取。服務器
CorpID是企業號的標識,每一個企業號擁有一個惟一的CorpID;Secret是管理組憑證密鑰。微信
系統管理員可經過管理端的權限管理功能建立管理組,分配管理組對應用、通信錄、接口的訪問權限。完成後,管理組便可得到惟一的secret。系統管理員可經過權限管理查看全部管理組的secret,其餘管理員可經過設置中的開發者憑據查看。
當企業應用調用企業號接口時,企業號後臺爲根據這次訪問的AccessToken,校驗訪問的合法性以及所對應的管理組的管理權限以返回相應的結果。
注:你應該審慎配置管理組的權限,夠用即好,權限過大會增長誤操做可能性及信息安全隱患。
二、獲取AccessToken
AccessToken是企業號的全局惟一票據,調用接口時需攜帶AccessToken。
AccessToken須要用CorpID和Secret來換取,不一樣的Secret會返回不一樣的AccessToken。正 常狀況下AccessToken有效期爲7200秒,有效期內重複獲取返回相同結果,並自動續期。因爲獲取access_token的api調用次數很是 有限,建議企業全局存儲與更新access_token,頻繁刷新access_token會致使api調用受限,影響自身業務。
(1).請求說明
Https請求方式: GET
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect
(2).參數說明
(3).權限說明
每一個secret表明了對應用、通信錄、接口的不一樣權限;不一樣的管理組擁有不一樣的secret。
(4).返回說明
a)正確的Json返回結果:
{ "access_token": "accesstoken000001", }
參數說明:
access_token:獲取到的憑證
b)錯誤的Json返回示例:
{ "errcode": 43003, "errmsg": "require https" }
三、主動調用的頻率限制
當你獲取到AccessToken時,你的應用就能夠成功調用企業號後臺所提供的各類接口以管理或訪問企業號後臺的資源或給企業號成員發消息。
爲了防止企業應用的程序錯誤而引起企業號服務器負載異常,默認狀況下,每一個企業號調用接口都有必定的頻率限制,當超過此限制時,調用對應接口會收到相應錯誤碼。
如下是當前默認的頻率限制,企業號後臺可能會根據運營狀況調整此閾值:
(1).基礎頻率
每企業調用單個cgi/api不可超過1000次/分,30000次/小時
每ip調用單個cgi/api不可超過2000次/分,60000次/小時
每ip獲取AccessToken不可超過300次/小時
(2).發消息頻率
每企業不可超過200次/分鐘;不可超過賬號上限數*30人次/天
(3).建立賬號頻率
每企業建立賬號數不可超過賬號上限數*3/月
2、回調模式
在回調模式下,企業不只能夠主動調用企業號接口,還能夠接收用戶的消息或事件。接收的信息使用XML數據格式、UTF8編碼,並以AES方式加密。
企業號的每一個應用都有本身的回調模式開關。在管理端開啓並設置好相關參數後,此應用的回調模式才生效。
針對加解密的處理,微信提供了各類語言的庫,企業能夠在附錄中下載。
一、開啓應用的回調模式
當你開啓應用的回調模式時,企業號會要求你填寫應用的URL、Token、EncodingAESKey三個參數。
URL是企業應用接收企業號推送請求的訪問協議和地址,支持http或https協議。
Token可由企業任意填寫,用於生成簽名。
EncodingAESKey用於消息體的加密,是AES密鑰的Base64編碼。
驗證URL、Token以及加密的詳細處理請參考後續'接收消息時的加解密處理'的部分。
驗證URL有效性
當你提交以上信息時,企業號將發送GET請求到填寫的URL上,GET請求攜帶四個參數,企業在獲取時須要作urldecode處理,不然會驗證不成功。
企業經過參數msg_signature對請求進行校驗,若是確認這次GET請求來自企業號,那麼企業應用對echostr參數解密並原樣返回echostr明文(不能加引號),則接入驗證生效,回調模式才能開啓。
後續回調企業時都會在請求URL中帶上以上參數(echostr除外),校驗方式與首次驗證URL一致。
二、使用回調模式
企業號在回調企業URL時,會對消息體自己作AES加密,以XML格式POST到企業應用的URL上;企業在被動回覆時,也須要對數據加密,以XML格式返回給微信。企業的回覆支持文本、圖片、語音、視頻、圖文等格式。
微信服務器在五秒內收不到響應會斷掉鏈接,而且從新發起請求,總共重試三次。若是在調試中,發現員工沒法收到響應的消息,能夠檢查是否消息處理超時。
關於重試的消息排重,有msgid的消息推薦使用msgid排重。事件類型消息推薦使用FromUserName + CreateTime排重。
假如企業沒法保證在五秒內處理並回復,能夠直接回復空串,企業號不會對此做任何處理,而且不會發起重試。這種狀況下,可使用發消息接口進行異步回覆。
假設企業回調URL爲http://api.3dept.com。
(1).請求說明:
http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323
(2).回調數據格式:
<xml>
<ToUserName><![CDATA[toUser]]</ToUserName>
<AgentID><![CDATA[toAgentID]]</AgentID>
<Encrypt><![CDATA[msg_encrypt]]</Encrypt>
</xml>
1.msg_encrypt爲通過加密的密文
2.AgentID爲接收的應用id,可在應用的設置頁面獲取
3.ToUserName爲企業號的CorpID
企業須要對msg_signature進行校驗,並解密msg_encrypt,得出msg的原文。
回覆給微信的數據格式:
<xml>
<Encrypt><![CDATA[msg_encrypt]]></Encrypt>
<MsgSignature><![CDATA[msg_signature]]></MsgSignature>
<TimeStamp>timestamp</TimeStamp>
<Nonce><![CDATA[nonce]]></Nonce>
</xml>
三、接收消息時的加解密處理
企業能夠直接使用微信提供的庫進行加解密的處理,目前提供的有c++/python/php/java/c#等語言版本。代碼提供瞭解密、加密、驗 證URL三個接口,企業可根據自身須要下載(參見附錄)。如下爲庫函數的使用說明(以c++爲例),更詳細的加解密方案請參考附錄。
1)解密函數
1.int DecryptMsg(const string &sMsgSignature, const string &sTimeStamp, const string &sNonce, const string &sPostData, string &sMsg);
參數說明:
返回說明
請參閱附錄加密部分。
2)加密函數
1.int EncryptMsg(const string &sReplyMsg, const string &sTimeStamp, const string &sNonce, string &sEncryptMsg);
參數說明
返回說明
請參閱附錄加密部分。
3)驗證URL函數
1.int VerifyURL(const string &sMsgSignature, const string &sTimeStamp, const string &sNonce, const string &sEchoStr, string &sReplyEchoStr);
參數說明
返回說明
請參閱附錄加密部分。
3、Weixin JS接口
Weixin JS接口是微信爲你的H5應用提供開放原生能力的接口,你的應用能夠利用這些接口使用更多的微信原生能力和微信的操控能力, 以使得你的應用有更強大的智能,更好的用戶體驗。
除了如下章節所描述的各種接口。拍照、上傳圖片、掃碼、微信支付、地理位置上報等更多的接口已經或正在抓緊開放中,更多信息也請參考微信相關網站了解.
一、隱藏微信中網頁右上角按鈕
企業號在有須要時(如不須要用戶分享某個頁面),可在網頁中經過JavaScript代碼隱藏網頁右上角按鈕。
接口調用代碼(JavaScript)
function onBridgeReady(){
WeixinJSBridge.call('hideOptionMenu');
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
返回說明
隱藏底部導航欄沒有返回值。(須要顯示請把hideOptionMenu換成showOptionMenu)
二、隱藏微信中網頁底部導航欄
企業號在有須要時(如認爲用戶在該頁面不會用到瀏覽器前進後退功能),可在網頁中經過JavaScript代碼隱藏網頁底部導航欄。
接口調用代碼(JavaScript):
function onBridgeReady(){
WeixinJSBridge.call('hideToolbar');
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
返回說明
隱藏底部導航欄沒有返回值。(須要顯示頂部導航欄,請把hideToolbar換成showToolbar)
三、網頁獲取用戶網絡狀態
爲了方便開發者根據用戶的網絡狀態來提供不一樣質量的服務,企業號能夠在企業號內部的網頁中使用JavaScript代碼調用來獲取網絡狀態。
接口調用代碼(JavaScript)
function onBridgeReady(){
WeixinJSBridge.invoke('getNetworkType',{},
function(e){
WeixinJSBridge.log(e.err_msg);
});
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
返回說明:
獲取用戶網絡狀態的返回值以下:
•network_type:wifi wifi網絡
•network_type:edge 非wifi,包含3G/2G
•network_type:fail 網絡斷開鏈接
•network_type:wwan(2g或者3g)
四、關閉當前網頁窗口
在微信內置瀏覽器中被訪問的網頁,可以使用該JavaScript代碼關閉當前網頁。
主要使用場景: 微信用戶在企業號會話中點擊外鏈到達企業號的網頁,在用戶完成操做後,企業號(網頁方)可調用此接口關閉當前網頁窗口,使用戶返回會話。
接口調用代碼(JavaScript):
WeixinJSBridge.invoke('closeWindow',{},function(res){
//alert(res.err_msg);
});
返回說明
err_msg關閉成功返回「close_window:ok」,關閉失敗返回「close_window:error」。
博客轉自:《微信企業號開發之如何創建鏈接》