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

无需OAuth,如何生成DocuSign Clickwrap已签署协议的客户下载链接

解决方案:无需客户操作API令牌的DocuSign签署合同下载方案

核心思路

所有需要DocuSign API鉴权的操作都在你的后端服务器完成,前端只负责触发下载请求,客户全程无需接触API令牌或DocuSign的接口细节。

具体实现方案

方案1:后端预生成临时下载链接

  • 当客户通过前端JS完成签署后,通过两种方式获取agreementId:
    • 前端监听DocuSign Clickwrap的签署成功回调,把agreementId传给后端
    • 配置DocuSign Webhook,签署完成后自动把agreementId等信息推送到你的后端接口
  • 后端使用自己的集成密钥(Integration Key),通过JWT或密码授权模式获取DocuSign API令牌(全程后端操作,无前端暴露)
  • 调用DocuSign的下载接口/clickapi/v1/accounts/{accountId}/clickwraps/{clickwrapId}/agreements/{agreementId}/download,获取签署文件的流
  • 将文件存储到你的服务器或云存储,生成带有效期的公开下载链接,返回给前端展示给客户

方案2:后端代理下载接口

  • 前端给客户展示「下载合同」按钮,点击后请求你自己的后端接口(例如/api/download-docusign),携带agreementId参数
  • 后端收到请求后,先完成DocuSign API令牌的获取(后端内部处理)
  • 调用DocuSign下载接口拿到文件流,直接将文件作为HTTP响应返回给前端,浏览器自动触发下载

代码示例

后端(Node.js 示例)

const axios = require('axios');

// 获取DocuSign API令牌(JWT模式,需提前配置集成密钥与私钥)
async function getDocusignAccessToken() {
  // 此处省略JWT构造逻辑,参考DocuSign官方文档生成合法的JWT断言
  const jwtAssertion = '你的JWT断言内容';
  const tokenRes = await axios.post('https://account-d.docusign.com/oauth/token', {
    grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
    assertion: jwtAssertion
  });
  return tokenRes.data.access_token;
}

// 代理下载接口
async function handleDownloadRequest(req, res) {
  const { agreementId, accountId, clickwrapId } = req.query;
  const accessToken = await getDocusignAccessToken();

  // 调用DocuSign下载接口
  const downloadRes = await axios.get(
    `https://demo.docusign.net/clickapi/v1/accounts/${accountId}/clickwraps/${clickwrapId}/agreements/${agreementId}/download`,
    {
      headers: { Authorization: `Bearer ${accessToken}` },
      responseType: 'stream'
    }
  );

  // 设置响应头触发浏览器下载
  res.setHeader('Content-Disposition', 'attachment; filename="已签署合同.pdf"');
  downloadRes.data.pipe(res);
}

// 注册路由(示例用Express)
// app.get('/api/download-docusign', handleDownloadRequest);

前端触发下载示例

// 假设签署成功后已获取agreementId
const agreementId = '客户签署对应的agreementId';
const downloadBtn = document.getElementById('download-agreement-btn');

downloadBtn.addEventListener('click', () => {
  // 跳转到后端代理接口,触发下载
  window.location.href = `/api/download-docusign?agreementId=${agreementId}&accountId=你的DocuSign账户ID&clickwrapId=你的ClickwrapID`;
});

关键注意事项

  • 绝对禁止将DocuSign的集成密钥、API密钥或令牌暴露给前端,避免账户安全风险
  • 可给临时下载链接设置有效期(如1小时),防止链接被滥用
  • 若使用Webhook,需验证DocuSign的请求签名,确保请求来自官方,避免伪造数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:25:23