【问题标题】:PHP and SOAP Trouble: Formatting A RequestPHP 和 SOAP 问题:格式化请求
【发布时间】:2018-09-11 18:09:26
【问题描述】:

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

我创建了一个简单的输入栏和表单来输入 VIN。这会输入一个带有 PHP Soap 请求的页面。我省略了我的登录凭据(用户名和密码/密码),但根据其他 Stack Overflow 条目创建了此代码。尽管研究了许多不同的 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
]);

?>

【问题讨论】:

  • PHP + SOAP 总是一种痛苦的体验。不是您正在寻找的答案,但我真的建议使用库(可能是 nusoap)或 PHP SoapClient 类而不是使用 CURL。

标签: php xml api curl soap


【解决方案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
]);

这是我自己没有帐户的情况下所能获得的。我假设您的凭据应该作为“数字”和“秘密”的值进入请求的“帐户信息”部分。

【讨论】:

  • 不客气。如果您详细说明“不成功”,我可能会提供更多帮助。当我运行该代码时,我收到了带有“无法验证帐户”消息的肥皂错误。你能描述一下你得到了什么结果吗?
  • 成功了!我只是一个简单的格式错误。非常感谢!
  • @Don'tPanic 我收到“无法验证帐户”。我正在使用节点肥皂(npmjs.com/package/soap)。我想使用描述车辆。你能帮忙看看可能的原因吗??
猜你喜欢
  • 2014-05-11
  • 2017-05-16
  • 2015-11-15
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多