OK n00bここをクリックSOAP、PHPでSOAP投稿を取得するには?
SOAPの使い方についてはいくつかの説明がありますか?
質問:
私はポストWSDL(XML形式のように見える)私のPHPスクリプトのことをJavaのJSPを持っていますが、どのように私はPHPスクリプトでこれを得るのですか? WSDLのURLは毎回異なります。
私はそれがとても簡単だと確信していますが、これを正しく理解していないか、私が正しく理解していないのでしょうか?
OK n00bここをクリックSOAP、PHPでSOAP投稿を取得するには?
SOAPの使い方についてはいくつかの説明がありますか?
質問:
私はポストWSDL(XML形式のように見える)私のPHPスクリプトのことをJavaのJSPを持っていますが、どのように私はPHPスクリプトでこれを得るのですか? WSDLのURLは毎回異なります。
私はそれがとても簡単だと確信していますが、これを正しく理解していないか、私が正しく理解していないのでしょうか?
あなたはこのような何かを試すことができます。
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リクエストのボディを読み、存在する場合、エラーを出力します。
JSPがPOSTリクエストでWSDLをPHPスクリプトに送信することを意味しますか? もしそうなら、$ _POST配列を見てください。 JSPの送信方法を正確に指定すると、おそらくもっと役立つでしょう。
とにかく、PHPスクリプト内の変数にWSDL URLがあると、SoapClientクラスを使用してそのURLにアクセスできます。
これは私が話しているルートですので、多分私はRAWのポストを消費し、そのように解析することができますか? –
最良のシナリオを想定すると:
$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でオンになっている場合にのみ使用できます。
しかし、どうすれば$ wsdlUrlを得ることができますか?これは毎回私がPHPスクリプトを処理するために必要な変更です –
URLはデータそのものを含んでいます:URLプロトコルはhttpではなくデータです。 SoapClientクラスがこれを処理するならば、それは最善の解決策です。 – gnud
この「php:// input」を見たことがなく、これはRAW投稿データを読みますか? –
ありがとうございますこれは素晴らしい作品です –