为什么Silverpop不接受我的XML API调用?

时间:2018-08-27 13:04:59

标签: api

我正在对Silverpop API进行一些测试,最终目标是每天晚上上传CSV来更新Silverpop表。我能够成功上传csv和xml文件,并获得API的oauth访问令牌。但是,我的第一个实际通话遇到了麻烦。

这是我要发送的内容:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Envelope>
    <Body>
        <ImportList>
            <MAP_FILE>silverPopTest.xml</MAP_FILE>
            <SOURCE_FILE>silverPopTest.csv</SOURCE_FILE>
            <EMAIL>Nicholas@xxxxxxxxxxxxxxxxxxxx.com</EMAIL>
        </ImportList>
    </Body>
</Envelope>

这是我收到的“故障字符串”:     缺少“ xml”参数

我不确定这是什么意思。

我相信我在文档中包含了此命令的所有必需参数。我尝试过使用和不使用“ xml”行,例如application / xml和text / xml,以及其他各种变体。作为参考,这是我整个通话的代码:

<cfhttp method="POST" url="https://api3.ibmmarketingcloud.com/XMLAPI">
    <cfhttpparam type="header" name="Content-Type" value="application/xml" />
    <cfhttpparam type="header" name="Accept" value="application/xml"> 
    <cfhttpparam type="header" name="Authorization" value="Bearer #accessToken#" />
    <cfhttpparam type="body" value="#xmlBody#">
</cfhttp>

这是错误xml:

<Envelope><Body><RESULT><SUCCESS>false</SUCCESS></RESULT><Fault><Request/><FaultCode/><FaultString>Missing 'xml'parameter</FaultString><detail><error><errorid>52</errorid><module/><class>SP.API</class><method/></error></detail></Fault></Body></Envelope>

这是我的CSV文件:

"userid","Email","firstName","lastName"
"123fdasTEST1asdf321","nicholas+test1@xxxxxxxxxxxxxxxxxxx.com","testFirst 1","testLast 1"
"123fdasTEST2asdf321","nicholas+test2@xxxxxxxxxxxxxxxxxxx.com","testFirst 2","testLast 2"

这是我的“地图”文件:

    <LIST_IMPORT>
        <LIST_INFO>
            <ACTION>ADD_AND_UPDATE</ACTION>
            <LIST_ID>9999999</LIST_ID>
            <FILE_TYPE>0</FILE_TYPE>
            <HASHEADERS>true</HASHEADERS>
        </LIST_INFO>
        <COLUMNS>
            <COLUMN>
                <NAME>userid</NAME>
                <TYPE>0</TYPE>
                <IS_REQUIRED>true</IS_REQUIRED>
                <KEY_COLUMN>true</KEY_COLUMN>
            </COLUMN>
            <COLUMN>
                <NAME>Email</NAME>
                <TYPE>9</TYPE>
                <IS_REQUIRED>true</IS_REQUIRED>
            </COLUMN>
            <COLUMN>
                <NAME>firstName</NAME>
                <TYPE>0</TYPE>
                <IS_REQUIRED>true</IS_REQUIRED>
            </COLUMN>
            <COLUMN>
                <NAME>lastName</NAME>
                <TYPE>0</TYPE>
                <IS_REQUIRED>true</IS_REQUIRED>
            </COLUMN>
        </COLUMNS>
        <MAPPING>
            <COLUMN>
                <INDEX>1</INDEX>
                <NAME>userid</NAME>
                <INCLUDE>true</INCLUDE>
            </COLUMN>
            <COLUMN>
                <INDEX>2</INDEX>
                <NAME>EMAIL</NAME>
                <INCLUDE>true</INCLUDE>
            </COLUMN>
            <COLUMN>
                <INDEX>3</INDEX>
                <NAME>firstName</NAME>
                <INCLUDE>true</INCLUDE>
            </COLUMN>
            <COLUMN>
                <INDEX>4</INDEX>
                <NAME>lastName</NAME>
                <INCLUDE>true</INCLUDE>
            </COLUMN>
        </MAPPING>
    </LIST_IMPORT>

1 个答案:

答案 0 :(得分:0)

在与Silverpop客户支持人员合作之后,他们说我的文件和电话对他们来说一切正常,我们确定了问题所在。 XML声明:

 <?xml version="1.0" encoding="ISO-8859-1"?>

需要成为文档中的第一件事。尽管它似乎在上方,但实际上在它之前有几个制表位。当Silverpop的工具修剪掉这些多余的字符时,ColdFusion会按原样发送它,而Silverpop的服务器只是返回了一般错误。

解决方案是删除这些制表位,或者在发送前修剪xml。