PHP和SOAP问题:格式化请求

时间:2018-09-11 18:09:27

标签: php xml api curl soap

我正在尝试使用输入变量和登录凭证在PHP中创建SOAP信封请求。我对此很陌生,并且挣扎了很多。我正在使用的Web服务将车辆的VIN作为输入,并发回有关该特定车辆的详细信息。输入:1ZVHT88S375260112,作为回报,您将收到有关VIN所属的2007年福特野马的详细信息。

我创建了一个简单的输入栏和表格来输入VIN。这将进入包含PHP Soap Request的页面。我已经省略了登录凭据(用户名和密码/机密),但是根据其他堆栈溢出条目创建了此代码。尽管研究了许多不同的PHP SOAP请求,但仍无法正常工作。任何帮助将不胜感激。下面是我的代码。

PHP

<?php
$client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl');
$account = ['number'=>"12345", 'secret'=>"12345", 'country'=>"US",    'language'=>"en"];
$VIN = "SCFBB03B86GC01407";

$result = $client->describeVehicle([
'accountInfo' => $account,
'vin' => $VIN
]);

?>

1 个答案:

答案 0 :(得分:1)

使用内置的SoapClient类比处理XML和设置cURL请求要容易。

首先从提供的WSDL创建SoapClient对象。

$client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl');

您可以列出所有可用功能。

$functions = $client->__getFunctions();
var_dump($functions);

这将向您显示

array (size=9)
  0 => string 'VersionInfo getVersionInfo(BaseRequest $request)' (length=48)
  1 => string 'ModelYears getModelYears(BaseRequest $request)' (length=46)
  2 => string 'Divisions getDivisions(DivisionsRequest $request)' (length=49)
  3 => string 'Subdivisions getSubdivisions(SubdivisionsRequest $request)' (length=58)
  4 => string 'Models getModels(ModelsRequest $request)' (length=40)
  5 => string 'Styles getStyles(StylesRequest $request)' (length=40)
  6 => string 'VehicleDescription describeVehicle(VehicleDescriptionRequest $request)' (length=70)
  7 => string 'CategoryDefinitions getCategoryDefinitions(BaseRequest $request)' (length=64)
  8 => string 'TechnicalSpecificationDefinitions getTechnicalSpecificationDefinitions(BaseRequest $request)' (length=92)

看起来像您想要的那个叫describeVehicle。您可以将其作为$client对象上的方法来调用。它需要一个VehicleDescriptionRequest对象,但是您应该能够在数组中传递所需的数据。

$account = ['number'=>"", 'secret'=>"", 'country'=>"US", 'language'=>"en", 'behalfOf'=>"?"];

$description = $client->describeVehicle([
  'accountInfo' => $account,
  'vin' => $VIN
]);

就我自己而言,无需帐户即可获得。我假设您的凭据应作为“数字”和“秘密”的值进入请求的“ accountInfo”部分。