2016-11-30 10 views
2

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

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

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

С заголовками Authentification, это то, что я в настоящее время, которая вызывает заголовок аутентификации ошибка недостающую

$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)); 

I Я не уверен, что я делаю это правильно, но без последней строки я не получаю ошибок, а страница загружается нормально (никаких результатов). Правильно ли я считаю, что отправляются заголовки?

ответ

1

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

Follow the example here and get your request. Убедитесь, что он соответствует тому, что запрашивает документация вашего API. Если это так, обратитесь в службу технической поддержки и покажите им свой XML. Если это не так, вы знаете, что вам нужно исправить.

+0

Спасибо за совет. Я просто отправил им по электронной почте необработанный XML-запрос и ответ. Запрос выглядит так, как это должно быть для меня. Еще раз спасибо: D – Jake

0

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

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

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

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

Что выглядит лучше.