Ошибка 415 при попытке отправить документ на подпись - из шаблона с использованием Zoho Creator и DocuSign API

Я пытаюсь настроить приложение Zoho Creator, которое будет запрашивать подпись на конверте, созданном из шаблона. Я могу использовать для этого этот инструмент, но когда я пытаюсь сделать то же самое с помощью функции postURL () Zoho Creator, я получаю следующий ответ от DocuSign:

Response Code = 415
Response Text = HTTP Error

Этот пост, похоже, описывает ту же ошибку. Приведенный ответ неясен, и я не могу найти документацию, которая должна была быть обновлена.

Вот некоторые из моих кодов Создателя:

void test3()
{
// Login
username = "XXX";
usernameEmail = "XXX";
password = "XXX";
integratorKey = "XXX";
templateId = "XXX";
authenticateStr = "<DocuSignCredentials><Username>" + username + "</Username><Password>" + password + "</Password><IntegratorKey>" + integratorKey + "</IntegratorKey></DocuSignCredentials>";
loginUrl = "https://demo.docusign.net/restapi/v2/login_information";
loginHeaders = { "X-DocuSign-Authentication" : authenticateStr, "Accept" : "application/json" };
loginGet = getUrl(loginUrl, loginHeaders,false);
loginResponseCode = loginGet.get("responseCode");
loginResponseText = loginGet.get("responseText");          
if (loginResponseCode  !=  "200")
{
    info "Error calling webservice; status is " + loginResponseCode;
}

Создатель не может правильно обработать ответ, поэтому мне нужно очистить его здесь

loginResponseText = loginResponseText.replaceAll("\r\n","");
loginResponseText = loginResponseText.getSuffix("[");
loginResponseText = loginResponseText.getPrefix("]");
loginResponseMap = loginResponseText.toMap();
info loginResponseMap;
baseUrl = loginResponseMap.get("baseUrl");
accountID = loginResponseMap.get(("accountId"));
url = baseUrl + "/envelopes";
headers = map();
headers.put("X-DocuSign-Authentication", "{\"Username\":\"XXX\",\"Password\":\"XXX\",\"IntegratorKey\":\"XXX\"}");
requestBody2 = "{\n \"envelopeDefinition\" : \"{\n  \"-xmlns\" : \"http://www.docusign.com/restapi\",\n =\"xmlns:i\":\"http://www.w3.org/2001/XMLSchema-instance\",\n \"emailSubject\": \"test email subject\",\n  \"emailBlurb\": \"test email blurb\",\n  \"templateId\": \"1D489D22-55D9-4320-8C16-28DE11C4AB09\",\n  \"status\": \"created\",\n  \"messageLock\": \"false\"\n}}";
envelopePOST = postUrl(url,requestBody2,headers,false);
postResponseCode = envelopePOST.get("responseCode");
postResponseText = envelopePOST.get("responseText");
info "envelopePOST = " + envelopePOST;
info "Response Code = " + postResponseCode;
info "Response Text = " + postResponseText;
}

Может ли кто-нибудь из Zoho Creator или DocuSign помочь мне выяснить, что мне нужно сделать, чтобы получить от приложения Creator тот же результат, который я получаю от тестера DocuSign API, на который я ссылался выше?


person Ian Melchior    schedule 20.10.2014    source источник


Ответы (1)


Проблема заключается в типе содержимого вашего запроса и теле запроса, который вы отправляете. По умолчанию, если вы не устанавливаете заголовок Content-Type в вызове API DocuSign, по умолчанию используется application/json. Тело запроса, которое вы устанавливаете ...

requestBody2 = "{\n \"envelopeDefinition\" : \"{\n  \"-xmlns\" : \"http://www.docusign.com/restapi\",\n =\"xmlns:i\":\"http://www.w3.org/2001/XMLSchema-instance\",\n \"emailSubject\": \"test email subject\",\n  \"emailBlurb\": \"test email blurb\",\n  \"templateId\": \"1D489D22-55D9-4320-8C16-28DE11C4AB09\",\n  \"status\": \"created\",\n  \"messageLock\": \"false\"\n}}";

не действует. Похоже, вы используете комбинацию xml и json, которую DocuSign не примет.

Вы прошли через Центр разработчиков DocuSign? Если вы пройдете через раздел Quick Start, он в конечном итоге приведет к разделу API TOOLS, в котором есть два важных инструмента, которые будут здесь очень полезны. Я предполагаю, основываясь на вашем коде, что вы используете Python. Таким образом, ознакомьтесь с пошаговыми руководствами по API, в которых есть образцы кода Python для 9 случаев использования API, включая отправку документа из шаблона:

http://iodocs.docusign.com/apiwalkthroughs

Например, вот код Python для отправки документа из шаблона:

# DocuSign API Walkthrough 01 (PYTHON) - Request Signature from Template
import sys, httplib2, json;

# Enter your info:
username = "***";
password = "***";
integratorKey = "***";
templateId = "***";

authenticateStr = "<DocuSignCredentials>" \
                    "<Username>" + username + "</Username>" \
                    "<Password>" + password + "</Password>" \
                    "<IntegratorKey>" + integratorKey + "</IntegratorKey>" \
                    "</DocuSignCredentials>";
#
# STEP 1 - Login
#
url = 'https://demo.docusign.net/restapi/v2/login_information'   
headers = {'X-DocuSign-Authentication': authenticateStr, 'Accept': 'application/json'}
http = httplib2.Http()
response, content = http.request(url, 'GET', headers=headers)

status = response.get('status');
if (status != '200'): 
    print("Error calling webservice, status is: %s" % status); sys.exit();

# get the baseUrl and accountId from the response body
data = json.loads(content);
loginInfo = data.get('loginAccounts');
D = loginInfo[0];
baseUrl = D['baseUrl'];
accountId = D['accountId'];

#--- display results
print ("baseUrl = %s\naccountId = %s" % (baseUrl, accountId));

#
# STEP 2 - Create an Envelope with a Recipient and Send...
#

#construct the body of the request in JSON format  
requestBody = "{\"accountId\": \"" + accountId + "\"," + \
                "\"status\": \"sent\"," + \
                "\"emailSubject\": \"API Call for sending signature request from template\"," + \
                "\"emailBlurb\": \"This comes from Python\"," + \
                "\"templateId\": \"" + templateId + "\"," + \
                "\"templateRoles\": [{" + \
                "\"email\": \"" + username + "\"," + \
                "\"name\": \"Name\"," + \
                "\"roleName\": \"Role\" }] }";

# append "/envelopes" to baseURL and use in the request
url = baseUrl + "/envelopes";
headers = {'X-DocuSign-Authentication': authenticateStr, 'Accept': 'application/json'}
http = httplib2.Http()
response, content = http.request(url, 'POST', headers=headers, body=requestBody);
status = response.get('status');
if (status != '201'): 
    print("Error calling webservice, status is: %s" % status); sys.exit();
data = json.loads(content);
envId = data.get('envelopeId');

#--- display results
print ("Signature request sent!  EnvelopeId is: %s\n" % envId);
person Ergin    schedule 21.10.2014