Coexistence 注册后出现“此授权码已过期”
Meta 的 Embedded Signup 完成后,会向发起的平台返回一个短期有效的代码,平台必须在 30 秒内用它换取访问令牌。如果交换发生得太晚,或使用了之前那次尝试的代码,Meta 就会提示授权码已过期。重新运行流程即可获得新的代码。
Meta 为 Embedded Signup 返回的可交换令牌代码设定的有效时间(TTL)。
Meta 表示,令牌交换必须是服务器到服务器的请求,绝不能在客户端进行。
平台在完成接入后,可用于同步 Coexistence 号码历史记录的时间,超过后必须重新走一遍流程。
哪个代码已过期?
企业完成 Embedded Signup 后,Meta 会把资产 ID 和一个可交换的令牌代码返回给打开弹窗的浏览器窗口。随后,平台会把该代码发送到自己的服务器,服务器携带应用 ID 和应用密钥调用 Meta 的 oauth access_token 端点,将其换成企业访问令牌。
Meta 的实施指南对时间要求写得很明确:可交换令牌代码的有效时间(TTL)为 30 秒,因此平台必须能在其过期前完成交换。超过这个时间再尝试交换会被拒绝,而“此授权码已过期”正是这次拒绝的提示。企业并没有做错什么,弹窗完成得慢并不是问题所在;计时从代码返回的那一刻就开始了。
为什么弹窗完成得晚或重复完成时会出现这个错误?
有几种情况会让交换超过这一时限。
一种是流程完成时,浏览器标签页被留在后台,或者笔记本电脑进入了休眠,导致代码在签发很久之后才到达平台的服务器。另一种是平台的服务器把交换排在其他任务之后,而没有立即执行。还有一种是用户打开了两次流程并且都完成了,而平台在第二个窗口完成之后,才去交换第一个窗口的代码。
在测试中还有第四种情况:从浏览器控制台复制代码,再用 cURL 或 Postman 手动交换。Meta 的指南正是针对这种做法给出了警告,并建议在开始之前先准备好交换请求。
如何完成连接?
请在单个窗口中从头重新运行流程,并在完成时让平台的页面保持在前台。每次完成都会返回新的代码,平台只需尽快交换该代码即可。
对于 Coexistence 号码,请尽快操作。企业完成流程时,Meta 会转换 WhatsApp Business 账户;平台完成客户接入后,有 24 小时的时间同步消息历史记录,超过后必须先将该企业取消接入,再让其重新完成流程。
在平台一侧,根本的解决办法是在代码到达的那一刻就在服务器上完成交换,并且排在所有其他接入步骤之前。
常见错误
- 用同一个代码重试令牌交换。它在 30 秒后就已过期,不会再恢复有效。
- 同时在两个窗口中运行注册流程。只有正在被交换的那次尝试所返回的代码才有效。
- 在浏览器中交换代码。Meta 要求交换必须是携带应用密钥的服务器到服务器请求。
Embedded Signup 一返回代码,EasyCoexistence 就会在其服务器上完成交换,并将每次尝试记录在连接时间线上,因此丢失的代码会显示为带日期的事件,而不是含糊的失败。
常见问题
企业到底有没有连接成功这个号码?
企业已完成 Meta 的流程,但平台无法将代码换成可用的令牌,所以暂时还不能对该号码进行操作。重新运行流程即可获得新的代码。
可以让代码的有效期更长吗?
不能。30 秒的有效时间由 Meta 设定,任何平台都无法延长。
WhatsApp Business 应用会受到影响吗?
不会。在问题解决期间,该应用在手机上仍可正常使用。
这与访问令牌过期是一回事吗?
不是。这里指的是短期有效的注册代码。正常连接上的访问令牌过期时,会返回错误 190。
继续阅读
准备开始了吗?
几分钟即可设置 WhatsApp Coexistence,而不是几个月。应用会继续在手机上运行。
开始免费试用验证时间