在PHP中创建正确的SOAP调用

时间:2013-08-09 21:34:19

标签: php soap

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

谢谢!

1 个答案:

答案 0 :(得分: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文档中有一些很好的代码示例,用于获取发生的错误代码。