php - 我可以在发送之前预览 PHP SOAP 要发送的 XML 吗?

标签 php soap

根据标题,是否可以在尝试运行 __soapCall() 之前输出 new SoapClient 创建的 XML,以确保在实际发送之前它是正确的它到 SOAP 服务器?

最佳答案

您可以使用派生类并覆盖 __doRequest() method SoapClient 类。

<?php
//$clientClass = 'SoapClient';
$clientClass = 'DebugSoapClient';
$client = new $clientClass('http://www.webservicex.com/CurrencyConvertor.asmx?wsdl');
$client->sendRequest = false;
$client->printRequest = true;
$client->formatXML = true;

$res = $client->ConversionRate( array('FromCurrency'=>'USD', 'ToCurrency'=>'EUR') );
var_dump($res);

class DebugSoapClient extends SoapClient {
  public $sendRequest = true;
  public $printRequest = false;
  public $formatXML = false;

  public function __doRequest($request, $location, $action, $version, $one_way=0) {
    if ( $this->printRequest ) {
      if ( !$this->formatXML ) {
        $out = $request;
      }
      else {
        $doc = new DOMDocument;
        $doc->preserveWhiteSpace = false;
        $doc->loadxml($request);
        $doc->formatOutput = true;
        $out = $doc->savexml();
      }
      echo $out;
    }

    if ( $this->sendRequest ) {
      return parent::__doRequest($request, $location, $action, $version, $one_way);
    }
    else {
      return '';
    }
  }
}

打印

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.webserviceX.NET/">
  <SOAP-ENV:Body>
    <ns1:ConversionRate>
      <ns1:FromCurrency>USD</ns1:FromCurrency>
      <ns1:ToCurrency>EUR</ns1:ToCurrency>
    </ns1:ConversionRate>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
NULL

但是您必须稍微更改实际代码才能使其正常工作,我会尽可能避免这种情况(即让工具完成工作)。

关于php - 我可以在发送之前预览 PHP SOAP 要发送的 XML 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4021514/

相关文章:

java - 如何从 soap web 服务检索未知的 XML 并使用 java 插入数据库

web-services - Web 服务是否应该抛出异常或结果对象

php - 如何在向数据库中添加条目时在标签表中执行搜索?

javascript - 表单提交后隐藏表格内的按钮?

python - 将 SOAP header 读取到 SOAPpy 响应?

java - 如何从返回 dataset(<Object> any) 的 Web 服务创建 POJO

java - Java 中的 XSD 设计问题

php - PHP 中的异常 - Try/Catch 或 set_exception_handler?

php - 使用 PHP 和 MySQL 执行 SQL 查询以按关键字搜索结果时出错

php - Laravel Blade @include 和 @yield