我想使用 https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl 确认多个地址。
由于某种原因,我不断收到 MS_MAX_CONCURRENT_REQ 错误。我理解该错误的含义,但我不明白为什么它总是如此随机地发生。每次通话后我都会睡 15 秒。到目前为止,我可以过滤掉错误主要发生在德国增值税 ID 上。
如何在不增加睡眠时间的情况下最小化此错误?
这是我当前的 SOAPClient 设置。
$client = new SoapClient('https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl', ['trace' => false,'keep_alive' => false]);
$result = $client->checkVatApprox([
'countryCode' => $countryCode,
'vatNumber' => $vatNumber,
'traderName' => $traderName,
'traderStreet' => $traderStreet,
'traderPostcode' => $traderPostcode,
'traderCity' => $traderCity,
'requesterCountryCode' => $requesterCountryCode,
'requesterVatNumber' => $requesterVatNumber
]);
您可以在该服务的 WSDL 文档中找到:
除了定期重试直至成功之外,您自己对此无能为力。确保使用友好的退避策略,例如在失败的情况下将每个请求之间的睡眠时间加倍(也称为“指数退避”)。
我意识到这个问题已经相当老了,但我自己正在研究这个问题,并想添加它看起来是随机的原因。
不仅仅是您的请求达到了请求限制。
据我了解,VoW 有一个限制,您可以自己达到该限制,但 VIES 对成员国/北爱尔兰国家服务的请求也可以达到由成员国系统设置的限制。
根据此来源:https://viesapi.eu/vies-problems-with-verifying-companies-from-germany-de/
相关部分引用:
[..] VoW 处理的并发请求有限制。系统可以处理的并发请求的最大数量。如果系统收到新的请求,并且达到最大并发请求数,则拒绝该请求。 最大并发请求数与特定 IP 无关。这是所有用户的全局计数。此外,最大并发限制既解决了 VoW 整体问题,也解决了每个成员国的问题,并针对每种类型的验证请求,即手动 (INT)、SOAP (API)、REST (API) 以及 BATCH。 遗憾的是,根据一些国家主管部门的要求,我们无法透露 VoW 中阈值的确切水平。