【问题标题】:PHP SOAP Request not rightPHP SOAP 请求不正确
【发布时间】:2012-05-05 01:00:13
【问题描述】:

我尝试构建以下 SOAP 请求:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CheckSomething xmlns="http://service.mydomain.com/">
      <User>
        <username>user123</username>
        <password>geheim</password>
      </User>
      <ItemXY>something</ItemXY>
    </CheckSomething>
  </soap:Body>
</soap:Envelope>

这是我的 PHP 代码

$soapClient = new SoapClient("http://service.mydomain.com/Services.asmx?wsdl",array( "trace" => 1 ));
$Param = array (
  'username' => "user123",
  'password' => "geheim"
);
$info = $soapClient->__call("CheckSomething", array("User" => $Param,"ItemXY" => "something"));
echo "Request :\n".htmlspecialchars($soapClient->__getLastRequest()) ."\n";

结果是:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://service.mydomain.com/">
<SOAP-ENV:Body>
<ns1:CheckSomething/>
<param1>something</param1>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

这是此服务的 wsdl 部分:

<s:element name="CheckSomething">
  <s:complexType>
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="User" type="tns:Validation"/>
      <s:element minOccurs="0" maxOccurs="1" name="ItemXY" type="s:string"/>
    </s:sequence>
  </s:complexType>
</s:element>

谁能帮我形成正确的 SOAP 请求?

如何删除结果标签中的ns1 并给出正确的数组用户和项目XY?

【问题讨论】:

  • 看起来你需要修改你的 wsdl 文件
  • 我无法访问 wsdl 文件,该文件来自客户
  • 所以你的请求没有执行?肥皂客户端可以与 SoapClient 和预定义的 WSDL 文件一起正常工作。
  • 我想在我的线程中创建第一个请求,但我收到来自 SOAP 客户端的错误请求。没有 User Section 且 param1 不是名为 Tag 的权限。
  • 我认为你不应该关心你的请求是什么样子的。创建 Web 服务是为了不关心这一点。

标签: php soap xmlhttprequest soap-client


【解决方案1】:

在我将 PHP 代码修改为:

$soapClient = new SoapClient("http://service.mydomain.com/Services.asmx?wsdl",array( "trace" => 1 ));
$user_param = array (
  'username' => "user123",
  'password' => "geheim"
);
$service_param = array (
  'User' => $user_param,
  "ItemXY" => "something"
);

$info = $soapClient->__call("CheckSomething", array($service_param));
echo "Request :\n".htmlspecialchars($soapClient->__getLastRequest()) ."\n";

有效!

【讨论】:

  • 感谢您的回复。对于读者:有时只需将您的参数数组包装到数组中就足够了。
猜你喜欢
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多