У меня 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));