You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DocuSign API实现Google Drive自动认证(GAS场景)

解决DocuSign访问Google Drive PDF的未认证问题

是的,你完全可以借助Google API的刷新令牌实现自动认证,让DocuSign能够安全访问你的Google Drive私有PDF文件,无需手动登录Google账号。下面是具体的解决方案和代码修改步骤:

问题根源

你遇到的EXTERNAL_DOC_SERVICE_ERROR错误,本质是DocuSign尝试访问Google Drive的PDF文件时,该文件处于私有状态,且没有提供有效的Google认证凭据,导致Google拒绝了未登录的访问请求。直接将文件设为公开共享存在安全风险,而使用OAuth2的刷新令牌可以让DocuSign通过临时访问令牌安全访问私有文件。

实现步骤

1. 准备Google OAuth2凭据

  • 前往Google Cloud Console,创建或选择你的项目,启用Google Drive API
  • 创建一个OAuth客户端ID,应用类型选择「桌面应用」(适合脚本类应用场景)
  • 通过OAuth授权流程获取刷新令牌和初始访问令牌(可以用Google Apps Script的OAuth2库简化这个过程,也可以手动通过授权码交换)

2. 修改Google Apps Script代码

我们需要在脚本中添加OAuth2认证逻辑,获取短期访问令牌,然后构造带有访问令牌的Google Drive文件下载URL,传给DocuSign的remoteUrl参数。

完整修改后的代码

// 先添加OAuth2库:脚本编辑器→资源→库,输入ID:1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF,选最新版本
var OAUTH2_LIB_ID = "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF";

function getGoogleAccessToken() {
  // 建议把这些敏感信息存在脚本属性里(文件→项目属性→脚本属性),不要硬编码
  const clientId = "YOUR_GOOGLE_CLIENT_ID";
  const clientSecret = "YOUR_GOOGLE_CLIENT_SECRET";
  const refreshToken = "YOUR_GOOGLE_REFRESH_TOKEN";
  
  // 初始化OAuth2服务,获取访问令牌
  const service = OAuth2.createService("DriveAccess")
    .setTokenUrl("https://oauth2.googleapis.com/token")
    .setClientId(clientId)
    .setClientSecret(clientSecret)
    .setRefreshToken(refreshToken);
  
  if (service.hasAccess()) {
    return service.getAccessToken();
  } else {
    throw new Error("获取Google访问令牌失败: " + service.getLastError());
  }
}

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]; 

  // 从Drive链接中提取文件ID
  const docUrl = quotelinks[0];
  const fileId = docUrl.match(/[-\w]{25,}/)[0]; // 正则匹配Drive文件ID
  
  // 获取Google Drive访问令牌
  const accessToken = getGoogleAccessToken();
  
  // 构造带访问令牌的私有文件下载URL,DocuSign可通过这个URL认证访问
  const remoteUrl = `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media&access_token=${accessToken}`;

  var url = "https://demo.docusign.net/restApi/v2/accounts/MYACCOUNTID/envelopes"; 
  var payload = { 
    "documents": [ 
      { 
        "documentId": "1", 
        "fileExtension": "pdf", 
        "name": "NAMEOFDOC", 
        "remoteUrl": remoteUrl 
      } 
    ], 
    "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) 
  }; 

  try {
    const response = UrlFetchApp.fetch(url, options);
    Logger.log("信封发送成功: " + response.getContentText());
  } catch (e) {
    Logger.log("发送信封出错: " + e.toString());
  }
}

3. 关键注意事项

  • OAuth2库使用:必须先在脚本编辑器中添加OAuth2库,否则代码会报错。
  • 敏感信息保护:客户端ID、密钥、刷新令牌都是敏感信息,不要直接写在代码里,建议存在脚本属性中,避免泄露。
  • 权限范围:获取刷新令牌时,要请求https://www.googleapis.com/auth/drive.readonly权限,确保令牌有读取Drive文件的权限。
  • 访问令牌有效期:Google访问令牌有效期为1小时,脚本会自动用刷新令牌获取新的令牌,无需手动操作。

这样修改后,DocuSign就能通过带有有效访问令牌的URL,安全访问你的私有Google Drive PDF文件,解决未认证的错误问题。

内容的提问来源于stack exchange,提问作者Alex James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:28:30