我正在尝试使用freightquote.com的API。为此,我使用了一个扩展SOAP的类,您可以在这里看到<--向作者致敬。我用来打电话的代码可以在下面找到
$this->load->library('QuoteService');
try
{
$client = new QuoteService();
$user = new UserCredential();
$user->Name = 'example@example.com';
$user->Password = 'password';
$add = new PostalAddress();
$add->AddressName = 'home';
$add->City = 'Fond du Lac';
$add->PostalCode = '54922';
$add->StateCode = 'WI';
$add->StreetAddress = 'W4709 Main St.';
$add->CountryCode = 'US';
$loc = new Location();
$loc->HasLoadingDock = 1;
$loc2->LocationType = LocationTypeList::Origin;
$loc->HasDeliveryAppointment = 1;
$loc->LocationAddress = $add;
$add2 = new PostalAddress();
$add2->AddressName = 'dropoff';
$add2->City = 'Oshkosh';
$add2->PostalCode = '54901';
$add2->StateCode = 'WI';
$add2->StreetAddress = '424 Washington Ave.';
$add2->CountryCode = 'US';
$loc2 = new Location();
$loc2->LocationType = LocationTypeList::Destination;
$loc2->HasDeliveryAppointment = 1;
$loc2->LocationAddress = $add2;
// comment
$prod = new Product();
$prod->IsHazardousMaterial = 0;
$prod->Length = 50;
$prod->Width = 50;
$prod->Height = 50;
$prod->PieceCount = 10;
$prod->ProductDescription = "Stones";
$prod->PackageType = 'unknown';
$ship = new Shipment();
$ship->PickupDate = '2010-09-13T00:00:00';
$ship->ShipmentLocations = array($add,$add2);
$ship->IsBlind = 0;
$ship->ShipmentProducts = array($prod);
$quote_request = new QuoteRequest();
$quote_request->QuoteType = QuoteTypeList::B2B;
$quote_request->ServiceType = ServiceTypeList::Truckload;
$quote_request->QuoteShipment = $ship;
$quote_request->CustomerId = 0;
$request = new GetRatingEngineQuote();
$request->request = $quote_request;
$request->user = $user;
$response = $client->GetRatingEngineQuote($request);
当我尝试运行此代码时,我得到以下错误
Soap错误System.Web.Services.Protocols.SoapException:服务器无法读取请求。>--->System.InvalidOperationException:XML文档(2458)中存在错误。--->>System.FormatException:字符串"不是有效的布尔值。位于>Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read15_Shipment(Bool>ean isNullable,布尔检查类型)>Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read42_GetRatingEngi>neQuote()位于>Microsoft.Xml.Sserialization.GneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSeria>lizationReader读取器)位于System.Xml.Serilization.XmlSerializer.DeserializeSystem.Web.Services.Protocols.SoapServerProtocol.ReadParameters()--->处的System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader>XmlReader,String-encodingStyle,XmlDeserializationEvents事件)>System.Web.Services.Protocols.SoapServerProtocols.ReadParameters(),位于>System.Web.Services.Trotocols.WebServiceHandler.CoreProcessRequest()
我很难弄清楚这个错误是意味着它缺少了一个必需的参数,还是只是接收到了错误的数据类型。我们将非常感谢您对故障排除方法、错误的确切含义,甚至解决方案的任何帮助。
你能更改吗
$response = $client->GetRatingEngineQuote($request);
至
try {
$response = $client->GetRatingEngineQuote($request);
} catch ('Exception $e) {
var_dump($client->__getLastRequest());
}
并且提供输出或者转到第二行到字符458并进行检查。
方法$client->__getLastRequest()要求使用trace=>true选项创建客户端。