Я использую 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%, что делаю это правильно, но без последней строки я не получаю ошибок и страница загружается нормально (без результатов). Правильно ли я считаю, что заголовки отправляются?
Я слышал старое доброе, «мы не можем помочь, потому что мы боги XML, а ваш маленький php под нами» … но вы все равно можете получить техническую поддержку от них, говоря на их языке XML. Извлеките свой настоящий, необработанный XML и общайтесь с ним, используя это — не упоминайте PHP.
Следуйте примеру здесь и получите ваш запрос. Убедитесь, что он соответствует тому, что запрашивает документация вашего API. Если это так, позвоните в службу технической поддержки и покажите им свой XML. Если это не так, то вы знаете, что вам нужно исправить.
Когда используешь $soapClient->__soapCall()
второй параметр принимает массив, и ваша структура данных также является массивом, поэтому вам, возможно, следует сделать следующее:
$params = array('customer' => $get_users_company->custcode_code);
$response = $soapClient->__soapCall("GetProducts", array($params));
Или просто оставьте это как:
$response = $soapClient->GetProducts($params);
Который выглядит лучше.