有人可以为我提供一个PHP示例,说明如何在https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl对wsdl webservice进行WSSoapClient调用。
我到处寻找代码示例,无法找到如何调用它。我看到你可以扩展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>
答案 0 :(得分: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_openssl
和php.ini
才能生效。
修改:似乎您要拨打的服务需要wsse标头。我不是专家,但看起来PHP对这类事情没有很大的支持。
在Google Code上找到一个似乎可以通过PHP轻松实现wsse的项目。点击此处:https://code.google.com/p/wse-php/source/browse/
您只需抓取soap-wsse.php
和xmlseclibs.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);
}
}
然后你应该可以像这样谈论网络服务:
$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();
我没有测试过任何上述代码,希望它可以让你走上正确的道路。
祝你好运