注:文中綠色部分為摘自微信官方文檔
第三方應用提供給企業的是一個應用,但是應用必須在套件下創建,所以第一步是要創建套件。
注冊成為應用提供商,必須輸入以下信息:
| 信息項 | 要求及說明 |
|---|---|
| 企業Logo | 應用提供商的企業Logo,小於2M,640*640,背景為白色 |
| 企業簡稱 | 使用對外宣傳的企業簡稱,能代表企業的名字,2-16個字 |
| 企業簡介 | 描述企業所提供的服務,4-120個字 |
| 企業官網 | 應用服務商的企業官網 |
注冊條件:a)擁有一個已經過認證的企業號 b)用系統管理員身份進行申請
符合以上條件后,登錄微信第三方應用官網,選擇“服務商登錄”

登陸后界面如下,選擇添加應用套件

創建應用套件
開發者完成注冊之后,即可創建應用套件。應用套件是第三方應用授權的主體,接口的開發都與應用套件息息相關,請開發者仔細閱讀下方內容。
基本信息:
| 信息項 | 要求及說明 |
|---|---|
| 應用套件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,以后的更新都會在新博客首發,感謝支持~(園子視情況更新)
