如何通过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_URIaccount-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
相关产品推荐
相关产品推荐

