我正在使用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] => 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)
参考:
> SoapClient: how to pass multiple elements with same name?
> https://stackoverflow.com/questions/7351034/how-to-make-a-php-soapcall-with-same-parameters
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。