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

如何通过DocuSign Connect结合PHP SDK自动下载签署后的文档至服务器?

实现DocuSign已完成信封文档的自动服务器端下载

核心方案:使用JWT OAuth授权模式获取无交互访问令牌

你需要的是服务器端自动操作,无需用户浏览器登录,JWT授权是最适配的方案——只需完成一次初始权限授予,后续即可自动获取访问令牌调用eSignature API。Agreement Actions仅适用于DocuSign CLM预定义应用,和你当前的eSignature信封场景不匹配,无需再尝试。

具体实现步骤(基于PHP SDK)

1. 准备JWT授权所需资源

  • 集成密钥(Integration Key):在DocuSign开发者控制台创建应用时生成。
  • RSA私钥:在开发者控制台为集成密钥生成并下载.pem格式的私钥文件。
  • 授权用户ID:需要授予应用权限的DocuSign用户ID(可在账号设置的"我的信息"中查看)。
  • 首次权限授予:运行代码前需手动访问一次授权URL完成权限确认(仅需一次),URL格式:
    https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature%20impersonation&client_id=YOUR_INTEGRATION_KEY&redirect_uri=YOUR_REDIRECT_URI
    
    沙盒环境用account-d.docusign.com,生产环境替换为account.docusign.com

2. PHP SDK实现JWT获取访问令牌

require __DIR__ . '/vendor/autoload.php';

use DocuSign\eSign\Client\ApiClient;
use DocuSign\eSign\Configuration;
use DocuSign\eSign\Model\OAuthToken;

// 配置参数
$integrationKey = 'YOUR_INTEGRATION_KEY';
$privateKeyPath = 'path/to/your/private.key';
$userId = 'YOUR_USER_ID';
$basePath = 'https://demo.docusign.net/restapi'; // 沙盒环境,生产替换为https://www.docusign.net/restapi

// 初始化配置和API客户端
$config = new Configuration();
$config->setHost($basePath);
$apiClient = new ApiClient($config);

// 读取私钥
$privateKey = file_get_contents($privateKeyPath);

// 获取JWT令牌
try {
    $oauthToken = $apiClient->requestJWTUserToken(
        $integrationKey,
        $userId,
        'account-d.docusign.com', // 沙盒环境,生产替换为account.docusign.com
        $privateKey,
        3600 // 令牌有效期,单位秒
    );
    $accessToken = $oauthToken->getAccessToken();
    $accountId = $oauthToken->getAccountId();
    // 将令牌绑定到API客户端
    $apiClient->setAccessToken($accessToken);
} catch (Exception $e) {
    die("获取令牌失败: " . $e->getMessage());
}

3. 调用API下载信封文档

利用DocuSign Connect返回的信封ID,直接下载文档到服务器:

use DocuSign\eSign\Api\EnvelopeDocumentsApi;

// 从Connect监听器获取的目标信封ID
$envelopeId = 'YOUR_ENVELOPE_ID_FROM_CONNECT';
// 服务器端保存路径
$savePath = '/server/storage/path/document.pdf';

// 初始化文档API实例
$envelopeDocumentsApi = new EnvelopeDocumentsApi($apiClient);

try {
    // 下载合并后的完整文档(传入"combined"表示所有文档合并为单个PDF)
    $documentStream = $envelopeDocumentsApi->getDocument(
        $accountId,
        $envelopeId,
        'combined'
    );
    // 将流写入服务器文件
    file_put_contents($savePath, $documentStream->getContents());
    echo "文档已成功保存到服务器";
} catch (Exception $e) {
    die("下载文档失败: " . $e->getMessage());
}

关键补充

  • 若需下载单个文档,将'combined'替换为具体的文档ID(可从Connect返回的信封信息中提取,或调用EnvelopeDocumentsApi::listDocuments获取完整文档列表)。
  • 生产环境需同步替换域名(account.docusign.com和https://www.docusign.net/restapi)。
  • 确保服务器有私钥文件读取权限和保存路径的写入权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:52:55