我无法弄清楚如何使用SOAP

时间:2017-05-18 13:32:26

标签: php xml web-services soap wsdl

在过去的几天里,我一直在使用SOAP。我无法理解如何正确构建SOAP enveloppe以发送到wsdl Web服务。我已尝试使用php和节点中的函数,js和i最终遇到了同样的问题。

问题是:我可以访问服务器,但似乎我没有发送足够的信息,因为Web服务总是返回false。

这是我需要的xml结构:

POST /2010/11/************.asmx HTTP/1.1
Host: url.url.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://***********/*******/2010/11/*************/**********"

<?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>
    <Function1 xmlns="http://**********.com/*************/2010/11">
      <Function1Request xmlns="http://******.com/********/2010/11">
        <param1>string</param1>
        <param2>string</param2>
      </Function1Request>
    </Function1>
  </soap:Body>
</soap:Envelope>

这是我在php中的表现:

<?php
$param1 = 'foo';
$param2 = 'bar';
try
{
 $url =    "https://******.com/2010/11/*******.asmx?wsdl";
$client = new SoapClient(¢url,array("trace"=> 1,"exception"=>0,"encoding"=>"UTF-8"));

$params = array(

    "param1" => $param1,
    "param2" => $param2
);
$options = array(
    "SOAPAction" => "http://***********/*******/2010/11/*************/**********",
);
$response = $client->__soapCall("Function1",$params,$options);
var_dump($response);
}
catch(Exception $e)
{
    echo $e;
}

基本上,Web服务不处理我的调用并返回false。 就像我说的那样,我确实在node.js中尝试了相同的结果。

编辑: 这是Web服务的答案:

object(stdClass)[2]
  public 'Function1Response' => 
    object(stdClass)[3]
      public 'IsAuthenticated' => boolean false
      public 'FleetOwnerID' => int 0

这是获取最后一次请求的结果:

<?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://*****.com/services/2010/11">
        <SOAP-ENV:Body>
            <ns1:Function1/>
               <param1/>
       </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>

这是我的请求标题:

POST /2010/11/*****.asmx HTTP/1.1
Host: url.url.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.0.15
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://***********/*******/2010/11/*************/**********"
Content-Length: 242

最后,响应头:

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 18 May 2017 15:15:20 GMT
Content-Length: 485

我发送的请求并不像他们要求的那样。我需要帮助才能正确构建它。

1 个答案:

答案 0 :(得分:0)

如果您了解PHP,那么您必须使用WSDL到php生成器来停止挣扎这么多。使用PackageGenerator项目,它应该清晰明了。