0

SOAP リクエストを適切に作成し、サーバーから情報を受け取る方法を理解するのに苦労しています。

これは、接続する必要があるサービスのドキュメントへのリンクです。SOAP リクエストとレスポンスのフォーマットを示します。

https://www.team-intro.com/ws/distributorWS.asmx?op=GetReplicatedSite

彼らのリクエスト形式を見ると、これをサーバーに渡す方法がわかりません。グーグルで検索して、リクエストを送信する方法をいくつか見つけましたが、ソープ障害エラーが発生し続けます。以下は私の最近の試みです。

<?php

//error_reporting(E_ALL);

//soap connect
$client = new SoapClient("http://www.team-intro.com/ws/distributorWS.asmx?WSDL");

$params = new SoapVar("<soap12:Header><AuthHeader Domain='THEDOMAIN' xmlns='http://www.prodogix.com/'><AuthorizationKey>MYAUTHKEY</AuthorizationKey></AuthHeader></soap12:Header><soap12:Body><GetReplicatedSite xmlns='http://www.prodogix.com/'><website>USERNAME</website></GetReplicatedSite></soap12:Body>", XSD_ANYXML);

//$info[
try {
    $result = $client->GetReplicatedSite($params);
}
catch (SoapFault $exception) {
  echo $exception;      
} 

print_r($result);

?>

入力値を取り除き、すべて大文字に置き換えました。

SOAP サーバーに送信する配列を構築している人も見てきましたが、ドメインや xmlns などの追加情報を AuthHeader に渡す方法がわかりません。

誰でも私を正しい方向に向けることができますか?

4

1 に答える 1

1

このチュートリアルには、必要な機能が含まれています。

http://www.xillent.com/blog/codesharing/php-soap-call-for-wsdl-envelope-and-payload/

他の誰かが私のような問題を抱えている場合に備えて、コードが実際にどのように機能したかを次に示します。

<?php

//error_reporting(E_ALL);

class feedSoap extends SoapClient
{

    var $XMLStr = "";
    function setXMLStr ($value){$this->XMLStr = $value; }
    function getXMLStr(){return $this->XMLStr; }

    function __doRequest($request, $location, $action, $version) 
    {
        $request = $this -> XMLStr;
        $dom = new DOMDocument('1.0');

        try 
        {
            $dom->loadXML($request);
        } 
        catch (DOMException $e) 
        {
            die($e->code);
        }

        $request = $dom->saveXML();

        //doRequest
        return parent::__doRequest($request, $location, $action, $version);
    }

    function SoapClientCall($SOAPXML)
    {
        return $this -> setXMLStr ($SOAPXML);
    }
}

function soapCall($wsdlURL, $callFunction="", $XMLString)
{
    $client = new feedSoap($wsdlURL, array('trace' => true));
    $reply = $client-> SoapClientCall($XMLString);
    $client->__call("$callFunction", array(), array());

    return $client -> __getLastResponse();
}

    //i just copied the soap request they provided and dropped in my values (removed for stackoverflow
$XMLString= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
    <AuthHeader Domain="THEDOMAIN" xmlns="http://www.prodogix.com/">
        <AuthorizationKey>MYKEY</AuthorizationKey>
    </AuthHeader>
</soap:Header>
<soap:Body>
    <GetReplicatedSite xmlns="http://www.prodogix.com/">
        <website>USERSNAMEe</website>
    </GetReplicatedSite>
</soap:Body>
</soap:Envelope>';

//set up the url to post the soap request to
$wsdlURL = 'https://www.team-intro.com/ws/distributorWS.asmx?WSDL';

    //make the call, and set the soap function that I'll be using
$result = soapCall($wsdlURL, $callFunction="GetReplicatedSite", $XMLString);

print_r($result);

?>  
于 2013-05-08T21:30:34.870 に答える