使用 nusoap 时如何强制执行 TLS 1.2?

How Can I enforce TLS 1.2 when using nusoap?

我正在使用 nusoap 连接 Eway legacy Api。突然,Eway 在他们这边强制执行 TLS 1.2。所以我在我的服务器中设置了 open ssl 1.0 和 TLS 1.2。

我正在从该服务器连接 Eway rapid api,它工作正常。由于 Legacy 和 Rapid api 都需要 TLS 1.2 并且 rapid 工作正常,这意味着我们的服务器设置正常。但是这个遗留 api 连接不起作用。

当我使用 nusoap 连接 Eway legacy API 时,我需要通过代码强制执行 TLS 1.2。

代码示例 -

<?php

$client = new nusoap_client("https://www.eway.com.au/gateway/rebill/manageRebill.asmx");
$client->namespaces['man'] = 'http://www.eway.com.au/gateway/rebill/manageRebill';
$headers = "<man:eWAYHeader><man:eWAYCustomerID>****</man:eWAYCustomerID><man:Username>****</man:Username><man:Password>****</man:Password></man:eWAYHeader>";
$client->setHeaders($headers);

$requestbody = array();
$soapactionUrl = 'http://www.eway.com.au/gateway/rebill/manageRebill/';
$requestbody['man:RebillCustomerID'] = $eway_rebill_customer_id;
$requestbody['man:RebillID'] = $eway_rebill_id;
$soapaction = 'QueryRebillEvent';
$client = $this->_creatEwayRebillRequestHeader();

$result = $client->call('man:'.$soapaction, $requestbody, '', $soapactionUrl.$soapaction,true);
$err_msg = $client->getError();
echo $err_msg;
?>

我收到的错误消息是 -

wsdl error: Getting https://www.eway.com.au/gateway/rebill/manageRebill.asmx - HTTP ERROR: Unsupported HTTP response status 403 Forbidden (soapclient->response has contents of the response)

我确定我的凭据,而且 eway 支持团队还告诉我强制执行 TLS 1.2 来解决问题。但是我不知道如何在 nusoap 库中强制执行 TLS 1.2。

看来您可以告诉 NuSOAP 使用 CURL。所以稍微修改设置应该可以解决问题

$client = new nusoap_client("https://www.eway.com.au/gateway/rebill/manageRebill.asmx");
$client->setUseCURL(true);
$client->setCurlOption(CURLOPT_SSLVERSION, '6'); // TLS 1.2

我没有办法对此进行测试,但我基于 the NuSOAP class found in GitHub 进行了测试。这适用于 CURL,所以它应该在这里工作。