注:文中绿色部分为摘自微信官方文档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,之后的更新都会在新博客首发,感谢支持~(园子视状况更新)