2016-10-03 54 views
0

这是我的C#.net代码。当我创建临时文档ID然后我发送文档进行签名,然后我收到它的空白文件。我认为临时文件编号为空白文件创建。你能帮忙吗?如何使用adobe echosign api获取瞬态文档ID?

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("\r\n--" + boundary + "\r\n"); 
     byte[] boundarybytesF = System.Text.Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); // 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}\"\r\n\r\n{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}\"\r\nContent-Type: {2}\r\n\r\n"; 
     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("\r\n--" + boundary + "--\r\n"); 
     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; 
    } 
+0

为什么不只是发布相关的代码,而不是添加所有额外的评论行,这些只会让你的帖子更难阅读? – Tavo

+0

检查它Tavo .. –

回答

0

对于你的目的,你想你已经连接到使用transientDocument协议的文件,你可以使用GET /agreements/{agreementId}/documents API调用这些文件。

但正如问题所述“如何获取临时文档”。那么,您无法使用任何API获取transientDocument,原因是transientDocument仅用于临时目的,通常用于创建单个协议并且是短暂的(仅7天)。如果你想被重用上传文件创建多个协议,并能独立获得其文档,您应该创建libraryDocument而是采用POST /libraryDocument

可以做得到这些库文件API调用到那里的各种细节,如文档,审计跟踪等Here是您可以按照以获得对图书馆文档更多理解的文档链接