2

我无法在 PHP 中创建正确的 SOAP 调用。我已经在 SOAP UI 中测试了以下调用并且它可以工作,但是我已经尝试了从创建对象、数组和 SOAPHeaders 的所有方法,但我似乎无法获得正确的调用。这是在 SOAP UI 中工作的请求:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="com.dtn.aghost.API.subscriptions">
    <soapenv:Header>
        <com:ServiceCredentials>
            <usernamePasswordCombo>
                <username>[username]</username>
                <password>[password]</password>
            </usernamePasswordCombo>
        </com:ServiceCredentials>
    </soapenv:Header>
    <soapenv:Body>
        <com:SubscriptionServiceIdList>
            <visible>1</visible>
        </com:SubscriptionServiceIdList>
    </soapenv:Body>
</soapenv:Envelope>

谢谢!

4

1 回答 1

0

我有一些问题,因为您的请求中关于您已经尝试过的信息很少。我建议您添加一些您尝试使用的代码以及您查看过的一些资源以获取该信息。此外,如果您描述了您尝试的结果,这将有助于回答您的请求。例如是否有错误,如果有,您看到了什么错误?

获取连接到 SOAP Web 服务的 PHP 代码示例的好地方是关于Soap Client的 PHP 文档。

在该页面的评论中,您将找到其他人使用过的代码示例。您可能会对其进行调整以将其用于您的目的。

至于连接到 SOAP Web 服务的代码示例

<?php

    $http_client = 'http://example.com/MyService.asmx?wsdl';

    $client = new SoapClient($http_client, array(
        'style' => SOAP_DOCUMENT,
        'use' => SOAP_LITERAL,
        'soap_version'=>SOAP_1_1,
        'trace' => 1,
        'connection_timeout' => 300));

    $params = array( 'username' => $user_name, 'password' => $password);

    $results = $client->myFunction($params);

    // Debug code can be added after this

?>

您需要做的另一件事是调试请求的结果。在上面的示例中,它将 trace 的值设置为 1。这允许您调试已发生的 SOAP 请求。您可以使用以下代码执行此操作。

    // Debug code

    echo $client->__getLastRequestHeaders();
    echo $client->__getLastRequest()
    echo $client->__getLastResponseHeaders();
    echo $client->__getLastResponse();

PHP SoapClient getLastResponse

最后,您可以使用is_soap_fault来确定请求是否失败。PHP 文档中有一些很好的代码示例,用于获取发生的错误代码。

于 2014-01-22T23:19:18.950 回答