如何通过Docusign API自动验证Google云端硬盘

时间:2018-01-06 09:37:12

标签: google-apps-script google-drive-api docusignapi

我正在创建一个带有Google应用脚本的应用,以便在我从他们那里收到谷歌表格时将Docusign信封发送给客户(响应将进入带有onFormSubmit触发器的google表格)。我使用Docusign REST API信封方法创建信封,并直接发送给客户。

客户提交表单后,我的Google应用脚本功能会自动创建一个pdf文档并将其放入google驱动器文件夹中。我使用Docusign Envelopes方法和#34; remoteUrl"参数(此处参考文档部分:https://docs.docusign.com/esign/restapi/Envelopes/Envelopes/create/)以指定Docusign将从中创建信封的google驱动器文档ID(pdf)。

显然,这些pdf文件都在我的google驱动器中,而且只是我的,所以我没有理由每天都登录我的Google帐户,这就是我的问题所在。有。当我尝试在不登录谷歌的情况下运行脚本时,Docusign API会抛出此错误消息:

"errorCode": "EXTERNAL_DOC_SERVICE_ERROR",  "message": "An error occurred in the external doc service. NotAuthenticated"

有没有办法可以使用Google的API之一使用刷新令牌来保持登录状态?用外行人的术语来说,这是一种自动身份验证方法"。它必须以某种方式使用Docusign API与我的脚本进行通信。

以下是我当前的Google Apps脚本:

function Docusign()  {
  var ss = SpreadsheetApp.openById('MYSPREADSHEETID');
  var sheet = ss.getSheetByName("SHEET");
  var quotesheet = ss.getSheetByName("SHEET2");
  var Avals = sheet.getRange("A1:A").getValues();
  var Alast = Avals.filter(String).length;
  var basicinfo = sheet.getRange(Alast, 1, 1, 35).getValues()[0];
  var quotelinks = quotesheet.getRange(Alast, 1, 1, 10).getValues()[0];
  var name = (basicinfo[2]);
  var email = (basicinfo[1]);

//This is where the full links of the pdfs are stored
  var doc = (quotelinks[0]);

//"DIGITS" is six digits followed by a colon, it might be private so I put "DIGITS" instead
  var sub = "DIGITS" + doc.substring(32,65);
  Logger.log(sub);


   var url = "https://demo.docusign.net/restApi/v2/accounts/MYACCOUNTID/envelopes";


   var payload =
   {
  "documents": [
    {
      "documentId": "1",
      "fileExtension": "pdf",
      "name": "NAMEOFDOC",
      "remoteUrl": sub
    }
  ],
  "emailSubject": "SUBJECT",
  "recipients": {
    "signers": [
      {
        "email": email,
        "name": name,
        "recipientId": "1",
         "tabs": {
          "signHereTabs": [
            {
              "documentId": "1",
              "pageNumber": "1",
              "tabLabel": "Signature",
              "xPosition": "140",
              "yPosition": "650"
            }
          ],
          "dateTabs": [
            {
              "documentId": "1",
              "pageNumber": "1",
              "tabLabel": "date",
              "xPosition": "420",
              "yPosition": "680"
            }
          ]
        }
      }
    ]
  },
  "status": "sent"
};




   var options =
   {
     "contentType": "application/json",
     "method" : "post",
     "headers": 
  {
    "X-DocuSign-Authentication": "{\"Username\":\"MYUSERNAME\",\"Password\":\"MYPASSWORD\",\"IntegratorKey\":\"MYINTEGRATORKEY\"}",
  },
     "payload" : JSON.stringify(payload)
   };

   UrlFetchApp.fetch(url, options); 
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以尝试一件事,转到DocuSign webApp并对OA Drive执行OAUTH(通过在发送信封时添加来自G Drive的文档),这样您就可以授权DocuSign从Google云端硬盘获取文档代表你。

完成Google OAUTH后,您可以使用DocuSign API使用远程URL从Google云端硬盘获取文档。例如,在下面的通话中,“112805:0B1-EnSmMAIOmc3RhcnRlcl9maWx”是Google云端硬盘中文档的ID。因此,使用DS API,我可以获取文档并将其添加到我的信封创建API调用中。

"documents": [
    {
      "remoteUrl":"112806:0B1-EnSmMAIOmc3RhcnRlcl9maWx",
      "documentId": "1",
      "name": "Getting started"
    }
  ]