我正在向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内容。
有人可以帮我解决这个问题吗?
答案 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);
}
}
}
感谢大家的帮助。