Итак, я работаю над интеграцией проверки адресов Fedex на сайт, над которым я работаю. Веб-службы Fedex основаны на SOAP, поэтому мы находимся в волшебной стране WSDL. Я еще не владею веб-сервисами, так что несите меня.
Можно использовать службу проверки адресов только на уровне производства; У меня есть мои учетные данные для производства и URL-адрес производства в разделе портов моего WSDL.
При тестировании интеграции службы я получаю это провокационное сообщение:
Код ошибки: VersionMismatch String: неправильная версия
Поддержка Fedex пока кажется неспособной ответить на этот вопрос, поэтому я собираюсь спросить его здесь: почему я получаю эту ошибку? Правильно ли я подозреваю, что, возможно, версия SOAP на нашем сервере устарела, и если да, то есть ли какое-нибудь обходное решение, которое кто-то знает для этого?
Общей причиной этой ошибки является неправильное пространство имен, используемое для конверта. См. http://www.w3.org/TR/soap12-part1/#faultcodes и http://www.w3.org/TR/soap12-part1/#vmfault
Существует несколько версий WSDL и SOAP, а PHP, похоже, имеет проблемы с WSDL 2.0 .
Проверьте заголовок WSDL-файла, чтобы проверить, что хочет FedEx (они могут предоставить несколько веб-сервисов для разных версий) и проверить с помощью сниффера, что ваш скрипт действительно отправляет.
Эта ошибка означает, что вы не получаете конверт SOAP, который действителен и распознается клиентской библиотекой. Другими словами, XML, возвращаемый сервером, который обычно выглядит следующим образом:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> ... </soapenv:Body> </soapenv:Envelope>
… выглядит как-то еще.
Среди других причин это может произойти, если сервер плохо вредит и отправляет страницу с произвольной ошибкой, или если конечный URL-адрес вовсе не является SOAP-сервером.