如何使用PHP为我的XML内容设置SOAP 标头


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xxxxx="xxxxx" xmlns:tem="http://tempuri.org/">
   <soapenv:Header>
      <Auth>
         <!--Optional:-->
         <xxxxx:id></xxxxx:id>
         <!--Optional:-->
         <xxxxx:Login></xxxxx:Login>
         <!--Optional:-->
         <xxxxx:pass></xxxxx:pass>
      </Auth>
   </soapenv:Header>
   <soapenv:Body>
      <tem:test>
         <!--Optional:-->
         <tem:test>test</tem:test>
      </tem:test>
   </soapenv:Body>
</soapenv:Envelope>

.php

<?php
try {
    $client = new SoapClient(self::$url, array());
    $header = new SoapHeader("xxxxx", "Auth", $header_data, false);
    $client->__setSoapHeaders([$header]); 
    $result = $client->ProcessarIntegracao($header, $test);
}
catch (Exception $e) {
    return 'soap error: ' . $e->getMessage();
}

我尝试了很多方法来发送请求,但它总是返回

找不到肥皂标头

okay I fixed this thaks for your help, here is my code
<?php
error_reporting(-1);
ini_set('error_reporting', E_ALL);
ini_set("soap.wsdl_cache_enabled", "0");
ini_set('display_errors', 1);

class XSoapClient extends SoapClient
{
    public function __doRequest($request, $location, $action, $version, $one_way = null)
    {
        $request = preg_replace('/ns2:xxxxx/','xxxxx',$request, -1);  
        return parent::__doRequest($request, $location, $action, $version, $one_way);
    }
}

//phpinfo();die();
$url = 'xxxxx';
$data = array(
               'test' => 'test'
            );
    $client = new XSoapClient($url, array(
     "trace" => 1,
     "classmap" => array(
          'xxxxx' => 'xxxxx'
     )
    ));
    $ns = "xxxxx";
$auth = "<your header xml><ns2:id>xx</ns2:id><xxx:Login>xxxx</xxx:Login><xxx:pass>xxx</xxx:pass></your header xml>";
$auth_block = new SoapVar( $auth, XSD_ANYXML, NULL, NULL, NULL, NULL );
class ServiceHeader{}
$serviceHeader = new ServiceHeader();
$serviceHeader->id = xxx;
$serviceHeader->Login = "xxxx";
$serviceHeader->pass = "xxxx";
$header = new SoapHeader($ns, "xxxx", $serviceHeader);
//$header = new SoapHeader( $ns, 'Header', $auth_block );
    $client->__setSoapHeaders($header);
try{
    $result =  $client->ProcessarIntegracao($data);
} catch (exception $ex){
echo "<pre>";  
print_r($client);
//echo "</pre>";
print_r($header);
print_r($client->__getLastRequest());
echo "</pre>";
}
<?php
error_reporting(-1);
ini_set('error_reporting', E_ALL);
ini_set("soap.wsdl_cache_enabled", "0");
ini_set('display_errors', 1);
//Generating a header
$client = new soapClient("https://secure.payzen.eu/vads-ws/v5?wsdl", $options = array(
    'trace'      => 1,
    'exceptions' => 0,
    'encoding'   => 'UTF-8',
    'soapaction' => '')
);
//Calculating values transmitted in the header
$ns        = 'http://v5.ws.vads.lyra.com/Header/';
$shopId    = "12345678";
$requestId = gen_uuid();
$timestamp = gmdate("Y-m-dTH:i:sZ");
$mode      = "TEST";
$key       = "123";
$authToken = base64_encode(hash_hmac('sha256', $requestId . $timestamp, $key, true));
//Creating the shopId, requestId, timestamp, mode et authToken headers
$headerShopId    = new SOAPHeader($ns, 'shopId', $shopId);
$headerRequestId = new SOAPHeader($ns, 'requestId', $requestId);
$headerTimestamp = new SOAPHeader($ns, 'timestamp', $timestamp);
$headerMode      = new SOAPHeader($ns, 'mode', $mode);
$headerAuthToken = new SOAPHeader($ns, 'authToken', $authToken);
//Adding headers into the SOAP Header
$headers = array(
    $headerShopId,
    $headerRequestId,
    $headerTimestamp,
    $headerMode,
    $headerAuthToken,
);
$client->__setSoapHeaders($headers);
function gen_uuid()
{
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}

最新更新