0

私は XML と SOAP の完全な初心者です。

少なくともどこから始めるべきか、またはいくつかの例についてアドバイスをいただけますか?

(私は私のためにコードを書くことを懇願しているわけではありません)

仕様は次のとおりです。

2 つのdouble値を受け取ることを期待しています。それを行う最も簡単な方法は何ですか?

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>

上記の仕様の起源: http://www.webservicex.net/CurrencyConvertor.asmx?op=ConversionRate

最初のブロックはリクエストで、他のレスポンスは...

編集

__doRequestさて、標準の PHP クラスで停止しましたが、このメソッドで何が求められているのかよくわかりません。

$client = new SoapClient();
$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" , $???, $???  );

http://www.php.net/manual/en/soapclient.dorequest.php

アクションとは何か、バージョンとして何を入れるべきか、私は知っています-石鹸バージョン1.2ですが、パラメーターは値intを割り当てることができないため1.2です笑...

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

...私はこの「uri」のことを理解していません - 私の理解を超えています。頭を壁にぶつけたくなる。

4

1 に答える 1

1

基本的に、必要なものは 2 つの部分です。

  1. 通信を解決する SOAPClient クラスは、サーバーの URL を認識し、要求を送信して応答 (質問で XML で取得したもの) を受信し、#2 もトリガーします。これは次のとおりです。

  2. 2 番目の部分は XML パーサー/マーシャラーであり、要求オブジェクト (fromCurrency と toCurrency を含む) をサーバーが理解できる正しい XML 文字列 (WSDL に従って) に変換し、WSDL を使用して一部の XML を応答オブジェクトに再度変換できます。この部分は少しトリッキーですが、「SOAP PHP」を検索すると、いくつかの例が得られます)。これらの 2 つのプロセスは、マーシャリングアンマーシャリングと呼ばれます (Google で何かをすばやく見つけられるようにするため)。あなたの StockQuote Web サービスは実際には WSDL を提供しません。これは基本的に、すべての可能な操作 (あなたの場合は 1 つだけ: GetQuote) とその利用可能なオブジェクト (あなたの場合はstring定義する必要のない単純なタイプのみ) の記述です。それらは WSDL 標準です)

私は PHP で SOAP を行ったことはありませんが、Java+SOAP で多くの時間を費やしたので、その難しさは理解できます。理論的には、XML をサーバーに送信し、XML を取得するだけです。ただし、送信される XML は正しい形式である必要があり、応答を受信したときに、応答をオブジェクトに変換し、XML 文字列を処理したくない場合があります。

このような単純な Web サービスの場合、手動で XML 要求を作成し (単純に XML 文字列をまとめる) substr、要求された回答を見つけるための応答を作成することを検討してください。

于 2012-09-06T02:54:44.460 に答える