Я пытаюсь использовать 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 может помочь выявить любые пробелы в коде.