2011-08-30 71 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);