2009-09-04 14 views
2

OK n00bここをクリックSOAP、PHPでSOAP投稿を取得するには?

SOAPの使い方についてはいくつかの説明がありますか?

質問:

私はポストWSDL(XML形式のように見える)私のPHPスクリプトのことをJavaのJSPを持っていますが、どのように私はPHPスクリプトでこれを得るのですか? WSDLのURLは毎回異なります。

私はそれがとても簡単だと確信していますが、これを正しく理解していないか、私が正しく理解していないのでしょうか?

答えて

6

あなたはこのような何かを試すことができます。

 
try {                                           
    if (!($xml = file_get_contents('php://input'))) { 
    throw new Exception('Could not read POST data.'); 
    } 
} catch (Exception $e) { 
    print('Did not successfully process HTTP request: '.$e->getMessage()); 
    exit; 
} 

これは、$ XML変数へのPOSTリクエストのボディを読み、存在する場合、エラーを出力します。

+0

この「php:// input」を見たことがなく、これはRAW投稿データを読みますか? –

+0

ありがとうございますこれは素晴らしい作品です –

0

JSPがPOSTリクエストでWSDLをPHPスクリプトに送信することを意味しますか? もしそうなら、$ _POST配列を見てください。 JSPの送信方法を正確に指定すると、おそらくもっと役立つでしょう。

とにかく、PHPスクリプト内の変数にWSDL URLがあると、SoapClientクラスを使用してそのURLにアクセスできます。

+0

これは私が話しているルートですので、多分私はRAWのポストを消費し、そのように解析することができますか? –

0

最良のシナリオを想定すると:

$soapClient = new SoapClient($wsdlUrl, $soapOptions); 
$soapClient->callYourMethod(); 

しかし、あなたは、SOAPを使用するときにレンガの壁の多くをヒットする可能性が高いです。ここにはdocumentation for SoapClientがあります。

編集:

ので、WSDLは、POST-EDです。次に、XML文字列がHTTP本文として送信された場合は$HTTP_RAW_POST_DATAを、XML文字列がマルチパート要求の一部として送信された場合は$_FILES超大域記号を使用してアクセスできます。このような

何か:always_populate_raw_post_data設定php.iniのがオンになっている場合

$wsdl = $HTTP_RAW_POST_DATA; 
$wsdlUrl = 'data:text/xml;base64,' . base64_encode($wsdl); 
$soapClient = new SoapClient($wsdlUrl); 

とにかく、$HTTP_RAW_POST_DATAにのみ使用可能です。また、要求が複数パートであった場合、この設定は無視され、$HTTP_RAW_POST_DATAは入力されませんが、$_FILESを使用して投稿された部分にアクセスできます。実際に$HTTP_RAW_POST_DATAの代わりにphp://inputを使用することもできます。

またdata URIsは、allow_url_fopenがphp.iniでオンになっている場合にのみ使用できます。

+0

しかし、どうすれば$ wsdlUrlを得ることができますか?これは毎回私がPHPスクリプトを処理するために必要な変更です –

+0

URLはデータそのものを含んでいます:URLプロトコルはhttpではなくデータです。 SoapClientクラスがこれを処理するならば、それは最善の解決策です。 – gnud

関連する問題