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

在Google Apps Script中用JWT认证DocuSign API创建模板报错求助

DocuSign JWT认证创建模板错误修复

核心问题分析

你遇到的“You need to enable JavaScript to run this app”错误,本质是请求路径错误加上认证方式误用导致的,以下是具体问题和修复步骤:

1. API请求URL错误

你把OAuth token获取接口和模板创建接口的路径混在一起了:

  • 错误URL:https://account-d.docusign.com/oauth/token/restapi/v2.1/accounts/<accountid>/templates
  • 正确模板创建URL(演示环境):https://demo.docusign.net/restapi/v2.1/accounts/<accountid>/templates

2. 认证头配置错误

调用DocuSign API时,需要用JWT交换得到的access token通过Authorization头传递,而不是把grant_type和assertion放在请求头里(那是获取token的请求参数)。

3. 请求Content-Type错误

创建模板需要发送JSON格式的请求体,所以Content-Type必须设为application/json,而非application/x-www-form-urlencoded。

4. JWT使用逻辑错误

JWT本身不是access token,你需要先调用OAuth token接口,用JWT交换得到有效的access token,再用这个token调用模板创建接口。

修复后的完整代码

function createTemplate() {
    // 1. 先通过JWT获取access token
    const jwtAssertion = "你的JWT断言"; // 注意:这是生成的JWT,不是access token
    const tokenUrl = "https://account-d.docusign.com/oauth/token";
    const tokenPayload = {
        grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
        assertion: jwtAssertion
    };
    
    const tokenOptions = {
        method: "post",
        contentType: "application/x-www-form-urlencoded",
        payload: tokenPayload,
        muteHttpExceptions: true
    };
    
    const tokenResponse = UrlFetchApp.fetch(tokenUrl, tokenOptions);
    const tokenData = JSON.parse(tokenResponse.getContentText());
    const accessToken = tokenData.access_token; // 得到有效的access token
    
    // 2. 准备模板创建的参数
    const driveFile = DriveApp.getFileById("FILEID");
    const changeorderEncode = Utilities.base64Encode(driveFile.getBlob().getBytes());
    const accountId = "你的账户ID";
    const templateUrl = `https://demo.docusign.net/restapi/v2.1/accounts/${accountId}/templates`;
    
    const templatePayload = {
        "envelopeTemplateDefinition": {
            "name": "TestTemplate5"
        },
        "documents": [
            {
                "documentBase64": changeorderEncode,
                "documentId": "1",
                "fileExtension": "pdf",
                "name": "Change Order Test 5"
            }
        ],
        "emailSubject": "1234 Easy St Change Order",
        "recipients": {
            "signers": [
                {
                    "name": "Recipient Name",
                    "recipientId": "1",
                    "tabs": {
                        "signHereTabs": [
                            {
                                "documentId": "1",
                                "pageNumber": "1",
                                "tabLabel": "Signature2",
                                "xPosition": "407",
                                "yPosition": "650"
                            },
                            {
                                "documentId": "1",
                                "pageNumber": "1",
                                "tabLabel": "Signature",
                                "xPosition": "140",
                                "yPosition": "650"
                            }
                        ],
                        "dateTabs": [
                            {
                                "documentId": "1",
                                "pageNumber": "1",
                                "tabLabel": "date",
                                "xPosition": "140",
                                "yPosition": "715"
                            },
                            {
                                "documentId": "1",
                                "pageNumber": "1",
                                "tabLabel": "date",
                                "xPosition": "407",
                                "yPosition": "715"
                            }
                        ],
                        "textTabs": [
                            {
                                "documentId": "1",
                                "pageNumber": "1",
                                "name": "Project Address",
                                "value": "1234 Easy St, Roseville, CA 95678",
                                "width": 55,
                                "xPosition":"76",
                                "yPosition":"159"
                            }
                        ]
                    }
                }
            ]
        },
        "status": "created"
    };
    
    // 3. 发送模板创建请求
    const templateOptions = {
        method: "post",
        headers: {
            "Authorization": `Bearer ${accessToken}`,
            "Accept": "application/json",
            "Content-Type": "application/json"
        },
        payload: JSON.stringify(templatePayload),
        muteHttpExceptions: true
    };
    
    const templateResponse = UrlFetchApp.fetch(templateUrl, templateOptions);
    Logger.log(templateResponse.getContentText());
}

额外注意事项

  • 确保你的JWT断言包含正确的iss(集成商密钥)、sub(用户ID)、aud(演示环境为account-d.docusign.com)等声明
  • 已完成用户的JWT授权(即用户至少登录过一次你的集成应用进行授权)
  • 替换代码中的你的JWT断言、你的账户ID、FILEID为实际值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:35:47