PHP Soap — отсутствует заголовок аутентификации

Я использую API для WMS, который обновлен и теперь включает заголовки аутентификации. Мне предоставили некоторые необходимые детали, но я не смог успешно использовать API. Я спросил разработчиков, но они не могут помочь, поскольку они не используют PHP.

До последнего обновления это будет работать:

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

С заголовками аутентификации, это то, что у меня сейчас есть, что вызывает ошибку Отсутствует заголовок аутентификации

$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%, что делаю это правильно, но без последней строки я не получаю ошибок и страница загружается нормально (без результатов). Правильно ли я считаю, что заголовки отправляются?

2

Решение

Я слышал старое доброе, «мы не можем помочь, потому что мы боги XML, а ваш маленький php под нами» … но вы все равно можете получить техническую поддержку от них, говоря на их языке XML. Извлеките свой настоящий, необработанный XML и общайтесь с ним, используя это — не упоминайте PHP.

Следуйте примеру здесь и получите ваш запрос. Убедитесь, что он соответствует тому, что запрашивает документация вашего API. Если это так, позвоните в службу технической поддержки и покажите им свой XML. Если это не так, то вы знаете, что вам нужно исправить.

1

Другие решения

Когда используешь $soapClient->__soapCall() второй параметр принимает массив, и ваша структура данных также является массивом, поэтому вам, возможно, следует сделать следующее:

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

Или просто оставьте это как:

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

Который выглядит лучше.

0

По вопросам рекламы [email protected]