PHP SOAP 客户端.HTTPS 无法连接



我的一生都无法让这个 SOAP 客户端工作。在我的朋友框上运行良好,我已经比较了 php.ini,看不到与 SOAP 设置相关的任何内容。我正在运行最新的PHP和UBuntu 12.10。

这是我的代码:

$url = "https://m2mconnect.orange.co.uk/orange-soap/services/MessageServiceByCountry?wsdl";
$options["connection_timeout"] = 1000;
$options["location"] = $url;
$options['trace'] = 1;

try {
$client = new SoapClient("orange.xml",$options);
print_r($client->__getFunctions());

$client->peekMessages(
    'user',
    'pass',
    10
);
var_dump($client);
} catch (Exception $e) {
    echo "REQUEST:n" . $client->__getLastRequest() . "n";
    echo "REQUEST HEADERS:n" . $client->__getLastRequestHeaders() . "n";
    echo "RESPONSE HEADERS:n" . $client->__getLastResponseHeaders() . "n";
    echo "Response:n" . $client->__getLastResponse() . "n";
    echo "Exception: n" . $e->getMessage() . "n";
    echo "Trace: n" . $e->getTraceAsString() . "n";
}

我必须将 WSDL 另存为文件,否则会收到不同的错误!

下面是运行的代码:

Array
(
    [0] => int sendMessage(string $username, string $password, string $deviceMSISDN, string $message, boolean $deliveryReport, string $mtBearer)
    [1] => ArrayOf_xsd_string getDeliveryReports(string $username, string $password, string $deviceMSISDN, string $countryCode)
    [2] => ArrayOf_xsd_string readMessages(string $username, string $password, int $count, string $deviceMsisdn, string $countryCode)
    [3] => boolean flushMessages(string $username, string $password, string $deviceMSISDN, string $countryCode)
    [4] => ArrayOf_xsd_string waitForMessage(string $username, string $password, int $timeout, string $deviceMSISDN, int $msgref, string $countryCode)
    [5] => int sendMessageWithValidityPeriod(string $username, string $password, string $deviceMSISDN, string $message, boolean $deliveryReport, string $mtBearer, string $binarySmsDcs, string $validityDaysHoursMins)
    [6] => int sendBinarySmsMessage(string $username, string $password, string $deviceMSISDN, string $message, boolean $deliveryReport, string $mtBearer, string $binarySmsDcs)
    [7] => ArrayOf_xsd_string sendAndWait(string $username, string $password, int $timeout, string $deviceMSISDN, string $message, boolean $deliveryReport, string $mtBearer)
    [8] => ArrayOf_xsd_string sendBinarySmsAndWait(string $username, string $password, int $timeout, string $deviceMSISDN, string $message, boolean $deliveryReport, string $mtBearer, string $binarySmsDcs)
    [9] => ArrayOf_xsd_string peekMessages(string $username, string $password, int $count, string $deviceMsisdn, string $countryCode)
    [10] => ArrayOf_xsd_string getDeliveryReportsFromDate(string $username, string $password, string $deviceMSISDN, string $countryCode, string $fromDate)
)
REQUEST:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soap.otel.telematics.orange.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:peekMessages><username xsi:type="xsd:string">username</username><password xsi:type="xsd:string">password</password><count xsi:type="xsd:int">10</count><deviceMsisdn xsi:nil="true"/><countryCode xsi:nil="true"/></ns1:peekMessages></SOAP-ENV:Body></SOAP-ENV:Envelope>
REQUEST HEADERS:
RESPONSE HEADERS:
RESPONSE:
EXCEPTION: 
Could not connect to host
Trace: 
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'https://m2mconn...', '', 1, 0)
#1 /var/www/soap-app.com/Zend/public/soap.php(34): SoapClient->__call('peekMessages', Array)
#2 /var/www/soap-app.com/Zend/public/soap.php(34): SoapClient->peekMessages('username', 'password', 10)
#3 {main}

我的用户名和密码是正确的。我相信这与SSL有关。以下是我的 SOAP 和 SSL php.ini 设置:

soap
Soap Client     enabled
Soap Server     enabled 
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls
curl    SSL     Yes 
openssl
OpenSSL support             enabled
OpenSSL Library Version     OpenSSL 1.0.1c 10 May 2012
OpenSSL Header Version      OpenSSL 1.0.1c 10 May 2012 
SSL Version                 OpenSSL/1.0.1c 

任何帮助都会很棒。把我的头发!

更多详情:

运行:

echo file_get_contents('https://m2mconnect.orange.co.uk/orange-soap/services/Message‌​ServiceByCountry?wsdl');

结果:

Warning: file_get_contents(): Failed to enable crypto.

编辑:

似乎这些错误票证是相关的: https://bugs.php.net/bug.php?id=52106

但是我使用的是最新的PHP版本,我需要这样做,因为我正在使用Zend Framework 2。

https://m2mconnect.orange.co.uk/orange-soap/services/MessageServiceByCountry?wsdl

似乎没有加载,只需 http://

如果你说你可以做到,那么这应该不是问题。但是,如果您需要更多帮助,那么我建议您这样做,以便我们可以访问该URL。然后我们可以给它适当的测试和更好的解决方案。

似乎这一切都是因为我的网络设置。我正在使用安装了开源固件DD-WRT的路由器来扩展我的无线网络。当我将该路由器从网络中取出时,连接成功。我花了一周时间解决这个问题!

最新更新