如何在php中使用SOAP1.2获取引号?

如何在php中使用SOAP1.2获取引号?,php,soap,Php,Soap,我是XML和SOAP的高手 你能给出一些建议,至少从哪里开始,或者举个例子吗 (我不是乞求为我写代码) 以下是规格: 我只希望收到两个双倍值。最简单的方法是什么 POST /CurrencyConvertor.asmx HTTP/1.1 Host: www.webservicex.net Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding

我是XML和SOAP的高手

你能给出一些建议,至少从哪里开始,或者举个例子吗

(我不是乞求为我写代码)

以下是规格:

我只希望收到两个双倍值。最简单的方法是什么

POST /CurrencyConvertor.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <ConversionRate xmlns="http://www.webserviceX.NET/">
      <FromCurrency>PHP</FromCurrency>
      <ToCurrency>USD or EUR</ToCurrency>
    </ConversionRate>
  </soap12:Body>
</soap12:Envelope>

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <ConversionRateResponse xmlns="http://www.webserviceX.NET/">
      <ConversionRateResult>double</ConversionRateResult>
    </ConversionRateResponse>
  </soap12:Body>
</soap12:Envelope>

什么是动作,我应该把什么作为版本,我知道-一个soap版本1.2,但是参数是
int
,所以不能为它分配
1.2
值lol

EDIT2:

好吧,这是我目前得到的,但它给了我一个空字符串

$client = new SoapClient(null, array('location'=>'http://www.webservicex.net/CurrencyConvertor.asmx','uri'=>''));
$client->__doRequest ( <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <ConversionRate xmlns="http://www.webserviceX.NET/">
      <FromCurrency>PHP</FromCurrency>
      <ToCurrency>USD or EUR</ToCurrency>
    </ConversionRate>
  </soap12:Body>
</soap12:Envelope>
EOD
, "http://www.webservicex.net/CurrencyConvertor.asmx" , "ConversionRate", 2  );

echo "Response :<br>", htmlentities($client->__getLastResponse());
$client=新的SoapClient(空,数组('location'=>)http://www.webservicex.net/CurrencyConvertor.asmx“,”uri'=>”);

$client->\u doRequest(基本上,您需要的是两部分

  • SOAPClient类解决了通信问题,它知道服务器URL,发送请求并接收响应(您在问题中用XML表示),还触发#2,即:

  • 第二部分是XML解析器/封送器,它可以将请求对象(包含fromCurrency和toCurrency)转换为服务器可以理解的正确XML字符串(根据WSDL)并再次使用WSDL将一些XML转换为响应对象。这一部分有点棘手,但我找到了很多关于这方面的文档,搜索“SOAP PHP”,您会得到一些示例)。这两个过程被称为编组解编组(帮助您通过Google更快地找到内容)。StockQuote Web服务并没有真正提供WSDL,它基本上是对所有可能操作的描述(在您的例子中只有一个:
    GetQuote
    )及其可用对象(在您的例子中只有简单类型
    string
    ,它们不需要定义,因为它们是WSDL标准)

  • 我没有用PHP做过SOAP,但花了很多时间用Java+SOAP,我能理解这有多困难。理论上,您只需向服务器发送一些XML,然后返回一些XML。但是发送的XML必须采用正确的格式,当您收到响应时,您希望将响应转换为对象,而不是处理一些XML字符串


    对于这样的简单Web服务,可以考虑手工构建XML请求(简单地将XML字符串组合起来)和<代码>子字符串< /代码>响应以找到所请求的答案。我将按您所说的那样尝试,因为确实如此,请求字符串是常量,按原样发送可能是个好主意。但是似乎有几个php的SOAP客户端,我将尝试对它们进行快速研究,看看是否可以开始。好吧,我在一个standart php课程上停了下来,但是我不太明白在这个

    \uuu doRequest
    方法中,作为请求的“action”和“version”参数,请求什么:$action is
    http://www.webservicex.net/ConversionRate
    或只是
    转换率
    。对于$version,我不是100%确定,但它不是1.2就是1.1(首选1.2)。由于参数是一个整数,因此它应该是
    2
    。soapClient类还需要一个“uri”参数作为选项之一。我想知道我应该在这里把什么作为uri:
    $client=newsoapclient(null,array('location'=>)http://www.webservicex.net/CurrencyConvertor.asmx“,”uri“=>”$??“)“uri是SOAP服务的目标命名空间”。请检查XML名称空间(此快速介绍应包括:)。在您的案例中,示例请求显示:
    xmlns:soap12=”http://www.w3.org/2003/05/soap-envelope“
    ,因此名称空间(“soap”)的URI是:
    PHP
    USD或EUR
    似乎可疑。好吧,这正是规范中所说的:问题一定是在其他地方……哦,对了
    PHP
    代表菲律宾比索。对不起,是的,需要兑换成其他货币。
    $client = new SoapClient(null, array('location'=>'http://www.webservicex.net/CurrencyConvertor.asmx','uri'=>''));
    $client->__doRequest ( <<<EOD
    <?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
      <soap12:Body>
        <ConversionRate xmlns="http://www.webserviceX.NET/">
          <FromCurrency>PHP</FromCurrency>
          <ToCurrency>USD or EUR</ToCurrency>
        </ConversionRate>
      </soap12:Body>
    </soap12:Envelope>
    EOD
    , "http://www.webservicex.net/CurrencyConvertor.asmx" , "ConversionRate", 2  );
    
    echo "Response :<br>", htmlentities($client->__getLastResponse());