在 PHP 中创建具有不同类型参数的 SOAP 请求

Creating a SOAP request with different kinds of parameters in PHP

我正在尝试使用 PHP 发出 SOAP 请求,但我似乎无法将需要随调用发送的参数分开。我可以通过 SOAP 测试工具使用该服务,我正在使用的代码片段是(删除了 ccn3 和 ccn2):

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <tns:GetUser>
      <tns:auth>
        <ccn3:Username>testuser</ccn3:Username>
        <ccn3:Password>testpass</ccn3:Password>
        <ccn3:AuthID>55125621</ccn3:AuthID>
      </tns:auth>
      <tns:user>
        <ccn2:Address>Testvägen 1</ccn2:Address>
        <ccn2:CustNo/>
        <ccn2:FirstName/>
        <ccn2:LastName/>
        <ccn2:SSN>1234567890</ccn2:SSN>
      </tns:user>
    </tns:GetUser>
  </soap:Body>
</soap:Envelope>

这确实有效,并从服务中给出了所需的答案。但是当通过 php 连接到它时却没有。我目前使用的 php 代码如下所示:

<?php
    $username = "testuser";
    $password = "testpass";
    $authID = 55125621;


    $client = new SoapClient("https://url/service.svc?wsdl");
    $param = array(
        'Username'=>$username,
        'Password'=>$password,
        'AuthID'=>$AuthID,
        'Address'=>'Testvägen 1',
        'SSN'=>'1234567890',
        'FistName'=>'',
        'LastName'=>''
        );
    $res = $client->GetUser($param);

    echo "<pre>";
    print_r($res);
    echo "</pre>";
?>

在我的 XML 查询中,我使用了两个 "groups" 参数。我将身份验证数据发送到我的 ccn3 (tns:auth) 并将我的数据发送到 ccn2 (tns:user)。我猜这是我的问题,但我如何在 php 中进行这种分离?

试试这个:

$params = array(
        'auth' => array(
                    'Username' => $username,
                    'Password' => $password,
                    'AuthID' => $AuthID,
        ),
        'user' => array(
                    'Address' => 'Testvägen 1',
                    'SSN' => '1234567890',
                    'FistName' => '',
                    'LastName' => ''
        ));

        $res = $client->GetUser($params);