Php 无法使用证书连接BeSimpleSAP客户端
我正试图用我的PHP SOAP客户端发送测试消息。我正在使用BeSimpleSoap库,因为我在使用标准PHP SOAP calss和NuSOAP类时遇到了问题。 我已成功下载了受PKI保护的文件。守则的一部分是:Php 无法使用证书连接BeSimpleSAP客户端,php,soap,ssl,certificate,Php,Soap,Ssl,Certificate,我正试图用我的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
$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);
档案包括:
- soap_cert.pem是CA以pem格式签署的证书
- cert_file.pem是加密的私钥,我的IIS证书采用pem格式
- FINA_api.pem是我与之通信的服务器的证书和CA根自签名证书
$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>";
$par_data=array(“Korisnickipretinacoruka”=>
数组(“Zaglavlje”=>
数组(“IdPosiljatelja”=>“00000000 1”、“IdPoruke”=>$UUID”、“DatumVrijemeSlanja”=>$date\u time”、“RazinaSigurnosti”=>2),
“Poruka”=>数组(“PinPrimatelja”=>$OIB,“OznakaDrzave”=>“HR”,“Predmet”=>$title,“Sadrzaj”=>$rows\u line));
$par_信封=数组(“gsbendevelope”=>
数组(“MessageHeader”=>
数组(“SenderId”=>“00000000 1”,
“ServiceId”=>“00000000 2”,
“MessageId”=>$UUID,
“SenderTimeStamp”=>$date\u time),
“Content”=>array(“MimeType”=>“application/xml”,“Data”=>array(“encoding”=>“EMBEDDED”,“any”=>$paru Data)));
$client=new BeSimple\SoapClient\SoapClient(“GSBService.wsdl”),数组(
“跟踪”=>1,
“例外情况”=>1,
“本地证书”=>$key\u路径,
“密码短语”=>$cert\u密码,
“连接超时”=>30);
打印($client->sendMessage($par_信封));
echo“请求:“.htmlspecialchars($client->\uu getLastRequest())””;
echo“响应:“.htmlspecialchars($client->\uu getLastResponse())””;
echo“调试:”.soapDebug($client)。“”;
结果是:
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
致命错误:未捕获的SoapFault异常:[HTTP]无法连接到C:\xampp\htdocs\NIAS\BeSimpleSoap master\src\BeSimple\SoapClient\SoapClient.php中的主机:146堆栈跟踪:#0 C:\xampp\htdocs\NIAS\BeSimpleSoap master\src\BeSimple\SoapClient\SoapClient.php(203):BeSimple\SoapClient\SoapClient->(BeSimple\SoapClient\SoapRequest))#1c:\xampp\htdocs\NIAS\BeSimpleSoap master\src\BeSimple\SoapClient\SoapClient.php(183):BeSimple\SoapClient\SoapClient->u-doRequest 2(对象(BeSimple\SoapClient\SoapRequest))#2[内部函数]:BeSimple\SoapClient\SoapClient\SoapClient->u-doRequest(错误为“无法连接到主机”并且没有一些证书错误,所以您必须检查您是否连接到服务
试试这个:
$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.端口已被阻止。但我现在收到此错误: