このSOAPクライアントを機能させることはできません。My friends box で正常に動作し、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/MessageServiceByCountry?wsdl');
結果:
Warning: file_get_contents(): Failed to enable crypto.
編集:
これらのバグ チケットが関連しているようです: https://bugs.php.net/bug.php?id=52106
ただし、私は最新の PHP バージョンを使用しており、Zend Framework 2 を使用しているため必要があります。