0

https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdlで wsdl Web サービスへの WSSoapClient 呼び出しを行う方法の PHP の例を教えてください。

コード例をどこでも探しましたが、これを呼び出す方法が見つかりませんでした。SoapClient クラスを拡張できることがわかりましたが、呼び出し自体を構造化する方法がわかりません。どうもありがとうございます。

例"

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ser="http://server.webservices.web.v2.pagosonline.net"> 
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" 
 xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-    secext1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>1</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-    token-profile-1.0#PasswordText">
123456</wsse:Password>
</wsse:UsernameToken>
</wsse:Security> 
</soapenv:Header>
<soapenv:Body>
<ser:getVersion soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</soapenv:Body></soapenv:Envelope>
4

1 に答える 1

2

SoapClientまず、次のようにURLをWSDLファイルに渡して、新しいオブジェクトを初期化する必要があります。

$client = new SoapClient("https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl");

次に、次のような他のオブジェクトメソッドと同じようにサービスメソッドを呼び出すことができます。

$verificaCuenta = true;
$result = $client->setVerificaCuenta($verificaCuenta);

$client使用可能なすべてのメソッドのリストを取得するには、オブジェクトを作成したら、次__getFunctions()のように呼び出すことができます。

$client = new SoapClient("https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl");
$functions = $client->__getFunctions();
var_dump($functions);

注:これを機能させるには、ファイルで有効にしておく必要がphp_soapあります。php_opensslphp.ini

編集:呼び出しているサービスにはwsseヘッダーが必要なようです。私は専門家ではありませんが、PHPはそのようなことをあまりサポートしていないようです。

PHPでwsseを簡単にするように見えるGoogleCodeのプロジェクトを見つけました。ここにリンク:https ://code.google.com/p/wse-php/source/browse/

soap-wsse.phpxmlseclibs.phpファイルを取得するだけです。

次に、soap-wsse.phpファイルをコードに含め、soapクライアントを次のように拡張します。

require "soap-wsse.php";
class mySoap extends SoapClient {

    function __doRequest($request, $location, $saction, $version) {
        $doc = new DOMDocument('1.0');
        $doc->loadXML($request);

        $objWSSE = new WSSESoap($doc);

        $objWSSE->addUserToken("YOUR_USERNAME_HERE", "YOUR_PASSWORD_HERE", TRUE);

        return parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version);
    }
}

次に、次のようにWebサービスと通信できるようになります。

$wsdl = 'https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl';    
$sClient = new mySoap($wsdl, array('trace'=>1));

try {
    $verificaCuenta = true;
    $result = $sClient->setVerificaCuenta($verificaCuenta);
    print_r($result->return);
} catch (SoapFault $fault) {
    print("Fault string: " . $fault->faultstring . "\n");
    print("Fault code: " . $fault->detail->WebServiceException->code . "\n");
}

echo $sClient->__getLastRequest() . "\n" . $sClient->__getLastResponse();

免責事項

私は上記のコードのいずれもテストしていません。うまくいけば、それはあなたを正しい道に導くことができます。

幸運を

于 2013-03-02T02:12:31.650 に答える