2011-08-30 74 views
0

我試圖使用NuSOAP連接到安全的SOAP服務器。 (我給內置的SOAP庫的機會,但是這是奇怪的行爲,所以我切換到的NuSOAP。)PHP SOAP SSL問題

這裏是我的代碼:

require('application/libraries/nusoap/nusoap.php'); 
$soap = new nusoap_client('https://ws.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl', 'wsdl'); 
$soap->setCredentials('WS'.STORE_NUMBER.'._.1', 
    PASSWORD, 
    'certificate', 
    array(
     'sslcertfile' => 'first_data/cert.pem', 
     'sslkeyfile' => 'first_data/key.pem', 
     'passphrase' => KEY_PASSPHRASE 
    ) 
); 
if($err = $soap->getError()) { 
    die('Error: '.$err); 
} 
$result = $soap->call('fdggwsapi:FDGGWSApiOrderRequest', array('v1:Transaction' => '1')); 
if($soap->fault) { 
    echo 'Fault! <pre>'; 
    var_dump($result); 
    echo '</pre>'; 
} else { 
    if($err = $soap->getError()) { 
     die('Error: '.$err); 
    } else { 
     echo '<pre>'; 
     var_dump($result); 
     die('</pre>'); 
    } 
} 

我收到以下錯誤:

Error: wsdl error: Getting https://ws.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl - HTTP ERROR: cURL ERROR: 56: SSL read: error:1409441B:SSL routines:SSL3_READ_BYTES:tlsv1 alert decrypt error, errno 0 
url: https://ws.firstdataglobalgateway.com:443/fdggwsapi/services/order.wsdl 
content_type: 
http_code: 0 
header_size: 0 
request_size: 163 
filetime: -1 
ssl_verify_result: 0 
redirect_count: 0 
total_time: 0.531131 
namelookup_time: 0.00121 
connect_time: 0.070608 
pretransfer_time: 0.305044 
size_upload: 0 
size_download: 0 
speed_download: 0 
speed_upload: 0 
download_content_length: -1 
upload_content_length: 0 
starttransfer_time: 0 
redirect_time: 0 

可能的問題是什麼?我怎麼能調試呢?我非常喜歡這裏的聯賽。基於錯誤

+0

喂?我試圖做同樣的事情,我得到了'錯誤:操作fdggwsapi:FDGGWSApiOrderRequest不存在於WSDL中。「你面對同樣的問題嗎? –

回答

0

SSL read: error:1409441B:SSL routines:SSL3_READ_BYTES:tlsv1 alert 
decrypt error, errno 0 

在我看來像PHP庫順利讀取您的cert.pem和key.pem文件。這些文件可以有不同的格式。 Apache要求它們採用PKCS12格式,我猜測PHP是一樣的。您可以使用名爲「Keystore Explorer 4.0.1」的工具來驗證並在必要時進行轉換。

可以驗證鍵也格式的有效性,使用OpenSSL和該命令:

C:\Temp> openssl pkcs12 -info -in ksb_cert.p12 
+0

這很可能是我使用了錯誤的文件。下面是我得到的文件: –

+0

WS.key WS.key.pw.txt WS.ks WS.ks.pw.txt WS.p12 WS.p12.pw.txt WS.pem –

+0

莫非你建議在sslkeyfile和sslcertfile下使用哪一個? –

0

有了這個設置我的客戶最後工作

$client = new nusoap_client($wsdlurl,'wdsl'); 
 
$client->setUseCURL(true); 
 
$client->useHTTPPersistentConnection(); 
 
$client->setCurlOption(CURLOPT_SSL_VERIFYHOST, 0); 
 
$client->setCurlOption(CURLOPT_SSL_VERIFYPEER, 0); 
 
$client->setCurlOption(CURLOPT_RETURNTRANSFER, 1); 
 
$client->setCurlOption(CURLOPT_SSLVERSION,3);