2016-04-01 3 views
1

У меня php SoapClient PHP, который я пытаюсь получить. SoapClient аутентифицируется и может захватывать WSDL, без проблем. Затем мне нужно инициировать soapAction, используя WSDL в качестве конечной точки, но заголовки не соответствуют заголовкам запросов на демонстрацию, которые мне необходимы для соответствия.Как использовать заголовок soapAction с PHP SoapClient

В частности, мне не хватает заголовка soapAction, и вместо этого я получаю параметр действия, заданный внутри Content Type. Как мне это изменить?

Заголовки Я хочу быть генерации:

POST /hpq/hpq-service/hpq.wsdl HTTP/1.1 
Accept-Encoding: gzip,deflate 
Content-Type: text/xml;charset=UTF-8 
SOAPAction: "HPQMemberValidationOperation" 
Authorization: Basic bmV0Y2VsbHM6V0Q4c2dLSjg5aEdYenBLYmQ0akhr 
Content-Length: 902 
Host: **** 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 

Заголовки, которые я порождающие:

POST /hpq/hpq-service/hpq.wsdl HTTP/1.1 
Host: *** 
Connection: Keep-Alive 
User-Agent: PHPSoapClient 
Content-Type: application/soap+xml; charset=utf-8; action="HPQMemberValidationOperation" 
Content-Length: 688 
Authorization: Basic bmV0Y2VsbHM6V0Q4c2dLSjg5aEdYenBLYmQ0akhr 

И я называю это действие с помощью следующего кода PHP:

$opts = array(
     'http'=>array(
      'user_agent' => 'PHPSoapClient', 
      'header' => "Authorization: Basic " . base64_encode("$username:$password"), 
     ), 
     'ssl' => array(
      'ciphers'=>'RC4-SHA', 
      'verify_peer'=>false, 
      'verify_peer_name'=>false 
     ), 
    ); 
    ini_set("soap.wsdl_cache_enabled", "0"); 

    $context = stream_context_create($opts); 
    $params = array(
     'stream_context'=>$context, 
     'cache_wsdl' => WSDL_CACHE_NONE, 
     'encoding' => 'UTF-8', 
     'verifypeer' => false, 
     'verifyhost' => false, 
     'soap_version' => SOAP_1_2, 
     'trace' => 1, 
     'exceptions' => 1, 
     'connection_timeout' => 180, 
    ); 
    $client = new SoapClient(WSDL_PATH, $params); 

    $response = $client->__soapCall('HPQMemberValidationOperation', array($payload), array('location'=>WSDL_PATH)); 

ответ

1

я узнал, что именно эта линия:

'soap_version' => SOAP_1_2, 

Я изменил его SOAP_1_1 и теперь генерации SOAPAction, как предполагалось.

Смежные вопросы