使用 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'))
    ));