【发布时间】:2017-01-12 10:21:50
【问题描述】:
我想通过soup客户端发送这样的xml:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:hot="http://TekTravel/HotelBookingApi">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<hot:Credentials UserName="test" Password="test@123"/>
<wsa:Action>http://test/HotelBookingApi/CountryListRequest</wsa:Action>
<wsa:To>http://api.test.in/HotelAPI_V7/HotelService.svc</wsa:To>
</soap:Header>
<soap:Body>
<hot:CountryListRequest/>
</soap:Body>
</soap:Envelope>
但它会像这样发送 xml:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://TekTravel/HotelBookingApi">
<env:Header>
<ns1:Credentials UserName="test" Password="test@123"/>
<ns1:Action>http://test/HotelBookingApi/HotelSearch</ns1:Action>
<ns1:To>http://api.test.in/HotelAPI_V7/HotelService.svc</ns1:To>
</env:Header>
<env:Body>
<ns1:CountryListRequest/>
</env:Body>
</env:Envelope>
api 需要与第一个完全相同的 xml。我使用 Laravel 5.2,这是我的代码:
<?php
namespace App\Model\Hotel;
use Illuminate\Database\Eloquent\Model;
use SoapClient;
use SoapHeader;
use SoapVar;
class HotelTBO extends Model
{
//Credentials
var $Credentials = ['UserName' => 'test', 'Password' => 'test@123'];
//WSDL
var $wsdl = 'http://api.tbotechnology.in/HotelAPI_V7/HotelService.svc?wsdl';
//Actions
var $ActionHotelSearch = "http://TekTravel/HotelBookingApi/HotelSearch";
//NS
var $NS = "http://TekTravel/HotelBookingApi";
//TO
var $ToHotelSearch = "http://api.tbotechnology.in/HotelAPI_V7/HotelService.svc";
public function testSearch()
{
$client = new SoapClient(public_path('\assets\file\TBO.wsdl'), array('soap_version' => SOAP_1_2, 'trace' => 1, "exceptions" => 0));
$HeaderVar = new SoapVar($this->HeaderXML, XSD_ANYXML, null, null, null);
$Headers[] = new SoapHeader($this->NS, "Credentials", $this->Credentials,false);
$Headers[] = new SoapHeader($this->NS, "Action", $this->ActionHotelSearch);
$Headers[] = new SoapHeader($this->NS, "To", $this->ToHotelSearch);
$client->__setSoapHeaders($Headers);
$result = $client->__soapCall('CountryList', []);
}
有一个名为https://github.com/BeSimple/BeSimpleSoap 的包,但没有任何相关文档。 非常感谢您的帮助
【问题讨论】:
-
您是否尝试过手动构建 XML 字符串并用您的变量替换字符串中的凭据?我有同样的问题,在我最终构建 XML 字符串并使用 CURL 发布之前,我尝试了一堆处理 WSDL 服务的包。
-
是的,我现在就是这样做的
-
如果 XML 不完全相同,会报错吗?命名空间前缀本质上只是变量,所以无论使用什么它都应该起作用。
-
是的 api 不匹配错误
标签: php xml soap laravel-5 soap-client