PHP Soap - 缺少身份验证 header

PHP Soap - Authentication header missing

我一直在为 WMS 使用 API,它已更新为包含身份验证 header。我已获得一些必需的详细信息,但无法成功使用 API。我问过开发人员,但他们无法提供帮助,因为他们不使用 PHP。

在上次更新之前,这行得通:

$wsdl = URL_HERE;
$soapClient = new SoapClient($wsdl);
$params = array('customer' => $get_users_company->custcode_code);
$response = $soapClient->GetProducts($params);

使用身份验证 headers,这就是我目前拥有的导致错误 身份验证 header 缺失

$wsdl = URL_HERE;
$ns = NAMESPACE_HERE;

$soapClient = new SoapClient($wsdl);
$headerbody = array('ID' => 'PROVIDED_ID_HERE', 'KEY' => 'PROVIDED_KEY_HERE');
$headers = new SOAPHeader($ns, 'AuthHeader', $headerbody);
$soapClient->__setSoapHeaders($headers);

$response = $soapClient->__soapCall("GetProducts", array('customer' => $get_users_company->custcode_code));

我不是 100% 确定我这样做是正确的,但是没有最后一行,我没有收到任何错误并且页面加载正常(无结果)。我认为正在发送 header 是否正确?

我听说过老好人,"we can't help because we are XML Gods and your little php is beneath us"...但是您仍然可以通过说他们的 XML 语言从他们那里获得技术支持。把你真实的、原始的 XML 拿出来并用它与他们交流——不要提到 PHP.

Follow the example here and get your request。确保它与您的 API 的文档所要求的相匹配。如果是,请致电您的技术支持并向他们展示您的 XML。如果不是,那么,您知道需要修复什么。

当使用 $soapClient->__soapCall() 时,第二个参数接受一个数组,而你的数据结构也是一个数组,所以你可能应该这样做:

$params = array('customer' => $get_users_company->custcode_code);
$response = $soapClient->__soapCall("GetProducts", array($params));

或者将其保留为:

$response = $soapClient->GetProducts($params);

哪个更好看。