以下是我遇到的服务器设置/问题:
new SoapClient(self::VAT_VALIDATION_WSDL_URL)
)进行调用request_success => bool(false)
,因此请求未成功完成答案 0 :(得分:8)
这里的问题难以追查,但很容易解决。
ec.europa.eu 接受 IPv6 请求,并使用IPv6对其进行响应。问题是并非所有服务都能正常使用IPv6。因此,如果您的服务器同时使用IPv4和IPv6,它将更喜欢使用IPv6,因此SOAP请求将失败。
例如:
WKT-03:~$ ping6 ec.europa.eu #not working
connect: Network is unreachable
WKT-03:~$ ping ec.europa.eu #working
PING ec.europa.eu (147.67.136.103) 56(84) bytes of data.
<强>解决方案:强>
disable ipv6 on the server有两种解决方案,或者在/etc/hosts
中添加新规则:
147.67.136.103 ec.europa.eu # when/if IP changes, this stops working
因此迫使它使用IPv4。两者都不是很优雅,但这应该有效,直到API完全适用于IPv6。
答案 1 :(得分:-2)
SoapClient有一个stream_context
选项。
stream_context
创建bindto
示例:
$opts = array(
'socket' => array(
'bindto' => 'IP4_ADDRESS_OF_YOUR_SERVER:0'
)
);
$context = stream_context_create($opts);
$client = new SoapClient(self::VAT_VALIDATION_WSDL_URL,
array(
'stream_context' => $context
)
);