#c# #echosign
#c# #echosign
Вопрос:
Это мой C#.net код. Когда я создаю временный идентификатор документа, я отправляю документ на подпись, а затем получаю его пустой файл. Я думаю, что временный идентификатор документа создается для пустого файла. Не могли бы вы помочь в этом?
public getDocumentId getTransientDocumentId(string accessToken, string path1,string filename)
{
getDocumentId objGet = new getDocumentId();
var nvc = new NameValueCollection
{
{"File", path1},
{"Content-Type", "multipart/form-data"},
{"Mime-Type", "application/pdf"},
{"File-Name", filename}
};
string boundary = "---------------------------" DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("rn--" boundary "rn");
byte[] boundarybytesF = System.Text.Encoding.ASCII.GetBytes("--" boundary "rn"); // the first time it itereates, you need to make sure it doesn't put too many new paragraphs down or it completely messes up poor webbrick.
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("https://api.na1.echosign.com/api/rest/v5/transientDocuments");
wr.Method = "POST";
wr.Headers["Access-Token"] = string.Format(accessToken);
wr.Headers["Authorization"] = string.Format("Bearer");
wr.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17";
wr.KeepAlive = true;
wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
wr.AllowWriteStreamBuffering = true;
wr.ContentType = "multipart/form-data; boundary=" boundary;
Stream rs = wr.GetRequestStream();
bool firstLoop = true;
string formdataTemplate = "Content-Disposition: form-data; name="{0}"rnrn{1}";
foreach (string key in nvc.Keys)
{
if (firstLoop)
{
rs.Write(boundarybytesF, 0, boundarybytesF.Length);
firstLoop = false;
}
else
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
}
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name="{0}"; filename="{1}"rnContent-Type: {2}rnrn";
string header = string.Format(headerTemplate, "File", new FileInfo(path1).Name, "application/octet-stream");
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(path1, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[fileStream.Length];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
rs.Write(buffer, 0, bytesRead);
}
fileStream.Close();
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("rn--" boundary "--rn");
rs.Write(trailer, 0, trailer.Length);
rs.Close();
try
{
var httpResponse = (HttpWebResponse)wr.GetResponse();
using (var sr = new StreamReader(httpResponse.GetResponseStream()))
{
var result = sr.ReadToEnd();
var jsonSerialization = new JavaScriptSerializer();
var dictObj = jsonSerialization.Deserialize<Dictionary<string, dynamic>>(result);
if (dictObj.Count > 0)
{
objGet.transientDocumentId = Convert.ToString(dictObj["transientDocumentId"]);
objGet.success = "true";
}
else
{
objGet.success = "false";
}
}
}
catch (Exception ex)
{
objGet.success = "false: " ex.Message.ToString();
}
return objGet;
}
Комментарии:
1. Почему бы вам просто не опубликовать соответствующий код вместо добавления всех дополнительных строк с комментариями, которые только затрудняют чтение вашего сообщения?
Ответ №1:
Для вашей цели, когда вы хотите получить документы, которые вы прикрепили к соглашению, используя transientDocument, вы можете получить эти документы с помощью вызова API GET /agreements/{agreementId}/documents .
Но, как говорится в вопросе, «Как получить временные документы». Ну, вы не можете вернуть transientDocument с помощью любого API, причина в том, что transientDocument предназначен для временных целей, обычно используемых для создания единого соглашения, и длится недолго (всего 7 дней). Если вы хотите, чтобы загруженный документ повторно использовался для создания нескольких соглашений и мог получать его документы независимо, вам следует создать libraryDocument вместо этого, используя POST / libraryDocument
Вы можете выполнять вызовы GET API для этих документов библиотеки, чтобы получить различные сведения, такие как documents, AuditTrail и т. Д. Вот ссылка на документацию, по которой вы можете перейти, чтобы получить больше информации о библиотечных документах