2012-01-18 1 views
1

私は現在、可能な限りハードにサービスに接続する古い支払い処理(カスタムクライアントSSL証明書、パスワード、それに続く基本的なHTTP認証を含む)を扱っています。要するに、SoapClientを使用してリクエストを行うことはできませんが、私はcURLでこれを実行できました。PHPのSoapClientを使用してHTTPリクエストをせずにSOAPレスポンスを解析できますか?

私は文字列でレスポンスを受け取ったので、それを解析するのにSoapClientを使用できますか?私はむしろ、通常のXMLとして手動で解析する必要はありません。例えば、<SOAP:Fault>を見つけるときに賢明な例外を投げるような、多くの機能を複製する必要があるからです。

+0

あなたがちょうどあなたが得たものは何でも応答取ることができませんでしたcURLを使用して、それを別のスクリプトを通して提供し、その代わりにSoapClientをポイントしますか?基本的には、本当にシンプルなSOAPプロキシを作っていて、cURLから得たものを返す以外は何もしません。 – Crontab

答えて

0

いいえ、できません。

(ただ後世のためにこれを答える。逆に証拠の欠如に基づいて、あなたは明らかにあなたが既に持っているSOAP応答を解析するためのSoapClientを使用することはできません)

0

あなたはコンテキストが第二あなたが呼んでいた想像のSoapClient :: __ doRequest()とそれをlots of options

+0

ええ、それは私にとってはうまくいきませんでした。それは私が求めているものではありませんが、私はすでにその接続がうまくいくまでに多大な時間を費やしました。私はSOAP応答を持っています。私はSimpleXMLよりもSOAP特有のものでそれを解析できますか? –

+0

うーん...これかもしれないhttp://nusoap.cvs.sourceforge.net/viewvc/nusoap/lib/class.soap_parser.php?view=markup? – Timur

+0

@DanielMagliolaあなたがSimpleXMLに反対している特別な理由は何ですか? –

0

ましょうとstream_context_createを使用して作成することができるなどのSSL証明書を使用するのSoapClientを伝えるためにSoapClientcontextオプションを使用してコンテキストを定義することができますXML SOAP応答を$応答という変数に返しました。

<?php 

    //LOAD RESPONSE INTO SIMPLEXML 
    $xml = simplexml_load_string($response); 

    //REGISTER NAMESPACES 
    $xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/'); 
    $xml->registerXPathNamespace('somenamespace', 'http://www.somenamespace/schema/'); 
    //...REGISTER OTHER NAMESPACES HERE... 

    //LOOP THROUGH AND GRAB DATA FROM A NAMESPACE 
    foreach($xml->xpath('//somenamespace:MessageHeader') as $header) 
    { 
     echo($header->xpath('//somenamespace:MyData')); 
    } 

    //...ETC... 

?> 

これはほんのいくつかの例/擬似コードです(テストされておらず、そのまま動作しません)。私の主張は、手動でSOAP応答を取得したので、解析するだけです。 SimpleXMLです。解決策を使用してください。

+0

以外のものよりも簡単ですさらに、ここではXMLを解析するために利用できるリソースがたくさんあります:http: /docs.php.net/manual/en/refs.xml.php –

+0

SoapClientがHTTPリクエストを必要としていると思われるので、これは間違いなく、私が避けようとしていたものです。しかし何でも。ありがとう! –

関連する問題