Code前端首页关于Code前端联系我们

第三方企业微信应用开发Nodejs入门教程

terry 2年前 (2023-09-23) 阅读数 61 #移动小程序

公司想要为企业微信开发Worktile。曾经是微信公司内部应用,所以只适合私有部署客户,不能用于公有云客户。本文是关于企业微信第三方应用的开发,主要介绍一下研究阶段遇到的好东西。

开发前,您需要注册为第三方服务商,然后使用第三方服务商账号创建应用程序。创建后,只需要管理员对应用进行授权,第三方服务商即可为用户提供服务。

1.注册为第三方服务商

登录服务商官网,注册为服务商,并登录服务商管理后台。

2.配置开发信息

在创建应用之前,首先要配置通用开发参数

nodejs 开发企业微信第三方应用入门教程

填写系统事件接收URL时,必须正确响应微信公司验证URL请求。为此,您可以参考微信企业后台及API设置,在自己搭建的应用中接收消息。在企业管理后台,进入需要设置接收消息的目标应用,点击“消息接收”中的“设置API接收”按钮,打开配置页面。

nodejs 开发企业微信第三方应用入门教程

需要填写申请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参数以及加密消息体
timestamptimestamp
一次组合在一起随机数
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.创建应用

nodejs 开发企业微信第三方应用入门教程

4.测试应用

应用创建成功后,服务商可以授权10个测试公司

nodejs 开发企业微信第三方应用入门教程

启动时企业微信应用市场授权后,企业微信向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');
});

应用测试注意事项

  1. 用于安装和测试的微信公司账号必须由服务商注册。每个应用支持同时添加10个测试微信企业号
  2. 用于安装和测试的微信企业号必须使用当前应用配置数据,后续更改将不再同步;如需更新应用信息,请重新授权安装
  3. 同一微信企业号不支持同时安装测试应用和正式发布的应用

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:手动授权,可以获取详细的会员信息。 ,包括手机、电子邮件和其他敏感数据。 ? 终端通过该参数来决定是否获取身份信息

nodejs 开发企业微信第三方应用入门教程

当公司员工点击时,页面会跳转到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&timestamp=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

nodejs 开发企业微信第三方应用入门教程

,然后通过https://qyapi.weixin.qq.com/CGI-BIN/Service/Get_perManent_Code? Suite_access_token = Suite_access_tokenAuth_code 可以获取access_token和agentid。 ,但是当旧集授权多个应用时,会返回多个代理。对于单个申请的新授权,始终只会返回一名代理。

您很高兴通过access_token和agentId向用户发送消息。

nodejs 开发企业微信第三方应用入门教程

当您点击链接时,您可以跳转到特定的任务或时间表等。但返回后,仍处于企业微信消息模块,无法自动打开第三方应用。客服回复不支持这一点。

9。注释

  • API 可能是及时的。如有差异,以官方api为准。
  • 完整呈现

本文作者:王鹏

文章来源:Worktile技术博客

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门