第三方企业微信应用开发Nodejs入门教程
公司想要为企业微信开发Worktile。曾经是微信公司内部应用,所以只适合私有部署客户,不能用于公有云客户。本文是关于企业微信第三方应用的开发,主要介绍一下研究阶段遇到的好东西。
开发前,您需要注册为第三方服务商,然后使用第三方服务商账号创建应用程序。创建后,只需要管理员对应用进行授权,第三方服务商即可为用户提供服务。
1.注册为第三方服务商
登录服务商官网,注册为服务商,并登录服务商管理后台。
2.配置开发信息
在创建应用之前,首先要配置通用开发参数
填写系统事件接收URL时,必须正确响应微信公司验证URL请求。为此,您可以参考微信企业后台及API设置,在自己搭建的应用中接收消息。在企业管理后台,进入需要设置接收消息的目标应用,点击“消息接收”中的“设置API接收”按钮,打开配置页面。
需要填写申请URL、token、encodingAESKey三个参数
- URL是公司后台接收微信推送请求使用的访问协议和地址。它支持http或https协议(建议使用https以提高安全性)。
- 代币可由公司完成并用于创建签名。
- EncodingAESKey 用于加密消息体,是 AES 密钥的 Base64 编码。
2.1 检查URL有效性
当您点击“保存”时,企业微信将生成一个获取请求到完整的URL
例如,URL设置为https://api。 worktile.com
,企业微信会发送如下验证请求:
请求标题:https://api.worktile.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323&echostr=EN CRYPT_STR
参数 | Description |
---|---|
msg_signature | 企业微信加密签名,msg_signature将企业填写的token、请求中的timestamp和nonce参数以及加密消息体 |
timestamp | timestamp |
一次组合在一起 | 随机数 |
echostr | 加密字符串。为了获得消息内容的明文,需要对其进行解密。解密后有四个字段:random、msg_len、msg、receiveid。 msg 是消息内容的纯文本。 |
2.1.1 通过 msg_signature 参数验证请求。
首先进行配置。随机生成的 token、时间戳、nonce 和 msg_encrypt 使用 sha1 加密。这里我们可以直接使用npm sha1模块进行加密,然后检查得到的str是否等于msg_signature。?是
res.end(result);
2.2 回调 URL 验证错误问题
在验证 URL 时,经常会遇到 URL 验证错误问题。解决办法是使用微信公司号接口调试器
3.创建应用
4.测试应用
应用创建成功后,服务商可以授权10个测试公司
启动时企业微信应用市场授权后,企业微信向url发送post请求,回调应用刚刚设置的命令
。例如:thttps://api.Worktile.com/Worktile? Msg_signature = B99605616153FFBFBE6E6EBBD211E6714D & Timestamp = 1551076894 & Nonce = 1551709700 3就回到成功。
对于每个事件回调,服务提供商在收到推送调用后必须直接返回“成功”字符串。如果返回值不是“success”,企业微信会将返回内容视为错误信息。
app.post('/worktile', function (req, res) {
console.log('req.body', req.body);
res.send('success');
});
应用测试注意事项
- 用于安装和测试的微信公司账号必须由服务商注册。每个应用支持同时添加10个测试微信企业号
- 用于安装和测试的微信企业号必须使用当前应用配置数据,后续更改将不再同步;如需更新应用信息,请重新授权安装
- 同一微信企业号不支持同时安装测试应用和正式发布的应用
5. Web应用
已认证的服务商企业微信可进入申请管理-点击Web提交-查看申请-Web提交。? :
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
参数 | 描述 | 必填appid | 是 | 第三方应用程序ID(即以ww 或wx 开头的suite_id)。请注意, |
---|---|---|---|---|
redirect_uri | 与公司网站登录不同。这是授权后重定向的回调链接地址 | 。使用urlencode来处理链接。注意域名必须设置为第三方应用的可信域名 | ||
response_type | 为返回类型 | 目前固定:code | ||
scope | 为应用授权范围 | 。 snsapi_base:静默授权,可以检索会员的基本信息(UserId和DeviceId); snsapi_userinfo:静默授权,可以检索会员的详细信息,但不包括手机、邮箱等敏感信息; snsapi_privateinfo:手动授权,可以获取详细的会员信息。 ,包括手机、电子邮件和其他敏感数据。 ? | 终端通过该参数来决定是否获取身份信息 |
当公司员工点击时,页面会跳转到redirect_uri?code=CODE&state=STATE。第三方应用可以根据code参数获取企业员工的corpid和userid。最大代码长度为 512 字节。
6.2 获取访问用户身份
请求方式:GET(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/service/getuserinfo3rd?access_token=SUITE_ACCESS_TOKEN&code=CODE
参数 | 必须 | 说明 |
---|---|---|
access_token | 是第三方应用程序的 | suite_access_token,请参阅“获取第三方应用程序的凭证” |
code | 是 | 通过会员获得授权码,最多512字节。每个会员授权所附的代码都会有所不同。该代码只能使用一次,如果 5 分钟不使用,该代码将自动过期。 |
6.2.1 获取第三方应用的suite_access_token
请求方式:POST(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token
参数 | 是否需要 | 说明 |
---|---|---|
suite_id | 是 | 以ww或wx开头的App ID(对应以tj开头的旧套件ID) |
suite_secret 是.源IP API 中的地址。除了验证之外,还添加了 suite_ticket 作为安全凭证。 获取suite_access_token时需要提供suite_ticket参数。 suite_ticket定期推送到微信后台的“命令回调地址”,每十分钟更新一次。请参阅推送 suite_ticket。 suite_ticket 的实际有效期为 30 分钟。它可能允许连续两次未能获取 suite_ticket,但始终使用最后收到的 suite_ticket。 通过该接口获取的suite_access_token有效期为2小时。开发人员必须缓存它并且不能经常获取它。 6.2.2 获取推送suite_ticket微信公司服务器会定期(每十分钟)发送票据。工单将实时修改并用于后续接口调用。请求方式:POST (HTTPS) 请求地址:https://api.ninesix.cc/worktile?msg_signature=87276aaf15a13e1eb2ebb6d93732ca668c3ddef8×tamp=1551850300&nonce=1551051655 在授权、目录更改时,勾选时ket更改微信服务器等事件将会发送相应的事件消息到应用程序的“Command Callback URL”。 Nodejs接收xml。解析后,得到一个加密字段。然后使用上面通用开发参数的URL配置中使用的解密方法得到suite_ticket。 ? 必填 | 说明 | |
access_token | 是第三方应用程序的 | suite_access_token,请参阅“获取第三方应用程序的凭据” |
user_ticket | 是 | 会员票 |
返回结果:?
请求方式:POST(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
章节服务商第三时需要Access_token和应用agentId各方可以通过该接口获取企业授权信息来获取该参数值。事实上,他们可以通过获取公司的永久授权码来直接获取这两个值。
当我们成功测试并安装应用程序后,企业微信会将请求发布到指令回调URL。使用上面的解密方法,可以解析为xml中的auth_code
,然后通过https://qyapi.weixin.qq.com/CGI-BIN/Service/Get_perManent_Code? Suite_access_token = Suite_access_token
和Auth_code
可以获取access_token和agentid。 ,但是当旧集授权多个应用时,会返回多个代理。对于单个申请的新授权,始终只会返回一名代理。
您很高兴通过access_token和agentId向用户发送消息。
当您点击链接时,您可以跳转到特定的任务或时间表等。但返回后,仍处于企业微信消息模块,无法自动打开第三方应用。客服回复不支持这一点。
9。注释
- API 可能是及时的。如有差异,以官方api为准。
- 完整呈现
本文作者:王鹏
文章来源:Worktile技术博客
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。