DocuSign ColdFusion REST API v2无效的多部分请求边界终止符'--边界--';找不到

DocuSign ColdFusion REST API v2无效的多部分请求边界终止符'--边界--';找不到,rest,coldfusion,docusignapi,Rest,Coldfusion,Docusignapi,我正在尝试使用ColdFusion做一个简单的签名请求。我的代码基于提供的示例,但不断出现相同的错误。我尝试过使用经过验证的XML和JSON,但得到了相同的错误。这是我的密码: <cfset envDef = "<envelopeDefinition xmlns=\'http://www.docusign.com/restapi\'>" & "<emailBlurb>This is a test</emailBlurb>" & "&l

我正在尝试使用ColdFusion做一个简单的签名请求。我的代码基于提供的示例,但不断出现相同的错误。我尝试过使用经过验证的XML和JSON,但得到了相同的错误。这是我的密码:

<cfset envDef = "<envelopeDefinition xmlns=\'http://www.docusign.com/restapi\'>" & 
"<emailBlurb>This is a test</emailBlurb>" & 
"<emailSubject>API Call for adding signature request to document and sending</emailSubject>" & 
"<status>sent</status>" & 
"<documents>" &
"<document>" & 
"<documentId>1</documentId>" & 
"<name>test.txt</name>" & 
"</document>" & 
"</documents>" &
"<recipients>" & 
"<signers>" & 
"<signer>" & 
"<recipientId>1</recipientId>" & 
"<email>cjfennim@earthlink.net</email>" &   
"<name>Charles Fennimore</name>" & 
"<tabs>" & 
"<signHereTabs>" & 
"<signHere>" & 
"<xPosition>100</xPosition>" & 
"<yPosition>100</yPosition>" & 
"<documentId>1</documentId>" & 
"<pageNumber>4</pageNumber>" & 
"</signHere>" &
"</signHereTabs>" & 
"</tabs>" & 
"</signer>" & 
"</signers>" & 
"</recipients>" &  
"</envelopeDefinition>">

<cfset filePath = ExpandPath("../test.txt") />

<!--- read contents of document into the request stream --->
<cffile action="read" file="#filePath#" variable="fileStream" charset="utf-8">

<!--- build the multipart request body --->
<cfset requestBodyStart = "\r\n\r\n--BOUNDARY\r\n" &
            "Content-Type: application/xml\r\n" &
            "Content-Disposition: form-data\r\n" &
            "\r\n" &
            envDef & "\r\n\r\n--BOUNDARY\r\n" & 
            "Content-Type: text/plain\r\n" &
            "Content-Disposition: file; filename='test.txt'; documentId=1; fileExtension='txt'\r\n" &
            "\r\n">

<cfset requestBodyEnd = "\r\n--BOUNDARY--\r\n\r\n">

<cfset requestBody = requestBodyStart & fileStream & requestBodyEnd>

<cfset requestBodyLength = LEN(requestBody)>

<cfhttp url="#theurl#" method="post" multipart="yes">
<cfhttpparam type="header" name="X-DocuSign-Authentication" value="#dsAuthHeader#">
<cfhttpparam type="header" name="Accept" value="application/xml">
<cfhttpparam type="header" name="Content-Type" value="multipart/form-data; boundary=BOUNDARY">
<cfhttpparam type="header" name="Content-Length" value="#requestBodyLength#">
<cfhttpparam type="body" value="#requestBody#">
</cfhttp>

这将生成以下requestBody:

\r\n\r\n--BOUNDARY\r\nContent-Type: application/xml\r\nContent-Disposition: form-data\r\n\r\n<envelopeDefinition xmlns=\'http://www.docusign.com/restapi\'><emailBlurb>This comes from Blue</emailBlurb><emailSubject>API Call for adding signature request to document and sending</emailSubject><status>sent</status><documents><document><documentId>1</documentId><name>test.txt</name></document></documents><recipients><signers><signer><recipientId>1</recipientId><email>cjfennim@earthlink.net</email><name>Charles Fennimore</name><tabs><signHereTabs><signHere><xPosition>100</xPosition><yPosition>100</yPosition><documentId>1</documentId><pageNumber>4</pageNumber></signHere></signHereTabs></tabs></signer></signers></recipients></envelopeDefinition>\r\n\r\n--BOUNDARY\r\nContent-Type: text/plain\r\nContent-Disposition: file; filename='test.txt'; documentId=1; fileExtension='txt'\r\n\r\nTest file\r\n--BOUNDARY--\r\n\r\n
\r\n\r\n--BOUNDARY\r\n内容类型:application/xml\r\n内容处置:表单数据\r\n\r\n这来自BlueAPI调用,用于将签名请求添加到文档和sendingsent1test。txt1cjfennim@earthlink.netCharlesFennimore10010014\r\n\r\n--边界\r\n内容类型:text/plain\r\n内容配置:file;filename='test.txt';documentId=1;fileExtension='txt'\r\n\r\n测试文件\r\n--边界--\r\n\r\n
test.txt文件包含“test file”

我能够使用相同的标题信息获取信封信息,因此我知道这不是问题所在。任何帮助都将不胜感激

使用cfsavecontent创建requestBody也不起作用:

<cfsavecontent variable="requestBody">

--BOUNDARY
Content-Type: application/xml
Content-Disposition: form-data
#envDef#

--BOUNDARY
Content-Type: text/plain
Content-Disposition: file; filename='test.txt'; documentId=1
#fileStream#

--BOUNDARY--

</cfsavecontent>

--边界
内容类型:application/xml
内容配置:表单数据
#环境定义#
--边界
内容类型:文本/纯文本
内容配置:文件;filename='test.txt';documentId=1
#文件流#
--边界--

使用iso-8859-1而不是utf-8编码也不起作用。

这可能与XML名称空间值周围的单引号字符有关。当我将XML定义复制到PHP中并在那里运行时(我没有ColdFusion),它抱怨XML格式不正确。我不得不把单引号改成双引号。不确定这是否是特定于PHP的,但可能值得一试

所以基本上,如果你从

<cfset envDef = "<envelopeDefinition xmlns=\'http://www.docusign.com/restapi\'>" &

这可能不是一个准确的错误,您确定文件字节在结束边界之前正确地追加到了fileStream对象中吗?他所指的演练是,您可以看到在我的帖子中生成的requestBody,看起来文件字节被正确地追加了,毕竟,它只是一个文本文件,里面有“testfile”字样。最近,我还尝试使用cfsavecontent创建requestBody而不是输入\r\n,但这也不起作用。在cfsavecontent尝试中,是否在ColdFusion变量周围包含cfoutput标记
#envDef#
#fileStream#
cfoutput标记位于cfsavecontent标记周围。我尝试了这个方法,但没有解决问题,但感谢您的尝试!您是否可以查看您在此处创建的原始请求输出,以便我们可以检查它?我们正在开发服务器上安装WireShark,该服务器将提供这些信息。我们使用WireShark失败,因为传输是加密的(https)。我们无法将文档与信封一起发送,但我们可以“创建”一个信封,然后向其中添加文档,然后将状态从“已创建”更改为“已发送”。这是一个迂回的方法,但它的工作。
<cfset envDef = "<envelopeDefinition xmlns=\"http://www.docusign.com/restapi\">" &