Невозможно успешно выполнить вызовы PHP SOAP API (Silverpop) - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь использовать API-интерфейс SOAP с IBM Watson Campaign Automation (Silverpop) - хотя документация очень легкая и я врезаюсь в стену.

Я могу успешно войти в систему с помощью APIизвлеките SessionID и используйте его для создания SOAPHeader, но когда я пытаюсь выполнить последующий вызов после использования этого SOAPHeader, я получаю сообщение об ошибке «Ошибка проверки схемы».Аутентификация пользователя, кажется, работает, но что-то все еще отсутствует.

Это конверт SOAP, который я пытаюсь перевести на PHP.Обратите внимание, что в настоящее время это работает, когда я запускаю через SOAPUI-5.5.0:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sil="SilverpopApi:EngageService.SessionHeader" xmlns:sil1="SilverpopApi:EngageService.MailManagement.UserActions">
   <soapenv:Header>
      <sil:sessionHeader>
         <sil:sessionid>***</sil:sessionid>
      </sil:sessionHeader>
   </soapenv:Header>
   <soapenv:Body>
      <sil1:GetMailingTemplates>
         <sil1:VISIBILITY>1</sil1:VISIBILITY>
      </sil1:GetMailingTemplates>
   </soapenv:Body>
</soapenv:Envelope>

Вот как отформатирован мой PHP-файл:

<?php

      $client = new SoapClient('http://api5.silverpop.com/SoapApi?wsdl', array('trace' => 1, 
             'encoding' => 'utf-8', 
             'content-type' => 'plain/xml'));

    $login = $client->Login(array('USERNAME'=>'***', 
                                  'PASSWORD'=>'***'));    

    $sessionID = $login->SESSIONID;

    echo 'The session ID is: '.$sessionID.'<br><br>';


    $namespace = 'SilverpopApi:EngageService.SessionHeader';
    $header = new SOAPHeader($namespace, 'sessionHeader', $sessionID);        
    $client->__setSoapHeaders($header);

    try {
       $getMailingTemplates = 
       $client->GetMailingTemplates(array('VISIBILITY'=>1));

     }
     catch (SoapFault $exception) {
        echo $exception->getMessage();    
     }
         var_dump($getMailingTemplates);


?>

Это ответ, который я получаютолько с конвертом SOAPUI (не в PHP):

<envelope:Envelope xmlns:envelope="http://schemas.xmlsoap.org/soap/envelope/">
   <envelope:Header/>
   <envelope:Body xmlns="SilverpopApi:EngageService.MailManagement.UserActions">
      <RESULT>
         <SUCCESS>true</SUCCESS>
         <MAILING_TEMPLATE>
            <MAILING_ID>***</MAILING_ID>
            <MAILING_NAME>***</MAILING_NAME>
            <SUBJECT>***</SUBJECT>
            <LAST_MODIFIED>***</LAST_MODIFIED>
            <VISIBILITY>Shared</VISIBILITY>
            <USER_ID>***</USER_ID>
            <FLAGGED_FOR_BACKUP>false</FLAGGED_FOR_BACKUP>
         </MAILING_TEMPLATE>
[... repeated for all templates]

Это ответ, который я получаю при вызове PHP:

"The session ID is: ***

Schema Validation processing failed"

Я знаю, что sessionID из вызова PHPв правильном формате, потому что я могу подключить его к SOAPUI, и он будет работать.Мне кажется, что функция SOAPHeader может что-то упустить, возможно, из-за пространств имен, но любое изменение этих параметров, которые я пробовал, не сработало.Надеемся, что эта проблема не слишком специфична для Silverpop, и кто-то с большим опытом работы с PHP / SOAP может помочь выявить любые пробелы в коде.

...