我正在尝试使用PHP SOAP客户端发送测试消息。我正在使用BeSimpleSoap库,因为我遇到了标准PHP SOAP calss和NuSOAP类的问题。 我已经成功下载了受PKI保护的文件。部分代码是:
$OIB_URL="https://xxxx:8444/kpoib/kp_lista_aktiviranih_korisnika.txt";
$Cert_path="C:\\PKI\\servercert.pem";
$key_path="C:\\PKI\\cert_file.pem";
$FINA_APIS_cert="C:\\PKI\\FINA_APIS.pem";
$cert_password="xxx";
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_SSL_VERIFYPEER => TRUE,
CURLOPT_CAINFO => $FINA_APIS_cert,
CURLOPT_VERBOSE => TRUE,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSLCERTPASSWD => $cert_password ,
CURLOPT_SSLCERT => $Cert_path,
CURLOPT_SSLKEY => $key_path,
CURLOPT_SSLVERSION => 3,
CURLOPT_URL => $OIB_URL
);
curl_setopt_array($handle, $options);
$OIB_File=(string)curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
文件是:
我不知道如何将这些证书和密钥传递给SoapClient以发送测试消息。 我试过这个:
$par_data=array("KorisnickiPretinacPoruka" =>
array("Zaglavlje"=>
array("IdPosiljatelja"=>"000000001","IdPoruke"=>$UUID,"DatumVrijemeSlanja"=>$date_time,"RazinaSigurnosti"=>2),
"Poruka" =>array("PinPrimatelja"=>$OIB,"OznakaDrzave"=>"HR","Predmet"=>$title,"Sadrzaj"=>$rows_lines)));
$par_envelope=array( "GsbEnvelope" =>
array( "MessageHeader" =>
array("SenderId" => "000000001",
"ServiceId" => "000000002",
"MessageId" => $UUID,
"SenderTimeStamp" => $date_time),
"Content" => array("MimeType" =>"application/xml","Data" =>array("encoding"=>"EMBEDDED","any"=>$par_data))));
$client = new BeSimple\SoapClient\SoapClient("GSBService.wsdl", array(
"trace"=>1,
"exceptions"=>1,
"local_cert" =>$key_path,
"passphrase"=>$cert_password,
"connection_timeout" => 30));
print_r( $client->sendMessage($par_envelope));
echo "<p>Request :".htmlspecialchars($client->__getLastRequest()) ."</p>";
echo "<p>Response:".htmlspecialchars($client->__getLastResponse())."</p>";
echo "<p>Debug:".soapDebug($client)."</p>";
结果是:
Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php:146 Stack trace: #0 C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php(203): BeSimple\SoapClient\SoapClient->__doHttpRequest(Object(BeSimple\SoapClient\SoapRequest)) #1 C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php(183): BeSimple\SoapClient\SoapClient->__doRequest2(Object(BeSimple\SoapClient\SoapRequest)) #2 [internal function]: BeSimple\SoapClient\SoapClient->__doRequest('<?xml version="...', 'http://www.apis...', 'http://www.apis...', 1, 0) #3 C:\xampp\htdocs\NIAS\HZZO-OKP-SOAP.php(131): SoapClient->__call('sendMessage', Array) #4 C:\xampp\htdocs\NIAS\HZZO-OKP-SOAP.php(131): BeSimple\SoapClient\SoapClient->sendMessage(Array) #5 {main} thrown in C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php on line 146
答案 0 :(得分:2)
错误是“无法连接到主机”而不是某些证书错误,因此您必须检查是否已连接到服务。
试试这个:
$client = new BeSimple\SoapClient\SoapClient("GSBService.wsdl", array(
"trace"=>1,
"exceptions"=>1,
"local_cert" =>$key_path,
"passphrase"=>$cert_password,
"connection_timeout" => 30));
// set direct location to service
$client->__setLocation(xxx);
print_r( $client->sendMessage($par_envelope));
HTH。