登录开始免费试用
Meta Tech Provider

Coexistence 注册后出现“此授权码已过期”

Meta 的 Embedded Signup 完成后,会向发起的平台返回一个短期有效的代码,平台必须在 30 秒内用它换取访问令牌。如果交换发生得太晚,或使用了之前那次尝试的代码,Meta 就会提示授权码已过期。重新运行流程即可获得新的代码。

30 seconds

Meta 为 Embedded Signup 返回的可交换令牌代码设定的有效时间(TTL)。

Server-side

Meta 表示,令牌交换必须是服务器到服务器的请求,绝不能在客户端进行。

24 hours

平台在完成接入后,可用于同步 Coexistence 号码历史记录的时间,超过后必须重新走一遍流程。

哪个代码已过期?

企业完成 Embedded Signup 后,Meta 会把资产 ID 和一个可交换的令牌代码返回给打开弹窗的浏览器窗口。随后,平台会把该代码发送到自己的服务器,服务器携带应用 ID 和应用密钥调用 Meta 的 oauth access_token 端点,将其换成企业访问令牌。

Meta 的实施指南对时间要求写得很明确:可交换令牌代码的有效时间(TTL)为 30 秒,因此平台必须能在其过期前完成交换。超过这个时间再尝试交换会被拒绝,而“此授权码已过期”正是这次拒绝的提示。企业并没有做错什么,弹窗完成得慢并不是问题所在;计时从代码返回的那一刻就开始了。

为什么弹窗完成得晚或重复完成时会出现这个错误?

有几种情况会让交换超过这一时限。

一种是流程完成时,浏览器标签页被留在后台,或者笔记本电脑进入了休眠,导致代码在签发很久之后才到达平台的服务器。另一种是平台的服务器把交换排在其他任务之后,而没有立即执行。还有一种是用户打开了两次流程并且都完成了,而平台在第二个窗口完成之后,才去交换第一个窗口的代码。

在测试中还有第四种情况:从浏览器控制台复制代码,再用 cURL 或 Postman 手动交换。Meta 的指南正是针对这种做法给出了警告,并建议在开始之前先准备好交换请求。

如何完成连接?

请在单个窗口中从头重新运行流程,并在完成时让平台的页面保持在前台。每次完成都会返回新的代码,平台只需尽快交换该代码即可。

对于 Coexistence 号码,请尽快操作。企业完成流程时,Meta 会转换 WhatsApp Business 账户;平台完成客户接入后,有 24 小时的时间同步消息历史记录,超过后必须先将该企业取消接入,再让其重新完成流程。

在平台一侧,根本的解决办法是在代码到达的那一刻就在服务器上完成交换,并且排在所有其他接入步骤之前。

常见错误

  • 用同一个代码重试令牌交换。它在 30 秒后就已过期,不会再恢复有效。
  • 同时在两个窗口中运行注册流程。只有正在被交换的那次尝试所返回的代码才有效。
  • 在浏览器中交换代码。Meta 要求交换必须是携带应用密钥的服务器到服务器请求。
使用 EasyCoexistence 完成这些操作

Embedded Signup 一返回代码,EasyCoexistence 就会在其服务器上完成交换,并将每次尝试记录在连接时间线上,因此丢失的代码会显示为带日期的事件,而不是含糊的失败。

常见问题

企业到底有没有连接成功这个号码?

企业已完成 Meta 的流程,但平台无法将代码换成可用的令牌,所以暂时还不能对该号码进行操作。重新运行流程即可获得新的代码。

可以让代码的有效期更长吗?

不能。30 秒的有效时间由 Meta 设定,任何平台都无法延长。

WhatsApp Business 应用会受到影响吗?

不会。在问题解决期间,该应用在手机上仍可正常使用。

这与访问令牌过期是一回事吗?

不是。这里指的是短期有效的注册代码。正常连接上的访问令牌过期时,会返回错误 190。

继续阅读

准备开始了吗?

几分钟即可设置 WhatsApp Coexistence,而不是几个月。应用会继续在手机上运行。

开始免费试用

验证时间

Coexistence 错误:授权码已过期