1

SOAP クライアントはデフォルトで XML 応答を返すため、XML ではなく JSON 応答を返す必要があります。

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
                                     'uri'      => "http://test-uri/"));

その場合、 JSON 応答を返すために、 SOAPClientまたはSOAPHeaderでどの属性を設定する必要がありますか?

4

3 に答える 3

5

いくつかの調査でわかったことから、SoapClient にはデータを直接 JSON として返す組み込みの方法がありません (私が間違っているかどうかは誰でも知っています。事実です!) そのため、おそらく XML で返されたデータを取得して、手動で解析する必要があります。

SimpleXMLElement がいくつかの便利な機能を提供していたことを思い出しました。確かに、誰かがphp.netで正確にそれを行うためのコード スニペットをいくつか持っていました: http://php.net/manual/en/class.simplexmlelement.php

<?php
function XML2JSON($xml) {
    function normalizeSimpleXML($obj, &$result) {
        $data = $obj;
        if (is_object($data)) {
            $data = get_object_vars($data);
        }
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                $res = null;
                normalizeSimpleXML($value, $res);
                if (($key == '@attributes') && ($key)) {
                    $result = $res;
                } else {
                    $result[$key] = $res;
                }
            }
        } else {
            $result = $data;
        }
    }
    normalizeSimpleXML(simplexml_load_string($xml), $result);
    return json_encode($result);
}
?>
于 2012-11-06T06:12:36.013 に答える
2

SOAP は XML メッセージ形式のみをサポートします。

接続しようとしている SOAP サーバーが、直接アクセスできないサード パーティのサーバーである場合は、この例のように、受信後に XML 応答を JSON に変換する必要があります

Web サービス サーバーで json などのさまざまなデータ型をサポートする場合は、 RESTful Web サービスを検討する必要があります。

于 2012-11-06T06:10:31.453 に答える