在PHP中与没有WSDL的soap API交互

在PHP中与没有WSDL的soap API交互,php,xml,api,soap,Php,Xml,Api,Soap,最近访问了一个用于酒店管理服务的soap API。他们提供的文档显示了请求的基本示例: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <Auth xmlns="http://xxxx/xxxxAPI"> <FromSystemId ID="1">Company

最近访问了一个用于酒店管理服务的soap API。他们提供的文档显示了请求的基本示例:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">    
<soapenv:Header>       
  <Auth xmlns="http://xxxx/xxxxAPI">          
  <FromSystemId ID="1">CompanyName</FromSystemId>          
    <UserName>username</UserName>          
    <Password>password</Password>       
  </Auth>    
</soapenv:Header>    
<soapenv:Body>       
  <GetRegions Timestamp="2016-04-11" Version="1.0" Lang="en" 
     xmlns="http://xxxx/xxxxAPI">
  <Country Code="GB" />  
  </GetRegions>    
</soapenv:Body> 
</soapenv:Envelope>
我这样做对吗?我现在无法测试它,因为我还没有收到我的身份验证,但我想现在就开始


任何帮助都会很好。

这里是一个小例子

$opts = array(
    'location' => 'http://xxxx/xxxxAPI',
    'uri' => 'urn:http://test-uri/'
);

$client = new SOAPClient(null, $opts);

$headerData = array(
    'FromSystemId' => 'CompanyName',
    'UserName' => 'username',
    'Password' => 'password',
);

// Create Soap Header.
$header = new SOAPHeader('http://xxxx/xxxxAPI', 'Auth', $headerData);

// Set the Headers of Soap Client.
$client->__setSoapHeaders($header);


$result = $client->__soapCall('getRegions', array('GB'));

// $return = $client->__soapCall('getRegions', array(new SoapParam(new SoapVar('GB', XSD_STRING), 'countryCode')));

var_dump($result);
他们也没有提供WSDL,这有关系吗

为了能够添加头属性,必须在WSDL中提到它们。如果它们不存在于WSDL中,它们将不会显示为属性,而是
元素

Tipp:如果您知道请求必须是怎样的,并且没有WSDL,那么请尝试手动生成HTTP头和XML体,并使用CURL或Guzzle执行请求

狂饮的例子:

$soapContent = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">    
<soapenv:Header>       
  <Auth xmlns="http://xxxx/xxxxAPI">          
  <FromSystemId ID="1">CompanyName</FromSystemId>          
    <UserName>username</UserName>          
    <Password>password</Password>       
  </Auth>    
</soapenv:Header>    
<soapenv:Body>       
  <GetRegions Timestamp="2016-04-11" Version="1.0" Lang="en" 
     xmlns="http://xxxx/xxxxAPI">
  <Country Code="GB" />  
  </GetRegions>    
</soapenv:Body> 
</soapenv:Envelope>';

$client = new GuzzleHttp\Client([
    'headers' => [ 'SOAPAction' => '"urn:http://xxxx/xxxxAPI/#getRegions"' ]
]);

$response = $client->post('http://xxxx/xxxxAPI',
    ['body' => $soapContent]
);

echo $response;
$soapContent='1!'
公司名称
用户名
密码
';
$client=new GuzzleHttp\client([
'headers'=>['SOAPAction'=>'“urn:http://xxxx/xxxxAPI/#getRegions"' ]
]);
$response=$client->post('http://xxxx/xxxxAPI',
['body'=>$soapContent]
);
回音$应答;

查看php SOAP扩展:非常感谢您给出了一个很好的答案。
$soapContent = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">    
<soapenv:Header>       
  <Auth xmlns="http://xxxx/xxxxAPI">          
  <FromSystemId ID="1">CompanyName</FromSystemId>          
    <UserName>username</UserName>          
    <Password>password</Password>       
  </Auth>    
</soapenv:Header>    
<soapenv:Body>       
  <GetRegions Timestamp="2016-04-11" Version="1.0" Lang="en" 
     xmlns="http://xxxx/xxxxAPI">
  <Country Code="GB" />  
  </GetRegions>    
</soapenv:Body> 
</soapenv:Envelope>';

$client = new GuzzleHttp\Client([
    'headers' => [ 'SOAPAction' => '"urn:http://xxxx/xxxxAPI/#getRegions"' ]
]);

$response = $client->post('http://xxxx/xxxxAPI',
    ['body' => $soapContent]
);

echo $response;