如何将凭证传递给PHP SOAP Request

时间:2019-08-13 13:29:29

标签: php soap authorization

我需要根据此规范创建一个PHP SOAP客户端:

https://exdev.server.propctrl.com/v5.4/Basic/AgencyIntegration.svc?wsdl

我能够创建我的soap客户端,当我尝试调用一个函数时,它返回说访问被拒绝:

  

消息:访问被拒绝。

根据文档,没有我首先需要调用的验证/身份验证方法,但是看来我必须使用一种称为凭据的类型。

  

struct Credentials {字符串密码;字符串用户名; }

然后我尝试创建一个凭据对象:

class Credentials {
  public function __construct($username, $password) 
  {
      $this->username = $username;
      $this->password = $password;
  }
}

并为其分配新值并在我的SoapHeaders中使用它:

$credentials = new Credentials($username, $password);
$header = new SoapHeader('http://localhost','Credentials',$credentials,false);
$client->__setSoapHeaders($header);

当我使用一个函数时,我仍然遇到相同的错误:

echo "<pre>";
try {
$response = $client->__soapCall("EchoAuthenticated", array("EchoAuthenticated" => "asdfasdf"));
var_dump($response);
}
//catch exception
catch(Exception $e) {
  echo 'Message: ' .$e->getMessage();
}
  

消息:访问被拒绝。

我想我的问题是我不知道在哪里/如何通过凭据传递API来授权我的请求。

有什么想法/建议吗?

update1:​​

enter image description here

1 个答案:

答案 0 :(得分:0)

应该在一些文档中说明身份验证方法,例如,有使用HTTP标头进行身份验证的Soap服务,例如

            $soapClient->setHttpHeaders([
                'clientId' => $username,
                'clientSecret' => $password
            ]); 

但是请考虑键(在我的示例中为clientId和clientSecret)取决于服务实现。 您有服务文件吗?