Отправка данных на Soap Server с PHP - PullRequest
1 голос
/ 08 сентября 2011

Я не могу передать заголовок в WSDL для учетных данных:

это код:

$soapClient = new SoapClient("https://www.em-sender.com/ws/InwiseWebServices.asmx?WSDL");
$header = array('user'=>'user1','pass'=>'pass1');
$soapClient->__setSoapHeaders(new SoapHeader("https://www.em-sender.com/ws/InwiseWebServices.asmx?WSDL",'SecHeader',$header));
$res = $soapClient->__call("Recipients_checkUnsubscribed", array('email'=> 'test@test.com'));
var_dump($res);

Я получаю следующую ошибку:

Неустранимая ошибка: исключение Uncaught SoapFault: [soap: Client] Пожалуйста предоставить заголовок безопасности в ...

это описание WSDL: https://www.em -sender.com / ws / InwiseWebServices.asmx? Op = Recipients_checkUnsubscribeed

или смотрите здесь:

POST /ws/InwiseWebServices.asmx HTTP/1.1
Host: www.em-sender.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Header>
    <SecHeader xmlns="http://www.inwise.com/schemas">
      <username>string</username>
      <pass>string</pass>
    </SecHeader>
    <AuthIdentifier xmlns="http://www.inwise.com/schemas">
      <identifier>string</identifier>
    </AuthIdentifier>
  </soap12:Header>
  <soap12:Body>
    <Recipients_checkUnsubscribed xmlns="http://www.inwise.com/schemas">
      <email>string</email>
    </Recipients_checkUnsubscribed>
  </soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <Recipients_checkUnsubscribedResponse xmlns="http://www.inwise.com/schemas">
      <Recipients_checkUnsubscribedResult>boolean</Recipients_checkUnsubscribedResult>
    </Recipients_checkUnsubscribedResponse>
  </soap12:Body>
</soap12:Envelope>

Редактировать

Это отправленная строка:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.inwise.com/schemas" xmlns:ns2="https://www.em-sender.com/ws/InwiseWebServices.asmx?WSDL"> 
<SOAP-ENV:Header> 
    <ns2:SecHeader> 
        <item> 
            <key>user</key> 
            <value>user1</value> 
        </item> 
        <item> 
            <key>pass</key> 
            <value>pass1</value> 
        </item> 
    </ns2:SecHeader> 
</SOAP-ENV:Header> 
<SOAP-ENV:Body> 
    <ns1:Recipients_checkUnsubscribed/> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

1 Ответ

2 голосов
/ 08 сентября 2011

Я рассмотрел ваш запрос SOAP, и если вы точно сравните его, вы увидите две проблемы:

  1. Пары ключ / значение не были в порядке (должны быть имя пользователя и пароль)
  2. Неверное пространство имен мыльного заголовка.

Если я попробую следующее, то получу сообщение об ошибке, сообщающее, что мои учетные данные недействительны, что имеет смысл, потому что я просто что-то заполнил. Я больше не получу ошибку заголовка безопасности.

$soapClient = new SoapClient("https://www.em-sender.com/ws/InwiseWebServices.asmx?WSDL", array('trace' => true));
$header = new SoapVar(array('username' => 'user', 'pass' => 'password'), SOAP_ENC_OBJECT);
$soapClient->__setSoapHeaders(new SoapHeader("http://www.inwise.com/schemas",'SecHeader',$header));

try {
    $res = $soapClient->Recipients_checkUnsubscribed('test@test.com');
    var_dump($res);
} catch(SoapFault $fault) {
    var_dump($soapClient->__getLastRequest());
    var_dump($fault->getMessage());
}
...