【问题标题】:Php SoapClient and adding xmlns url'sPhp SoapClient 并添加 xmlns url
【发布时间】:2021-01-20 22:03:03
【问题描述】:

对使用 Soap 完全陌生,但我需要了解发生了什么,因为我无法理解这个问题。

我需要添加两个命名空间才能使我的代码正常工作。而且我这辈子都做不到。

这是我需要添加的名称空间:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:cour="http://schemas.datacontract.org/2004/07/CourierServiceLibrary">

这是我要发送的内容:

$xml = array(
        'CLIENT_GUID' => 'GUID',
        'Destination' => array(
            'Country2LetterCode' => 'PM',
            'TownCity' => 'tiwb',
            'PostCode' => 'AA112BB',
            'NonDocFlag' => false,
            'ImportFlag' => false
        ),
        'PackageDimensionsMetric' => array(
            'NumberOfPackages'=> 1,
            'Weight' => 9,
            'Length' => 9,
            'Width' => 9,
            'Height' => 9
        )
    );

我发送的 PHP 代码非常简单,看起来有点像这样:

$soapclient = new SoapClient('http://webservice.com/Service.svc?WSDL');
$response = $soapclient->Comparison($xml);

我收到了回复,但因为我似乎无法添加名称空间,所以返回的内容无法阅读。

我尝试发送完整 XML 的原始文本版本,但由于服务器每次都拒绝它而失败。有很多旧论坛谈到这一点,但我没有尝试过任何解决方案。

但我确实读过一篇说 SoupClient 不可能的,可以追溯到 2013 年。实际上仍然是这种情况,这就是我无法添加命名空间的原因吗?

注意:使用 SoupUI,它似乎实际上发送了已经包含 xmlns 的整个原始 xml。但是当我尝试时它失败了。

非常感谢任何帮助,因为我不明白为什么它在 SoupUI 中不起作用。但我之前的任何项目中都没有使用过 Soup。

【问题讨论】:

    标签: php xml-namespaces soap-client


    【解决方案1】:

    只是为了结束这个问题。我真的不认为这是问题的答案。但它确实通过使用 CURL 解决了我遇到的问题。

    $xml_post_string = '<soapenv:Envelope   xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"';
    
    $headers = array(
        "Content-type: text/xml;charset=\"utf-8\"",
        "Cache-Control: no-cache",
        "Accept: application/xml",
        "Cache-Control: no-cache",
        "Pragma: no-cache",
        "SOAPAction: http://tempuri.org/************/***********",
        "Content-length: " . strlen($xml_post_string),
    ); //SOAPAction: your op URL
    
    $url = $soapUrl;
    // PHP cURL  for https connection with auth
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $soapUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // converting
    $response = curl_exec($ch);
    if (curl_exec($ch) === false) {
        echo 'Curl error: ' . curl_error($ch);
    } else {
        echo 'Operation completed without any errors';
    }
    curl_close($ch);
    echo "<hr>";
    

    我希望这可以帮助那些可能是 XML 新手,并了解如何从对 Web 服务的调用中获取数据的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多