使用 2 路 SSL 连接到 SOAP 服务
Connecting to a SOAP service with 2 way SSL
基本上,我正在尝试使用 2 种 SSL(HTTP 客户端证书身份验证)连接到 SOAP 服务。
我在 Laravel 内为此使用 PHP SoapClient。
这就是我所拥有的,它允许我连接并 returns 预期的响应。所以方法基本上是正确的,证书也很好等等。只是我遇到了问题,我猜是 2 路 SSL 部分。
$client = new \SoapClient('localwsdlfile.wsdl', array(
'local_cert' => 'localcert.pem',
'passphrase' => 'passphrase',
// 'location' => 'https://wsmurl/login/' // Uncomment to login
));
$response = $client->Get(array(
"AccessKey" => "accesskey",
"ProductID" => "SOMEPRODUCT",
"Scope" => "SOMESCOPE",
"Parameters" => array('Param' => array('_' => 'DATATOLOOKUP', 'id'=>'MOREDATATOLOOKUP'))
));
print_r($response);
唯一的问题是(显然是因为我做错了什么),我是否需要在第一次尝试连接时添加行 'location' => 'https://wsmurl/login/'
,否则我会收到错误消息“需要 SoapFault 登录”
然后我删除行 'location' => 'https://wsmurl/login/'
,否则,我会收到错误消息“SoapFault 看起来我们没有 XML 文档”。
服务提供商有 600 秒的超时时间,我不必在长达 600 秒的时间内再次“登录”。
删除此行 'location' => 'https://wsmurl/login/'
后,它将按预期工作。显然,我不能手动添加和删除这一行,我想我没有做对。
有人可以告诉我更好的方法吗?
谢谢,
因为登录的位置和localwsdlfile.wsdl不一样,一通电话就搞不定了。所以我们创建了一个使用 curl 登录的函数,如果登录成功,它将继续到 soapclient。在此感谢自由职业者 Brian 的帮助。
$client = new SoapClient('wsdl/VocusSchemas/localwsdlfile.wsdl', array(
'trace' => 1,
'exception' => true
));
try {
$response = $client->Get(array(
// "AccessKey" => "MADAITABNSAATOT1",
"AccessKey" => "accesskey",
"ProductID" => "SOMEPRODUCT",
"Scope" => "SOMESCOPE",
"Parameters" => array('Param' => array('_' => 'DATATOLOOKUP', 'id' => 'MOREDATATOLOOKUP'))
));
基本上,我正在尝试使用 2 种 SSL(HTTP 客户端证书身份验证)连接到 SOAP 服务。
我在 Laravel 内为此使用 PHP SoapClient。
这就是我所拥有的,它允许我连接并 returns 预期的响应。所以方法基本上是正确的,证书也很好等等。只是我遇到了问题,我猜是 2 路 SSL 部分。
$client = new \SoapClient('localwsdlfile.wsdl', array(
'local_cert' => 'localcert.pem',
'passphrase' => 'passphrase',
// 'location' => 'https://wsmurl/login/' // Uncomment to login
));
$response = $client->Get(array(
"AccessKey" => "accesskey",
"ProductID" => "SOMEPRODUCT",
"Scope" => "SOMESCOPE",
"Parameters" => array('Param' => array('_' => 'DATATOLOOKUP', 'id'=>'MOREDATATOLOOKUP'))
));
print_r($response);
唯一的问题是(显然是因为我做错了什么),我是否需要在第一次尝试连接时添加行 'location' => 'https://wsmurl/login/'
,否则我会收到错误消息“需要 SoapFault 登录”
然后我删除行 'location' => 'https://wsmurl/login/'
,否则,我会收到错误消息“SoapFault 看起来我们没有 XML 文档”。
服务提供商有 600 秒的超时时间,我不必在长达 600 秒的时间内再次“登录”。
删除此行 'location' => 'https://wsmurl/login/'
后,它将按预期工作。显然,我不能手动添加和删除这一行,我想我没有做对。
有人可以告诉我更好的方法吗?
谢谢,
因为登录的位置和localwsdlfile.wsdl不一样,一通电话就搞不定了。所以我们创建了一个使用 curl 登录的函数,如果登录成功,它将继续到 soapclient。在此感谢自由职业者 Brian 的帮助。
$client = new SoapClient('wsdl/VocusSchemas/localwsdlfile.wsdl', array(
'trace' => 1,
'exception' => true
));
try {
$response = $client->Get(array(
// "AccessKey" => "MADAITABNSAATOT1",
"AccessKey" => "accesskey",
"ProductID" => "SOMEPRODUCT",
"Scope" => "SOMESCOPE",
"Parameters" => array('Param' => array('_' => 'DATATOLOOKUP', 'id' => 'MOREDATATOLOOKUP'))
));