各位,
我正在 PHP 中使用 SOAPClient 来调用 .NET Web 服务。一切都很好,直到我传递参数为止。远程Web服务向处理响应的listener.php文件发出请求,但是目前它似乎无法获取参数...在发送请求之前检查请求似乎没有显示参数在 XML 中。
有人可以明确地告诉我如何传递参数吗?到目前为止,我已经看到了大约 3 种不同的方法,包括但不限于以下:
$pCriteria->AuctionID = new SoapVar($auction_id, XSD_INT, 'xsd:int');
或者:
$ar_bidupdate_params_total = array('AuctionID' => $auction_id,'parameter2...等等..)
或者:
$ar_bidupdate_params = 数组(
new SoapParam($auction_id, 'AuctionID'),
示例代码还显示了以多种方式调用它(根据我在网络上看到的)。
$info = $soapClient->__call("BidUpdate", array($pCriteria));
或
$info = $client->BidUpdate($pCriteria);
问题是,1)如何使用 native SoapClient 可靠地传递这些参数,2)最好的方法是什么?
或者,如果我不能让它发挥作用,我可能会即时构建 XML。如果我选择这种方法,发送 XML 字符串的最佳方法是什么?
最佳答案
为了证明您的担忧:是的,使用 SoapClient 可能会令人沮丧。主要是因为文档。不过,这是我不久前为一个项目工作的一段示例代码。我最终在图书馆的支付网关中使用了这种技术。我知道这对于从字符串名称取消引用的函数调用来说并不完全漂亮,但它确实有效。
$method = "ACTION";
$wsdl = "WSDLFILE.wsdl";
$parameters = array (
'location' => "http://url.com",
'local_cert' => "/full/path/to/CERTIFICATE.pem,"
'passphrase' => "TEST-PASSWORD",
'use' => SOAP_ENCODED ,
'connection_timeout' => 4,
'user_agent' => null
);
$client = new SoapClient( $wsdl, $parameters );
$response = $client->{$method}( $data );
var_dump( $response );
详细来说,在设置好 wsdl 和证书后(如果需要),SoapClient 会动态创建一个与 WSDL 中的内容相对应的函数($method),即:用于诸如“Capture”之类的操作()”或“授权()”。然后客户端处理 XML 发送/解析。是否使用 SOAP_ENCODED,以及如何传递参数实际上取决于另一端的内容。
不过,我已经手动创建了信封 XML,并且我建议不要这样做。只要您获得良好的 WSDL 转储(.NET 项目会自动执行该转储并且应该不是问题),那么它就是避免维护噩梦(如果/当它发生更改/更新时)的好方法,而不是必须手动进行旋转 XML 文本。
关于php - SOAP PHP 调用.NET。无参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227967/