2013-12-13 76 views
0

我們使用Python和請求庫使用REST API V2的Add document方法PDF文件添加到信封的DocuSign:我應該如何爲DocuSign提供PDF?

response = requests.put(
    '<base URL>/envelopes/<envelope ID>/documents/<next document ID>', 
    files={'document': <the PDF file object>}, # <- added to the request's body 
    headers=self._get_headers(
     { 
      'Content-Disposition': 'document; filename="the-file.pdf";' 
     } 
    ), 
    timeout=60 
) 

這在大多數情況下,對我們的工作,不同的是約1 100 PDF文件不通過API接受。發生此問題時,我們告訴用戶通過DocuSign UI直接上傳PDF。這促使我們(在支持的幫助下)查看上面鏈接的Add document頁面上示例請求上方出現的Document params鏈接。該頁面顯示documentBase64屬性和一些其他字段。如何以這種格式提供文檔,並指定所有字段?我是否應該使用files={'document': <JSON-encoded object>}替換上面的電話中的文件?我無法弄清楚如何添加文件,而不是我們目前正在執行的方式。有沒有另一種方法我錯過了?

+0

你見過[DocuSign的API演練](http://iodocs.docusign.com/apiwalkthroughs)嗎?他們有9個常見的REST API使用案例,每個使用6種不同的語言編寫,其中Python就是其中之一。如果你看看演練#4(網格的左中部),你會看到這個例子是如何提供文檔的。我看到的一個區別是在Content-Disposition標題中,將它設置爲'file'而不是'document'。我想知道這是否與偶爾出現的錯誤有關? – Ergin

+0

@Ergin - 謝謝,我確實看到了這些,但他們錯過了「添加文檔」工作流程。 IIRC,DocuSign集成開發總監告訴我,我需要在Content-Disposition標題中提供'<任何名稱,我稱之爲附件>',在我的情況下,它只是''文檔''。命名附件「文檔」似乎不太可能在很短的時間內導致錯誤。 –

+0

噢,好吧,我錯了,理解了Content-Disposition頭的第一個參數,沒有意識到這只是附件的名稱。嗯,那麼他們在通過api上傳時遇到問題的文檔與其他99似乎有用的文檔之間有什麼區別?這些PDF上的字節編碼或安全設置有什麼不同? – Ergin

回答

3

它看起來像現在有兩種不同的方式將文檔添加到使用REST API一個信封草案:

  1. 使用多部分請求,其中第一部分包含了JSON本體和後續部分包含文檔的字節 - 在未編碼格式。 REST API指南(http://www.docusign.com/sites/default/files/REST_API_Guide_v2.pdf)的第136-137頁顯示了此方法的一個示例。

  2. 使用正常請求(即,不是多部分請求),並供給原稿字節在base64編碼格式documentBase64屬性的用於請求中的每個文檔對象的值。 (這看起來是新的一樣,近期2013年12月發佈的API /更新的。)

根據您包含在你的問題的信息,我您正在使用#方法1懷疑。如上所述,這兩種方法的主要區別在於請求的一般結構,ALSO方法#1期望文檔字節是未編碼的,而方法#2期望文檔字節是基於64編碼的。我懷疑你的問題與文件的編碼有關。即如果您使用方法#1並且任何文件都被編碼,您可能會遇到問題。

+0

方法2是否有任何教程? –

+0

我不知道任何教程。但它非常簡單 - 你只需要生成一個base64編碼的文檔字節流,然後把這個字符串放在請求中作爲documentBase64屬性的值。搜索「documentBase64」的REST API指南(https://10226ec94e53f4ca538f-0035e62ac0d194a46695a3b225d72cc8.ssl.cf2.rackcdn.com/rest-api-guide-v2.pdf) - 在p112上,它顯示此屬性是「名稱「和」documentId「在請求的文檔對象中。 「文件」:[{}「documentId」:「NUMBER」, 「name」:「STRING」, 「documentBase64」:「BASE_64_ENCODED_BYTE_STREAM」] –

+0

謝謝。在同一天工作,忘記在這裏更新。我實現了與你所提到的完全相同的方式。 –

相關問題