企业号第三⽅平台应⽤开发
最近在做企业号第三⽅应⽤开发,不过由于的接⼝⽂档写的不详细,⽽且⽐较混乱,⾛了不少弯路,现在就主要开发流程总结⼀下,以便新⼿朋友做个参考,有什么问题或
者不对的地⽅希望⼤家可以指出,谢谢。
本⽂主要介绍的是第三⽅应⽤创建和企业号授权安装第三⽅应⽤,授权成功之后的接⼝调⽤就按照的具体功能开发⽂档开发就可以了,这部分还是挺详细的。
下⾯介绍具体流程:
1.创建套件和应⽤
1.1创建套件
套件简单点理解就相当于应⽤的主体,也可以把他当作应⽤的分类,可以创建多个套件,每个套件也可以创建多个应⽤,创建套件如下图:
点击添加应⽤套件,填写基本信息,⽐较特殊的是授权⽅式,授权⽅式有两种:
  1)线上⾃助注册授权使⽤:指的是通过第三⽅应⽤平台点击跳转到应⽤服务商的授权形式;
  2)服务商辅助授权使⽤:指的是通过应⽤服务商的⽹站跳转到接⼝的授权形式。
可以根据需要⾃⾏选择。
如下图:
点击下⼀步,其他信息按照要求填写就可以,但是系统事件接受URL需要验证后才能保存,详细接⼝说明,请点击“”查看,简单验证代码如下:
1string signature = CommonHelper.QueryString("msg_signature");  //加密签名
2 string timestamp = CommonHelper.QueryString("timestamp");  //时间戳
3string nonce = CommonHelper.QueryString("nonce");  //随机数
4 string echostr = CommonHelper.QueryString("echostr");  //随机字符串
5 if (string.IsNullOrEmpty(signature) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(echostr)) { return null; }
6 WXBizMsgCrypt wxMsgCrypt = new WXBizMsgCrypt(Token, EncodingAESKey, WeChatApiConfig.CorpID);  //提供的加解密类
7 string sEchoStr = "";
8 int code = wxMsgCrypt.VerifyURL(signature, timestamp, nonce, echostr, ref sEchoStr);
这⾥⽤到了提供的加解密类,请点击“”,将会跳转到接⼝具体页⾯
如下图:
  配置开发信息需要注意如下问题:
    (1) ⾸先点击“Token”和“EncodingAESKey”下⾯的“随机⽣成”按钮,对应⽣成密钥;
    (3) 根据⾃⾝需求填写其他项⽬,然后点击“提交”按钮,会验证“系统事件接收URL”,需要⽤到步骤⼆的设置,否则⽆法保存
1.2 创建应⽤
进⼊套件⾥⾯添加创建应⽤,弹出如下页⾯:
点击开始创建应⽤按钮,填写基本信息,这⾥logo要按照标准,还有截图⾄少要上传3张,要清晰,⼤⼩不能超过5M,否则审核不会通过的,如下图:
点击下⼀步,填写开发信息,如下图:
  CallbackURL ⽤来接受消息;
  业务设置URL 设置需要验证,验证⽅式跟创建套件的系统事件接收URL是⼀样的,否则⽆法保存。设置成功之后,安装应⽤后的企业号可以通过这个链接直接快捷登录到服
务商后台。以下列出主要代码:
1 WeChatApiHelper apiHelper = new WeChatApiHelper(CommonApi.Token, CommonApi.EncodingAESKey, CommonApi.suiteId, CommonApi.suiteSecret);
2string auth_code = CommonHelper.QueryString("auth_code");    //服务商需要在套件中的应⽤设置“业务设置URL” 回调,返回auth_code(oauth2.0授权企业号管理员登录产⽣的code)
3if (!string.IsNullOrEmpty(auth_code))
4 {
5    WeChatUserHelper userHelper = new WeChatUserHelper();
6//获取应⽤提供商凭证接⼝链接:qydev.weixin.qq/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E5%BA%94%E7%94%A8%E6%8F%90%E4%BE%9B%E5%95%86%E5%87%AD%E8%AF%81
7    ProviderAccessToken pAccessToken = apiHelper.GetProviderToken();
8if (pAccessToken != null && !string.IsNullOrEmpty(pAccessToken.provider_access_token))
9    {
10//获取企业号登录⽤户信息接⼝链接:qydev.weixin.qq/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E4%BC%81%E4%B8%9A%E5%8F%B7%E7%99%BB%E5%BD%95%E7%94%A8%E6%88%B7%E4%BF%A1%
11        WeChatLoginInfoModel resultModel = userHelper.GetLoginInfo(pAccessToken.provider_access_token, auth_code);
12        Response.Write(resultModel);
13    }
14 }
15if (Request.InputStream != null && Request.InputStream.Length > 0)
16 {
17//验证通过接受消息
18 }
19else
20 {
21//第⼀次验证
22string signature = CommonHelper.QueryString("msg_signature");  //加密签名
23string timestamp = CommonHelper.QueryString("timestamp");  //时间戳
24string nonce = CommonHelper.QueryString("nonce");  //随机数
25string echostr = CommonHelper.QueryString("echostr");  //随机字符串
企业号申请26if (string.IsNullOrEmpty(signature) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(echostr)) { return null; }
27    WXBizMsgCrypt wxMsgCrypt = new WXBizMsgCrypt(Token, EncodingAESKey, WeChatApiConfig.CorpID);    //提供的加解密类
28string sEchoStr = "";
29int code = wxMsgCrypt.VerifyURL(signature, timestamp, nonce, echostr, ref sEchoStr);
30    sEchoStr = apiHelper.CheckSignature();
31    Response.Write(sEchoStr);
32 }
点击提交,到现在创建应⽤就完成了
2. 企业号管理员授权流程
2.1 从企业号的第三⽅官⽹发起
这种⽅式⽐较简单,按照接⼝说明做就可以了,不⽤特殊说明,点击
2.2 从应⽤提供商⽹站发起授权
本⽂重点介绍这种⽅式,主要分成⼏个步骤:
  1)企业进⼊应⽤提供商⽹站
  指的是,企业系统管理员进⼊应⽤提供商⽹站,如www.ABC。
  2)获取预授权码
  预授权码是应⽤套件实现授权托管的安全凭证,通过suite_id,suite_secret和suite_ticket获取,相关接⼝为get_pre_auth_code。其中,suite_ticket由企业号服务器定期每10分钟推送到套件注册的callbackurl上
  3)应⽤提供商引导企业系统管理员进⼊应⽤套件授权页
  应⽤提供商可以在⾃⼰的⽹站中放置“企业号应⽤授权”的⼊⼝,引导企业号管理员进⼊应⽤套件授
权页。⽹址为:
  该⽹址中应⽤提供商需要提供suite_id、预授权码、授权完成回调URI和state
  4)企业号管理员确认并同意授权托管给应⽤提供商
  企业号管理员进⼊套件授权页后,设置授权内容,确认并同意将⾃⼰的企业号应⽤或通讯录授权托管给应⽤提供商,完成授权流程。
  5)授权成功,返回临时授权码
  授权流程完成后,会进⼊回调URI,并在URI参数中返回临时授权码、过期时间以及state参数(redirect_uri?auth_code=xxx&expires_in=1200&state=xx)
  6)利⽤临时授权码获取永久授权码以及授权信息
  在得到临时授权码后,应⽤提供商可以使⽤临时授权码换取永久授权码以及授权信息,后续可以通过永久授权码调⽤企业号相关API(能调⽤哪些API,取决于⽤户将哪些权限集授权给了应⽤提供商)。
  具体获取接⼝,请