Как сделать SoapClient на php - PullRequest
       0

Как сделать SoapClient на php

5 голосов
/ 08 апреля 2010

Я новичок в мыльном клиенте, я пытался провести какое-то исследование в Интернете, а также пытался писать код на мыле, но, похоже, это все еще не работает для меня, просто странствующий кто-то здесь может указать и, возможно, дать мне пример, как Я действительно использую soapclint, чтобы получить обратную связь от следующего веб-сервера?

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);


?>

Что я должен сделать для следующих шагов, чтобы я мог получить ответ ??

1 Ответ

12 голосов
/ 08 апреля 2010

Сначала вы должны создать экземпляр SoapClient класса , как вы это сделали:

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


Затем вам нужно вызвать метод, который вы хотите использовать - имена методов можно найти в WSDL.

Например, мы могли бы вызвать метод с именем CelsiusToFahrenheit в этом веб-сервисе:

$result = $client->CelsiusToFahrenheit( /* PARAMETERS HERE */ );


Теперь проблема состоит в том, чтобы знать , какие параметры следует передавать ; и как ...

Если вы посмотрите на 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>

Что указывает, что этим методам должен быть передан массив, содержащий 1 элемент, который будет иметь "Celsius" в качестве ключа и значение для преобразования в качестве значения.

Это означает, что вам придется использовать эту часть кода PHP:

$result = $client->CelsiusToFahrenheit(array('Celsius' => '10'));


Выполнение этого вызова и вывод результата:

var_dump($result);

Получает этот вид вывода:

object(stdClass)#2 (1) {
  ["CelsiusToFahrenheitResult"]=>
  string(2) "50"
}


Что означает, что вы должны использовать это:

echo $result->CelsiusToFahrenheitResult . "\n";

Чтобы получить результирующее значение :

50


Примечание: структуру этого результата можно также найти в файле WSDL - см. Часть CelsiusToFahrenheitResponse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...