php - SOAP PHP 调用.NET。无参数

标签 php soap native

各位,

我正在 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/

相关文章:

PHP是否在MySQL中存储图像?

java - 使用 SOAP Web 服务 - Java VS PHP

c# - 使用 WCF Web 服务发送 1 个包含 100 万个整数的数组等于大超时?

jquery - SharePoint SOAP GetListItems VS jQuery - 如何使用 Ajax 循环自定义列表项以及 Ajax 刷新列表内容?

php - 从循环打印时如何定义最后一个 child ?

php - 将 PHP 对象转换为关联数组

php - 通过 PHP 通过 Join 引用两个 SQL 数据库

reactjs - 如何在 React Native Flexbox 中水平包装项目?

java - GWT 中的 native Javascript 方法

c++ - 在 C++ 中设置正在运行的应用程序的当前目录