В моем wsdl-файле у меня есть блок аутентификации пользователя:
<!-- User authentication --> <element name="UserAuthentication"> <complexType> <sequence> <element name="iId" type="xsd:int" /> <element name="sPassword" type="xsd:string" /> <element name="sType" type="api:UserType" /> </sequence> </complexType> </element>
Я пытаюсь создать экземпляр SOAP-вызова, например:
$client = new SoapClient("http://api.example.com/v2/example?wsdl", array( 'iId' => 123456, 'sPassword' => 'fhfhfhfhfhfhfh46464dtdts64iyiyi', 'sType' => 'ghfh57477gghdkskdk68585jghhddhdghds'));
с реальными значениями. Сценарий сообщает:
SoapFault exception: [ns1:Client.AUTH_1] Authentication Failed in
Что мне не хватает?
Вы передаете свои данные запроса внутри параметров SoapClient
а не как параметры для вызова мыла.
Код должен выглядеть так (предполагая, что вызов мыла – это Authenticate
):
$client = new SoapClient("http://api.example.com/v2/example?wsdl"); $response = $client->Authenticate(Array( 'iId' => 123456, 'sPassword' => 'fhfhfhfhfhfhfh46464dtdts64iyiyi', 'sType' => 'ghfh57477gghdkskdk68585jghhddhdghds')); ));
И, в любом случае, вы должны использовать try..catch
чтобы исключить try..catch
из-за вашего кода.
try { // code here } catch(Exception $e) { // error handling goes here die("Error: ". $e->getMessage()."\n"); }
Без полной спецификации WSDL трудно сказать, в чем проблема. Но я предполагаю, что вы смотрите на спецификации. неправильно. Вероятно, это те заголовки, которые нужно отправить, а не фактические методы, которые нужно вызвать.
Поэтому попробуйте что-то вроде этого:
// SOAP client options $options = array( 'soap_version' => SOAP_1_2, 'trace' => true, ); // initialise the SOAP client $apiURL = 'http://api.example.com/v2/example?wsdl'; $namespace = 'http://api.example.com/v2/example?wsdl'; $client = new SoapClient($apiURL, $options); // the SOAP headers $headers = array(); $ua = array( 'iId' => 123456, 'sPassword' => 'fhfhfhfhfhfhfh46464dtdts64iyiyi', 'sType' => 'ghfh57477gghdkskdk68585jghhddhdghds', ); $headers[] = new SoapHeader($namespace, 'UserAuthentication', $ua); // we could add multiple headers if needed $client->__setSoapHeaders($headers); // call the API function $response = $client->__soapCall("whateverYourTryingToCall", null);