5

我正在使用 SoapClient,试图为这个规范生成一些东西:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <WSUser xmlns="http://webservices.listrak.com/v31/">
      <UserName>string</UserName>
      <Password>string</Password>
    </WSUser>
  </soap:Header>
  <soap:Body>
    <SetContact xmlns="http://webservices.listrak.com/v31/">
      <WSContact>
        <EmailAddress>string</EmailAddress>
        <ListID>int</ListID>
        <ContactProfileAttribute>
          <AttributeID>int</AttributeID>
          <Value>string</Value>
        </ContactProfileAttribute>
        <ContactProfileAttribute>
          <AttributeID>int</AttributeID>
          <Value>string</Value>
        </ContactProfileAttribute>
      </WSContact>
      <ProfileUpdateType>NotDefined or Update or Append or Overwrite</ProfileUpdateType>
      <ExternalEventIDs>string</ExternalEventIDs>
      <OverrideUnsubscribe>boolean</OverrideUnsubscribe>
    </SetContact>
  </soap:Body>
</soap:Envelope>

我研究了一堆,包括以下内容,并认为我有答案。但是,它不起作用。这就是我正在做的事情:

foreach ($attributes as $key => $value) {
            $obj = array('AttributeID' => $key, 'Value' => $value);
            $attrs[] = $obj;
    }
    $final_attrs = array('ContactProfileAttribute' => $attrs);

    $params = array(
                    'WSContact' => array(
                                    'EmailAddress' => $email,
                                    'ListID' => $listId,
                                    array('ContactProfileAttribute' => $attrs)
                                    ),
                                    'ProfileUpdateType' => 'Overwrite',
                                    'ExternalEventIDs' => "",
                                    'OverrideUnsubscribe' => TRUE,

    );

    try {

            $rest = $soapClient->SetContact($params);
...

当我打印出数组时,我得到了这个:

Array
(
    [WSContact] => Array
        (
        [EmailAddress] => xxx@example.com
        [ListID] => 26444
        [0] => Array
            (
                [ContactProfileAttribute] =&gt; Array
                    (
                        [0] => Array
                            (
                                [AttributeID] => 1548948
                                [Value] => 1
                            )

                        [1] => Array
                            (
                                [AttributeID] => 1548953
                                [Value] => John
                            )

                        [2] => Array
                            (
                                [AttributeID] => 1548954
                                [Value] => Doe
                            )

                        [3] => Array
                            (
                                [AttributeID] => 1550052
                                [Value] => 1
                            )

                    )

            )

    )

[ProfileUpdateType] => Overwrite
[ExternalEventIDs] => 
[OverrideUnsubscribe] => 1
)

但是,这最终不会产生预期的结果,而是:

Request = <?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://webservices.listrak.com/v31/">
    <env:Header>
        <ns1:WSUser>
            <ns1:UserName>user</ns1:UserName>
            <ns1:Password>pw</ns1:Password>
        </ns1:WSUser>
    </env:Header>
    <env:Body>
        <ns1:SetContact>
            <ns1:WSContact>
                <ns1:EmailAddress>xxx@example.com</ns1:EmailAddress>
                <ns1:ListID>26444</ns1:ListID>
            </ns1:WSContact>
            <ns1:ProfileUpdateType>Overwrite</ns1:ProfileUpdateType>
            <ns1:ExternalEventIDs></ns1:ExternalEventIDs>
            <ns1:OverrideUnsubscribe>true</ns1:OverrideUnsubscribe>
        </ns1:SetContact>
    </env:Body>
</env:Envelope>

(注意:没有 ContactProfileAttribute)

参考:

4

1 回答 1

3

ContactProfileAttribute元素太深一层。尝试:

$params = array(
    'WSContact' => array(
        'EmailAddress' => $email,
        'ListID' => $listId,
        'ContactProfileAttribute' => $attrs
    ),
    'ProfileUpdateType' => 'Overwrite',
    'ExternalEventIDs' => "",
    'OverrideUnsubscribe' => TRUE,
);
于 2012-04-27T14:48:36.030 回答