Docusign REST API无法识别base64中的文档

时间:2014-03-31 19:37:42

标签: node.js multipartform-data docusignapi

我们正在尝试使用Docusign的REST API使用documentBase64属性将pdf文档与pdf文档一起发布,但是,它似乎无法识别该文档。

以下是我们使用的参数,data创建了fs.readFile

params = 
    emailSubject: 'Sample Document'
    envelopeTemplateDefinition:
      name: 'Template 1'
    documents: [
      name: 'Document 1'
      documentId: 1
      documentBase64: data.toString('base64')
    ]
    recipients:
      signers: [
        recipientId: 1
        roleName: "Signer 1"
      ,
        recipientId: 2
        roleName: "Signer 2"
      ,
        recipientId: 3
        roleName: "Signer 3"
      ,
        recipientId: 4
        roleName: "Signer 4"
      ,
        recipientId: 0
        roleName: "Signer 0"
      ]

我们正在使用节点的request库来发送POST请求,正确设置了auth标头,并且API确实返回了一个响应,说明模板已成功创建,但是,当我们检查时在Docusign控制台中,它显示模板不包含任何文档。

我们使用类似的方法来创建一个草稿信封,一切正常 - 附加的pdf文档被识别 - 所以我们假设它也适用于模板,但它没有。

我对两个端点之间的不一致行为感到困惑,因此post模板端点不支持documentBase64吗?我是否必须使用multipart / form-data请求?

另外,我们正在使用沙盒帐户进行测试,这会产生任何限制吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

"创建模板"操作当前不支持 documentBase64 属性 - 在使用API​​创建模板时,请求必须是多部分请求(其中第一部分包含JSON请求主体,后面的每个后续部分第一部分代表文件的内容。

在DocuSign REST API指南(https://10226ec94e53f4ca538f-0035e62ac0d194a46695a3b225d72cc8.ssl.cf2.rackcdn.com/rest-api-guide-v2.pdf)中,p197(POST / accounts / {accountId} / templates)上POST模板操作的定义是:

Saves a template definition using a multipart request.

如果您在指南中搜索" documentBase64"您将看到它仅在创建/发送信封的上下文中提及(而不是在创建模板的上下文中,不幸的是)。 " documentBase64"物业是"创建信封"操作,所以也许(希望)DocuSign将在"创建模板"中添加对它的支持。操作很快。

这是一个示例多部分请求正文,它指定了2个文档并使用 AAA 作为边界:

POST https://demo.docusign.net/restapi/v2/accounts/295724/envelopes
X-DocuSign-Authentication: {"Username":"email","Password":"password","IntegratorKey":"key"}
Content-Type: multipart/form-data; boundary=AAA
Accept: application/json
Host: demo.docusign.net
Content-Length: 31476
Expect: 100-continue

--AAA
Content-Type: application/json
Content-Disposition: form-data

JSON_REQUEST_BODY_HERE
--AAA
Content-Type:application/pdf
Content-Disposition: file; filename="ABC.pdf"; documentid=1 

UNENCODED_DOCUMENT_1_BYTES_HERE
--AAA
Content-Type:application/pdf
Content-Disposition: file; filename="DEF.pdf"; documentid=2 

UNENCODED_DOCUMENT_2_BYTES_HERE
--AAA--

创建多部分请求时,请记住换行符很重要(必须按上面所示进行结构化),并且文档字节不能编码。