如何在php上做SoapClient

Jin*_*ong 5 php soap

我是soapclient的新手,我曾尝试在网上做一些研究,也尝试用肥皂编码,但似乎这对我来说仍然不起作用,只是在这里徘徊任何人都可以指出并可能给我一些例子我怎样才能真正使用soapclint从以下Web服务器获取反馈?

POST /webservices/tempconvert.asmx HTTP/1.1
Host: www.w3schools.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/CelsiusToFahrenheit"

<?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>
    <CelsiusToFahrenheit xmlns="http://tempuri.org/">
      <Celsius>string</Celsius>
    </CelsiusToFahrenheit>
  </soap:Body>
</soap:Envelope>

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

<?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>
    <CelsiusToFahrenheitResponse xmlns="http://tempuri.org/">
      <CelsiusToFahrenheitResult>string</CelsiusToFahrenheitResult>
    </CelsiusToFahrenheitResponse>
  </soap:Body>
</soap:Envelope>



<?php
$url = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
$client = new SoapClient($url);


?>
Run Code Online (Sandbox Code Playgroud)

我应该怎样做下一步,以便我能得到答复?

Pas*_*TIN 12

你首先要实例化的SoapClient类,像你这样:

$url = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
$client = new SoapClient($url);
Run Code Online (Sandbox Code Playgroud)


然后,您必须调用要使用的方法 - 可以在WSDL中找到方法名称.

例如,我们可以在此WebService中调用一个名为的方法CelsiusToFahrenheit:

$result = $client->CelsiusToFahrenheit( /* PARAMETERS HERE */ );
Run Code Online (Sandbox Code Playgroud)


现在,问题是要知道应该通过哪些参数 ; 如何...

如果你看一下WSDL,你会看到这个部分:

<s:element name="CelsiusToFahrenheit">
  <s:complexType>
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="Celsius" type="s:string" />
    </s:sequence>
  </s:complexType>
</s:element>
Run Code Online (Sandbox Code Playgroud)

这表明这个方法应该传递一个数组,包含1个项目,其中有" Celsius"作为键,以及要转换为值的值.

这意味着您必须使用这部分PHP代码:

$result = $client->CelsiusToFahrenheit(array('Celsius' => '10'));
Run Code Online (Sandbox Code Playgroud)


执行此调用并转储结果:

var_dump($result);
Run Code Online (Sandbox Code Playgroud)

得出这种输出:

object(stdClass)#2 (1) {
  ["CelsiusToFahrenheitResult"]=>
  string(2) "50"
}
Run Code Online (Sandbox Code Playgroud)


这意味着你必须使用这个:

echo $result->CelsiusToFahrenheitResult . "\n";
Run Code Online (Sandbox Code Playgroud)

要获得结果值:

50
Run Code Online (Sandbox Code Playgroud)


注意:当然也可以在WSDL文件中找到此结果的结构 - 请参阅CelsiusToFahrenheitResponse部分.