Docusign通过电子邮件请求签名 - base64文件内容中的错误

时间:2017-07-04 20:53:04

标签: base64 docusignapi

我正在向Docusign API提出一些请求,并且我收到了错误消息{" errorCode":" UNSPECIFIED_ERROR"," message&# 34;:" Base-64字符数组或字符串的长度无效。"当我试图通过电子邮件方式发送电子签名请求时发送文件。

我在请求正文中发送的以下JSON:

{
"documents": [
    {
        "documentBase64": "base64 encoded file...",
        "documentId": "1",
        "fileExtension": "pdf",
        "name": "FILENAME.pdf"
    }
],
"emailSubject": "Assinatura de documento requerida",
"recipients": {
    "signers": [
        {
            "email": "dfpdocusignteste@gmail.com",
            "name": "DiegoLopes",
            "recipientId": "1",
            "routingOrder": "1",
            "tabs": {
                "dateSignedTabs": [
                    {
                        "anchorString": "signer1date",
                        "anchorYOffset": "-6",
                        "fontSize": "Size12",
                        "name": "Date Signed",
                        "recipientId": "1",
                        "tabLabel": "date_signed"
                    }
                ],
                "fullNameTabs": [
                    {
                        "anchorString": "signer1name",
                        "anchorYOffset": "-6",
                        "fontSize": "Size12",
                        "name": "Full Name",
                        "recipientId": "1",
                        "tabLabel": "Full Name"
                    }
                ],
                "signHereTabs": [
                    {
                        "anchorString": "signer1sig",
                        "anchorUnits": "mms",
                        "anchorXOffset": "0",
                        "anchorYOffset": "0",
                        "name": "Please sign here",
                        "optional": "false",
                        "recipientId": "1",
                        "scaleValue": 1,
                        "tabLabel": "signer1sig"
                    }
                ]
            }
        }
    ]
},
"status": "sent"

}

一些其他信息。我通过asp经典调用来做这个请求。它已经正常工作以获取登录信息和令牌数据。这就是我发送请求的方式。

<%
response.ContentType="application/json"

dim token
dim baseUrl
dim usrName
dim usrPwd
dim usrIntegKey
dim receiptName
dim receiptEmail
dim docName
dim docContent

usrName     = request.QueryString("username")
usrPwd          = request.QueryString("password")
usrIntegKey     = request.QueryString("integratorKey")
token           = request.QueryString("token")
baseUrl         = request.QueryString("baseUrl")
receiptName     = request.form("receiptName")
receiptEmail    = request.form("receiptEmail")
docName         = request.form("docToSign")
docContent      = replace(request.form("docContent"),"+", " ")


dataSent = ""
dataSent = dataSent & "{" & chr(13)
dataSent = dataSent & """documents"": [" & chr(13)
dataSent = dataSent & "{" & chr(13)
dataSent = dataSent & """documentBase64"": """ & docContent & """," & chr(13)
dataSent = dataSent & """documentId"": ""1""," & chr(13)
dataSent = dataSent & """fileExtension"": ""pdf""," & chr(13)
dataSent = dataSent & """name"": ""NDA.pdf""" & chr(13)
dataSent = dataSent & "}" & chr(13)
dataSent = dataSent & "]," & chr(13)
dataSent = dataSent & """emailSubject"": ""Assinatura de documento requerida""," & chr(13)
dataSent = dataSent & """recipients"": {" & chr(13)
dataSent = dataSent & """signers"": [" & chr(13)
dataSent = dataSent & "{" & chr(13)
dataSent = dataSent & """email"": """ & receiptEmail &"""," & chr(13)
dataSent = dataSent & """name"": """ & receiptName & """," & chr(13)
dataSent = dataSent & """recipientId"": ""1""," & chr(13)
dataSent = dataSent & """routingOrder"": ""1""," & chr(13)
dataSent = dataSent & """tabs"": {" & chr(13)
dataSent = dataSent & """dateSignedTabs"": [" & chr(13)
dataSent = dataSent & "{" & chr(13)
dataSent = dataSent & """anchorString"": ""signer1date""," & chr(13)
dataSent = dataSent & """anchorYOffset"": ""-6""," & chr(13)
dataSent = dataSent & """fontSize"": ""Size12""," & chr(13)
dataSent = dataSent & """name"": ""Date Signed""," & chr(13)
dataSent = dataSent & """recipientId"": ""1""," & chr(13)
dataSent = dataSent & """tabLabel"": ""date_signed""" & chr(13)
dataSent = dataSent & "}," & chr(13)
dataSent = dataSent & "]," & chr(13)
dataSent = dataSent & """fullNameTabs"": [" & chr(13)
dataSent = dataSent & "{" & chr(13)
dataSent = dataSent & """anchorString"": ""signer1name""," & chr(13)
dataSent = dataSent & """anchorYOffset"": ""-6""," & chr(13)
dataSent = dataSent & """fontSize"": ""Size12""," & chr(13)
dataSent = dataSent & """name"": ""Full Name""," & chr(13)
dataSent = dataSent & """recipientId"": ""1""," & chr(13)
dataSent = dataSent & """tabLabel"": ""Full Name""" & chr(13)
dataSent = dataSent & "}" & chr(13)
dataSent = dataSent & "]," & chr(13)
dataSent = dataSent & """signHereTabs"": [" & chr(13)
dataSent = dataSent & "{" & chr(13)
dataSent = dataSent & """anchorString"": ""signer1sig""," & chr(13)
dataSent = dataSent & """anchorUnits"": ""mms""," & chr(13)
dataSent = dataSent & """anchorXOffset"": ""0""," & chr(13)
dataSent = dataSent & """anchorYOffset"": ""0""," & chr(13)
dataSent = dataSent & """name"": ""Please sign here""," & chr(13)
dataSent = dataSent & """optional"": ""false""," & chr(13)
dataSent = dataSent & """recipientId"": ""1""," & chr(13)
dataSent = dataSent & """scaleValue"": 1," & chr(13)
dataSent = dataSent & """tabLabel"": ""signer1sig""" & chr(13)
dataSent = dataSent & "}" & chr(13)
dataSent = dataSent & "]" & chr(13)
dataSent = dataSent & "}" & chr(13)
dataSent = dataSent & "}" & chr(13)
dataSent = dataSent & "]" & chr(13)
dataSent = dataSent & "}," & chr(13)
dataSent = dataSent & """status"": ""sent""" & chr(13)
dataSent = dataSent & "}"


Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.open "POST", baseUrl & "/envelopes", False


HttpReq.SetRequestHeader "Authentication", "Bearer " & token
HttpReq.SetRequestHeader "Accept", "application/json"
HttpReq.SetRequestHeader "Content-type", "application/json"

HttpReq.SetRequestHeader "X-DocuSign-Authentication", "{ ""Username"": """ & usrName & """, ""Password"": """ & usrPwd & """, ""IntegratorKey"": """ & usrIntegKey & """ }"

response.Write(dataSent)

HttpReq.send(dataSent)

'response.Write(HttpReq.ResponseText)

%GT;

我已经计算过,编码的值是有效的base64内容。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

我在我的机器上使用一个简单的PDF测试文件进行了测试...这是编码文件内容的JS函数:

var handleFileSelect = function(evt) {
var files = evt.target.files;
var file = files[0];

if (files && file) {
    var reader = new FileReader();

    reader.onload = function(readerEvt) {
        var binaryString = readerEvt.target.result;
        document.getElementById("hidden_doc").value = btoa(binaryString);
    };

    reader.readAsBinaryString(file);
}
var fullPath = document.getElementById('document').value;
if (fullPath) {
    var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/'));
    fileName = fullPath.substring(startIndex);
    if (fileName.indexOf('\\') === 0 || fileName.indexOf('/') === 0) {
        fileName = fileName.substring(1);
    }
}   

};

另外,如您所见,我有一个文件输入类型来选择文件:

<input type="file" id="document" accept=".pdf"/>

答案 1 :(得分:0)

我已经解决了这个问题。我的base64功能错了。

现在我正在使用以下功能,它运行正常:

function previewFile() {
var preview = document.getElementById("hidden_doc");
var file    = document.querySelector('input[type=file]').files[0];
var reader  = new FileReader();

reader.addEventListener("load", function () {
    preview.value = reader.result.split(',')[1];
}, false);

if (file) {
    reader.readAsDataURL(file);
}

var fullPath = document.getElementById('document').value;
if (fullPath) {
    var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/'));
    fileName = fullPath.substring(startIndex);
    if (fileName.indexOf('\\') === 0 || fileName.indexOf('/') === 0) {
        fileName = fileName.substring(1);
    }
}   

}

感谢大家的帮助。