2013-12-13 4 views
0

Мы используем Python и библиотеку запросов, чтобы добавить файлы PDF в DocuSign конверты с использованием Add document метода REST API v2:Как предоставить 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. Когда эта проблема возникает, мы сообщаем нашим пользователям загружать PDF-файлы непосредственно через пользовательский интерфейс DocuSign, который работает. Это побудило нас (с помощью поддержки) посмотреть ссылку Document params, которая появляется над примером запроса на странице Add document, указанной выше. На странице показан атрибут documentBase64 и ряд других полей. Как я могу предоставить документ в этом формате со всеми указанными полями? Должен ли я заменить файл в моем вызове выше на files={'document': <JSON-encoded object>} или? Я не могу понять, как добавить документ OTHER, чем тот, который мы сейчас делаем. Есть ли другой способ, который мне не хватает?

+0

Вы видели [Пошаговые руководства API DocuSign] (http://iodocs.docusign.com/apiwalkthroughs)? Они имеют 9 распространенных случаев использования REST api, каждый из которых написан на 6 разных языках, причем одним из них является Python. Если вы посмотрите на прохождение №4 (середина слева от сетки), вы увидите, как этот пример предоставляет документ. Одно из различий, которое я вижу, находится в заголовке 'Content-Disposition', устанавливая его' file' вместо 'document'. Мне интересно, если это имеет какое-либо отношение к вашей случайной ошибке? – Ergin

+0

@ Ergin - спасибо, я их видел, но им не хватает рабочего документа «Добавить документ». IIRC, директор по интеграции интеграции DocuSign, сказал мне, что мне нужно предоставить '<любое имя, которое я называю вложением>' в заголовке 'Content-Disposition', что в моем случае является просто« документом ». Кажется маловероятным, что именование вложения '' document ''приведет к ошибке в малой части времени. –

+0

О, хорошо, я неправильно понял первый параметр заголовка Content-Disposition, не понимал, что это просто имя вложения. Хм, есть ли какие-то различия между документами, что у них проблемы с загрузкой через api и другие 99, которые, похоже, работают? Что-нибудь иное в байтах или настройках безопасности в этих PDF-файлах? – Ergin

ответ

3

Похоже, что есть два различных способа добавления документа в проект конверта с REST API:

  1. Использование запроса нескольких частей, где первая часть содержит тело JSON и каждый последующая часть содержит байты документа - в некодированный формат. Пример такого подхода показан на страницах 136-137 руководства API REST (http://www.docusign.com/sites/default/files/REST_API_Guide_v2.pdf).

  2. Используйте обычный запрос (т.е. не из нескольких частей запроса), и подача документов байт в кодировке base64 формат в качестве значения собственности documentBase64 для каждого документа объекта в запросе , (Это выглядит новым, как в недавнем декабре 2013 года выпуска API/обновления.)

Основываясь на информации, вы включены в ваш вопрос, я подозреваю, что вы используете подход # 1. Как описано выше, основное различие между двумя подходами заключается в общей структуре запроса, а ALSO - подход №1 ожидает, что байты документа будут некодированы, а подход №2 ожидает, что байты документа будут закодированы в base64. Я подозреваю, что ваша проблема связана с кодировкой файлов. то есть, если вы используете подход №1, и любой из файлов закодирован, у вас могут возникнуть проблемы.

+0

Есть ли учебник по подходу 2? –

+0

Я не знаю ни одного учебника.Но это очень просто - вам просто нужно создать байт-поток с кодировкой base64 документа, а затем поместить эту строку в запрос как значение свойства documentBase64. Найдите в руководстве REST API (https://10226ec94e53f4ca538f-0035e62ac0d194a46695a3b225d72cc8.ssl.cf2.rackcdn.com/rest-api-guide-v2.pdf) для «documentBase64» - на p112 он показывает, что это свойство является одноранговым свойством " имя "и" documentId "в объекте документа запроса. "документы": [{ "documentId": "NUMBER", "имя": "STRING", "documentBase64": "BASE_64_ENCODED_BYTE_STREAM" }] –

+0

Спасибо. Получил это в тот же день, забыл обновить здесь. Я достиг этого точно так же, как вы упомянули. –

Смежные вопросы