注:文中綠色部分爲摘自微信官方文檔php
第三方應用提供給企業的是一個應用,可是應用必須在套件下建立,因此第一步是要建立套件。html
註冊成爲應用提供商,必須輸入如下信息:java
信息項 | 要求及說明 |
---|---|
企業Logo | 應用提供商的企業Logo,小於2M,640*640,背景爲白色 |
企業簡稱 | 使用對外宣傳的企業簡稱,能表明企業的名字,2-16個字 |
企業簡介 | 描述企業所提供的服務,4-120個字 |
企業官網 | 應用服務商的企業官網 |
註冊條件:a)擁有一個已通過認證的企業號 b)用系統管理員身份進行申請apache
符合以上條件後,登陸微信第三方應用官網,選擇「服務商登陸」微信
登錄後界面以下,選擇添加應用套件oracle
開發者完成註冊以後,便可建立應用套件。應用套件是第三方應用受權的主體,接口的開發都與應用套件息息相關,請開發者仔細閱讀下方內容。app
基本信息:dom
信息項 | 要求及說明 |
---|---|
應用套件Logo | 應用套件的Logo,小於2M,640*640,在受權頁會被用於展現。 |
應用套件名稱 | 應用套件的名稱,2-16個字 |
介紹網站 | 介紹該應用套件網站或者頁面 |
應用套件介紹 | 描述該應用套件所提供的服務,4-120個字 |
受權方式 | 使用方式目前有兩種:線上自助註冊受權使用和服務商輔助受權使用。 |
服務行業 | 該應用套件所服務的行業對象,一個套件只能屬於一個服務行業。 |
套件標籤 | 套件提供的服務類型,如OA辦公、CRM、HR、ERP等。一個套件只能擁有一個標籤。 |
注意:網站
1)你應謹慎選擇所填寫的行業和標籤,行業是指可以使用該套件企業所屬的行業。當應用套件達到必定的活躍度後(受權企業數和日活躍用戶數),會自動在企業號第三方官網進行推薦,套件所在的分類將基於所設置的行業和標籤。
2)受權方式的做用在於區分應用套件是否能夠直接從企業號第三方官網發起受權,線上自助註冊受權使用是指該應用套件能夠直接從企業號第三方官網發起受權,而不跳轉服務商網站,該類型的應用套件還能夠支持移動端發起應用套件受權;服務商輔助受權使用是指該應用套件必須跳轉服務商網站,從服務商網站發起應用套件的受權,該類型的應用套件不支持移動端發起應用套件受權。
3)你能夠建立或者選擇其餘開發者已建立的標籤。你應該謹慎選擇套件標籤,用戶每每會在企業號中經過標籤查找相關聯的套件。
開發信息:
套件參數內容 | 說明 |
---|---|
發起受權域名 | 在該域名下發起的受權請求才可被經過,企業點擊受權連接時,企業號會檢查該域名是否已登記。 |
受權完成回調域名 | 在第三方應用受權流程中,受權成功後會回調該域名,返回臨時code。你需用此code換取永久受權碼,請儘可能將此域名與發起受權域名保持一致。 |
系統事件接收URL | 系統將會把此套件的受權變動事件以及ticket參數推送給此URL,ticket說明詳見API接口說明。(填寫URL時須要正確響應微信驗證URL的請求,具體說明請閱讀「回調模式」) |
Token | 可任意填寫,用於生成簽名,校驗回調請求的合法性。後續全部託管的企業產生的回調消息都使用該值來解密。 |
EncodingAESKey | 回調消息加解密參數,是AES密鑰的Base64編碼,用於解密回調消息內容對應的密文。後續全部託管的企業產生的回調消息都使用該值來解密。 |
應用套件ID | 應用套件的編號,相關的接口調用須要使用,由系統生成,不可更改。 |
應用套件secret | 應用套件的密鑰,相關的接口調用須要使用。 |
白名單IP列表 | 應用套件調用企業號第三方應用API時的合法IP列表,只有白名單內的IP才能正常調用企業號API,後續IP如有修改,須要及時進行列表更新。 |
建立完成以後,系統會告知開發者該應用套件的Suiteid和Suitesecret。(詳見第三方應用接口說明)
進入建立套件頁面,填寫基本資料
點擊下一步,填寫開發資料
關於"系統事件接收URL"的填寫
系統事件接收URL支持$CORPID$模板,調用時會將$CORPID$替換成企業號的corpid,因此"系統事件接收URL"能夠寫成
http://AAA.com/api/weixin/callback.do?corpid=$CORPID$
驗證URL有效性
當你提交以上信息時,企業號將發送GET請求到填寫的URL上,GET請求攜帶四個參數,企業在獲取時須要作urldecode處理,不然會驗證不成功。
參數 | 描述 | 是否必帶 |
---|---|---|
msg_signature | 微信加密簽名,msg_signature結合了企業填寫的token、請求中的timestamp、nonce參數、加密的消息體 | 是 |
timestamp | 時間戳 | 是 |
nonce | 隨機數 | 是 |
echostr | 加密的隨機字符串,以msg_encrypt格式提供。須要解密並返回echostr明文,解密後有random、msg_len、msg、$CorpID四個字段,其中msg即爲echostr明文 | 首次校驗時必帶 |
企業經過參數msg_signature對請求進行校驗,若是確認這次GET請求來自企業號,那麼企業應該對echostr參數解密並原樣返回echostr明文(不能加引號,不能帶bom頭,不能帶換行符),則接入驗證生效,回調模式才能開啓。
摘自http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F
"系統事件接收URL"響應的代碼以下
/** * 微信回調響應 * @author:leap * @MethodName: callback * @Description: * @param req * @param res * @date:2016年8月25日 */ @RequestMapping(value="callback") @ResponseBody public void callback(HttpServletRequest req, ServletResponse res){ /** url中$CORPID$模板替換後的corpid **/ String corpid = req.getParameter("corpid"); /** url中的簽名 **/ String msgSignature = req.getParameter("msg_signature"); /** url中的時間戳 **/ String timestamp = req.getParameter("timestamp"); /** url中的隨機字符串 **/ String nonce = req.getParameter("nonce"); /** 建立套件時驗證回調url有效性時傳入**/ String echostr = req.getParameter("echostr"); WxAuthorizeLogic wxAuthorizeLogic = new WxAuthorizeLogic(); String result = ""; try { if(!Utils.isBlank(echostr)){ /* * 驗證回調url有效性 * 響應需對echostr參數解密並原樣返回echostr明文(不能加引號,不能帶bom頭,不能帶換行符) */ String verifyURLResult = wxAuthorizeLogic.verifyURL(msgSignature, timestamp, nonce, echostr, corpid); res.getWriter().write(verifyURLResult); }else { //其餘操做 } } catch (Exception e) { e.printStackTrace(); } }
/** * 微信受權邏輯 * @author:leap * @Description: * @date:2016年8月30日 */ public class WxAuthorizeLogic { /** * 驗證回調URL有效性 * @author:leap * @MethodName: verifyURL * @Description: * @param msgSignature url中的簽名 * @param timestamp url中的時間戳 * @param nonce url中的隨機字符串 * @param echostr 回顯字符串 * @param corpid 用於建立解密類 * @return 返回解密後的明文字符串 * @throws AesException * @date:2016年8月30日 */ public String verifyURL(String msgSignature, String timestamp, String nonce, String echostr, String corpid) throws AesException{ //注意建立解密對象時使用的是CORP_ID而不是SUITE_ID WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(WXBase.SUITE_TOKEN, WXBase.SUITE_ENCODING_AES_KEY, corpid); String result = wxBizMsgCrypt.VerifyURL(msgSignature, timestamp, nonce, echostr); logger.info("VerifyURLResult=" + result); return result; } }
其中類WXBizMsgCrypt由官方提供
注意事項:
1.com\qq\weixin\mp\aes目錄下是用戶須要用到的接入企業微信的接口,其中WXBizMsgCrypt.java文件提供的WXBizMsgCrypt類封裝了用戶接入企業微信的三個接口,其它的類文件用戶用於實現加解密,用戶無須關心。sample.java文件提供了接口的使用示例。
2.WXBizMsgCrypt封裝了VerifyURL, DecryptMsg, EncryptMsg三個接口,分別用於開發者驗證回調url、接收消息的解密以及開發者回覆消息的加密過程。使用方法能夠參考Sample.java文件。
3.請開發者使用jdk1.6或以上的版本。針對org.apache.commons.codec.binary.Base64,須要導入jar包commons-codec-1.9(或commons-codec-1.8等其餘版本),咱們有提供,官方下載地址:
http://commons.apache.org/proper/commons-codec/download_codec.cgi
4.異常java.security.InvalidKeyException:illegal Key Size的解決方案:
在官方網站下載JCE無限制權限策略文件(請到官網下載對應的版本, 例如JDK7的下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html ):
下載後解壓,能夠看到local_policy.jar和US_export_policy.jar以及readme.txt。若是安裝了JRE,將兩個jar文件放到%JRE_HOME% \lib\security目錄下覆蓋原來的文件,若是安裝了JDK,將兩個jar文件放到%JDK_HOME%\jre\lib\security目錄下覆蓋原來文件。
***紅字部分是必要操做,不可忽略***
消息:新博客地址 blog.leapmie.com,之後的更新都會在新博客首發,感謝支持~(園子視狀況更新)