概述:
代码是关于使用SOAP和Curl调用escreen Web服务,需要客户端身份验证。目前我没有得到任何结果只有HTTP 403和500错误。 该调用要求客户端验证证书在callng站点上。
CODE:
$content = "<TicketRequest>
<Version>1.0</Version>
<Mode>Test</Mode>
<CommitAction></CommitAction>
<PartnerInfo>
<UserName>xxxxxxxxxx</UserName>
<Password>xxxxxxxxxxx</Password>
</ PartnerInfo>
<RequestorOrderID></RequestorOrderID>
<CustomerIdentification>
<IPAddress></IPAddress>
<ClientAccount>xxxxxxxxxx</ClientAccount>
<ClientSubAccount>xxxxxxxxxx</ClientSubAccount>
<InternalAccount></InternalAccount>
<ElectronicClientID></ElectronicClientID>
</CustomerIdentification>
<TicketAction>
<Type></Type>
<Params>
<Param>
<ID>4646</ID>
<Value></Value>
</Param>
</Params>
</TicketAction>
</TicketRequest>";
$wsdl = "https://services.escreen.com/SingleSignOnStage/SingleSignOn.asmx";
$headers = array( "Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
// "SOAPAction: \"\"",
"Content-length: ".strlen($content),
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $wsdl);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
//curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('SOAPAction: ""'));
curl_setopt($ch, CURLOPT_CAPATH, '/home/pps/');
curl_setopt($ch, CURLOPT_CAINFO, '/home/pps/authority.pem');
curl_setopt($ch, CURLOPT_SSLCERT, 'PROTPLUSSOL_SSO.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'xxxxxxxxxxxx');
$output = curl_exec($ch);
// Check if any error occured
if(curl_errno($ch))
{
echo 'Error no : '.curl_errno($ch).' Curl error: ' . curl_error($ch);
}
print_r($output);
问题:
我需要调用RequestTicket方法并将XML字符串传递给它。 我不知道怎么做(传递方法名称来调用)。
对于客户端身份验证,他们为我们提供了三个证书,一个根证书,一个中间证书 cert和客户端身份验证证书PROTPLUSSOL_SSOpem(它是.pfx文件)。由于我们在linux上,我们将它们转换为pem。在curl调用中,我找不到如何包含根证书和中间证书的方法,所以我通过创建一个新的pem文件并复制中间证书并将它们作为根证书并将其命名为authority.pem来组合它们。 我不确定它是否有效,并希望你的意见。
对于当前代码我得到错误 错误号:77卷曲错误:错误设置证书验证位置:CAfile:/home/pps/authority.pem CApath:/ home / pps /
如果我禁用了curl错误消息,我将收到页面标题为403的空白页面 - 禁止使用。访问被拒绝。
如果我注释掉CURLOPT_CAPATH和CURLOPT_CAINFO行,则会显示http 500错误页面,并将消息作为内容,并在顶部显示以下内容。
HTTP / 1.1 500内部服务器错误。缓存控制:私有内容类型:text / html服务器:Microsoft-IIS / 7.5 X-AspNet-版本:1.1.4322 X-Powered-By:ASP.NET日期:星期四,2010年9月2日14:46:38 GMT内容长度:1208
如果我按上述方式注释掉了CURLOPT_SSLCERT和CURLOPT_SSLCERTPASSWD,则会将消息作为内容提供403错误。
所以我会请求你帮我解决当前代码的错误。
谢谢。
答案 0 :(得分:0)