0

私は物事のサーバー側にいることに非常に慣れていません。xmlリクエストを受信するために単純なserver.phpを設定する必要があります。

これからどうやって始めたらいいのかわからない。私は通常のPost/Get変数をフォームから取得することに慣れています。

これが私が聞いていて、応答する必要があるものの例です:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <authenticate xmlns="http://someplace.someplace.com/">
            <strUserName xsi:type="xsd:string">username</strUserName>
            <strPassword xsi:type="xsd:string">password</strPassword>
        </authenticate>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

明らかに、私が中に見ることができるユーザー名/パスワードがあります。
ユーザー/パスの検証は簡単ですが、どうすればそれを解析できますか?

4

3 に答える 3

0

DOM要素を使用して、目的の値にアクセスすることもできます。

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <authenticate xmlns="http://someplace.someplace.com/">
            <strUserName xsi:type="xsd:string">username</strUserName>
            <strPassword xsi:type="xsd:string">password</strPassword>
        </authenticate>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>';

$dom = new DOMDocument();
$dom->loadXML( $xml );

$username = $dom->getElementsByTagName('strUserName')->item(0)->nodeValue;
$password = $dom->getElementsByTagName('strPassword')->item(0)->nodeValue;
于 2013-01-07T08:12:09.810 に答える
0

SimpleXMLで試してみてください。ここにいくつかの例があります。

SimpleXMLの例

于 2013-01-07T08:06:42.050 に答える
0

SOAPリクエストを解析するときは、おそらく既存のAPIを使用する必要があります。これにより、解析の問題が自動的に解消されるだけでなく、正しいSOAP出力が生成されます。

例:

$request = '<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <authenticate xmlns="http://someplace.someplace.com/">
            <strUserName xsi:type="xsd:string">foo</strUserName>
            <strPassword xsi:type="xsd:string">bar</strPassword>
        </authenticate>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>';

$s = new SoapServer(NULL, array('uri' => 'http://someplace.someplace.com/'));
$s->setClass("Auth");
$s->handle($request);

class Auth
{
    public function authenticate($strUserName, $strPassword)
    {
        return "U: $strUserName; P: $strPassword";
    }
}

:引数を渡さない場合は、データhandle()が使用されPOSTます。

于 2013-01-07T09:05:49.397 に答える