Laravel,soap API 需要登录
Laravel, soap API required login
我在使用 SOAP API 时遇到了一点问题,我需要使用它。它需要授权,所以我使用以下登录。
基本上,我需要使用以下登录,我没有得到“需要登录”,这很好。
$client = new \SoapClient('localwsdlfile.wsdl', array(
'local_cert' => 'localcert.pem',
'passphrase' => 'passphrase',
'location' => 'https://wsmurl/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/'
如果不这样做,我会收到此登录错误。我尝试使用的服务器有一个缓存,因此我不再需要在接下来的 10 分钟内发送此登录信息以供将来的操作使用。
所以,现在,我已经登录了,我可以成功地进行以下操作。
$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/'
未注释,我会收到有关未发送有效 WSDL 的错误消息。
总而言之:-
我正在 Laravel 中使用此肥皂 API,根据上述代码使用 PHP 的 SoapClinet。
我的理解是,我尝试使用的 soap 服务需要先登录。
经过大量测试后,我通过在对 SoapClient.
的调用中包含如上所示的 'location' => 'https://wsmurl/login/'
行,设法达到了没有错误的地步。
这似乎是我第一次调用此 soap 服务时需要的,我想它正在让我登录。如果我不包括它,我会收到错误消息
"SoapFault
需要登录
所以,如果我包含行 'location' => 'https://wsmurl/login/'
,它似乎让我登录,但我现在收到错误
“肥皂故障
看起来我们没有 XML 文件
如果我保留这条线,我会继续收到这个错误
“肥皂故障
看起来我们没有 XML 文件
删除该行然后给我预期的 SOAP 响应,一切正常。
我尝试使用 try{} ... catch{} 寻找 exceptions/errors 等来捕捉错误,但它没有捕捉到“需要登录”或“看起来我们没有 XML 文档" 作为故障。
所以,我想,是否有更好的方法来检测这种情况,以便我可以在没有线路的情况下发送或不发送,或者是否有更好的方法来登录服务(注意,它只使用证书和密码).
在此先感谢,我希望上面的小重写能让它更清楚。
因为登录的位置和localwsdlfile.wsdl不一样,一通电话就搞不定了。所以我们创建了一个使用 curl 登录的函数,如果登录成功,它将继续到 soap 客户端。在此感谢自由职业者 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'))
));
我在使用 SOAP API 时遇到了一点问题,我需要使用它。它需要授权,所以我使用以下登录。
基本上,我需要使用以下登录,我没有得到“需要登录”,这很好。
$client = new \SoapClient('localwsdlfile.wsdl', array(
'local_cert' => 'localcert.pem',
'passphrase' => 'passphrase',
'location' => 'https://wsmurl/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/'
如果不这样做,我会收到此登录错误。我尝试使用的服务器有一个缓存,因此我不再需要在接下来的 10 分钟内发送此登录信息以供将来的操作使用。
所以,现在,我已经登录了,我可以成功地进行以下操作。
$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/'
未注释,我会收到有关未发送有效 WSDL 的错误消息。
总而言之:- 我正在 Laravel 中使用此肥皂 API,根据上述代码使用 PHP 的 SoapClinet。
我的理解是,我尝试使用的 soap 服务需要先登录。 经过大量测试后,我通过在对 SoapClient.
的调用中包含如上所示的'location' => 'https://wsmurl/login/'
行,设法达到了没有错误的地步。
这似乎是我第一次调用此 soap 服务时需要的,我想它正在让我登录。如果我不包括它,我会收到错误消息
"SoapFault 需要登录
所以,如果我包含行 'location' => 'https://wsmurl/login/'
,它似乎让我登录,但我现在收到错误
“肥皂故障
看起来我们没有 XML 文件
如果我保留这条线,我会继续收到这个错误 “肥皂故障 看起来我们没有 XML 文件
删除该行然后给我预期的 SOAP 响应,一切正常。
我尝试使用 try{} ... catch{} 寻找 exceptions/errors 等来捕捉错误,但它没有捕捉到“需要登录”或“看起来我们没有 XML 文档" 作为故障。
所以,我想,是否有更好的方法来检测这种情况,以便我可以在没有线路的情况下发送或不发送,或者是否有更好的方法来登录服务(注意,它只使用证书和密码).
在此先感谢,我希望上面的小重写能让它更清楚。
因为登录的位置和localwsdlfile.wsdl不一样,一通电话就搞不定了。所以我们创建了一个使用 curl 登录的函数,如果登录成功,它将继续到 soap 客户端。在此感谢自由职业者 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'))
));