web-dev-qa-db-ja.com

PHPでXMLリクエストを受信して​​応答XMLを送信する方法は?

したがって、xml要求を受信するアプリケーションを構築する必要があり、それに基づいて応答xmlを返す必要があります。リクエストの送信方法とレスポンスの受信方法は知っていますが、他の方法で行ったことはありません。私はそのようにリクエストを送信します:

private function sendRequest($requestXML)
{
    $server = 'http://www.something.com/myapp';
    $headers = array(
    "Content-type: text/xml"
    ,"Content-length: ".strlen($requestXML)
    ,"Connection: close"
    );

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $server);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 100);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXML);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $data = curl_exec($ch);



    if(curl_errno($ch)){
        print curl_error($ch);
        echo "  something went wrong..... try later";
    }else{
        curl_close($ch);
    }

    return $data;

}

私の質問は-受信側のコードは何ですか?着信リクエストをどのようにキャッチしますか?ありがとう。

14
bukowski

一般的なアイデアは、POST=値を読み取り、XMLとして解析し、ビジネス上の決定を行い、決定したAPIに従ってXML応答を構築し、それを書き込むことです。レスポンスに。

POST値を読み取ります:

$dataPOST = trim(file_get_contents('php://input'));

XMLとして解析:

$xmlData = simplexml_load_string($dataPOST);

次に、XML文字列(または必要に応じてドキュメントツリー)を作成し、応答に出力します。 print()またはecho()で問題ありません。

33
Jordan

受信側で行う必要があるのは、「通常の」PHPスクリプトを作成することだけです。エンドポイントと要求しているサービス間のプロトコルに応じて、正しい場所からデータを取得する必要があります。 $ _ GETまたは$ _ POST配列になる可能性が最も高いです。

rawPOSTデータが$ _POSTで届かない場合は、この記事を読んでください)

http://www.codediesel.com/php/reading-raw-post-data-in-php/

0
quickshiftin