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

如何通过DocuSign API生成合同与电子签名?求PHP集成方案

PHP 集成 DocuSign API 实用指南

核心依赖安装

首先通过Composer安装官方PHP SDK:

composer require docusign/esign-client

基础配置与授权

创建配置文件(如docusign_config.php),填入你的账号信息:

<?php
$config = [
    'client_id' => '你的集成密钥',
    'client_secret' => '你的客户端密钥',
    'account_id' => '你的DocuSign账号ID',
    'base_path' => 'https://demo.docusign.net/restapi', // 测试环境,生产环境替换为https://www.docusign.net/restapi
    'redirect_uri' => '你的回调URL'
];
?>

授权流程(获取访问令牌)

<?php
require 'vendor/autoload.php';
require 'docusign_config.php';

$apiClient = new DocuSign\eSign\ApiClient($config['base_path']);
$oauth = $apiClient->getOAuth();

// 生成授权URL
$authUrl = $oauth->getAuthorizationUri(
    $config['client_id'],
    ['signature'],
    $config['redirect_uri'],
    'code'
);

// 实际项目中用header跳转至授权页面
echo '<a href="' . $authUrl . '">授权DocuSign访问</a>';

// 回调页面获取并保存令牌
if (isset($_GET['code'])) {
    $tokenInfo = $oauth->generateAccessToken(
        $config['client_id'],
        $config['client_secret'],
        'authorization_code',
        $_GET['code'],
        $config['redirect_uri']
    );
    $_SESSION['access_token'] = $tokenInfo[0]['access_token'];
}
?>

创建并发送签名请求示例

以下是生成合同并发送给签署人的完整代码:

<?php
require 'vendor/autoload.php';
require 'docusign_config.php';

$apiClient = new DocuSign\eSign\ApiClient($config['base_path']);
$apiClient->setAccessToken($_SESSION['access_token']);

// 定义信封
$envelopeDefinition = new DocuSign\eSign\Model\EnvelopeDefinition();
$envelopeDefinition->setEmailSubject('请签署这份合同');

// 添加本地PDF文档
$document = new DocuSign\eSign\Model\Document();
$document->setDocumentBase64(base64_encode(file_get_contents('合同文件.pdf')));
$document->setName('合同文件.pdf');
$document->setDocumentId('1');
$envelopeDefinition->setDocuments([$document]);

// 添加签署人
$signer = new DocuSign\eSign\Model\Signer();
$signer->setEmail('签署人邮箱@example.com');
$signer->setName('签署人姓名');
$signer->setRecipientId('1');
$signer->setClientUserId('123'); // 嵌入式签署必填参数

// 设置签署位置标签
$signHere = new DocuSign\eSign\Model\SignHere();
$signHere->setDocumentId('1');
$signHere->setPageNumber('1');
$signHere->setRecipientId('1');
$signHere->setXPosition('100');
$signHere->setYPosition('100');

$tabs = new DocuSign\eSign\Model\Tabs();
$tabs->setSignHereTabs([$signHere]);
$signer->setTabs($tabs);

// 绑定收件人到信封
$recipients = new DocuSign\eSign\Model\Recipients();
$recipients->setSigners([$signer]);
$envelopeDefinition->setRecipients($recipients);

// 设置信封状态为发送
$envelopeDefinition->setStatus('sent');

// 调用API发送信封
$envelopesApi = new DocuSign\eSign\Api\EnvelopesApi($apiClient);
$envelopeSummary = $envelopesApi->createEnvelope($config['account_id'], $envelopeDefinition);

echo '信封已发送,ID:' . $envelopeSummary->getEnvelopeId();
?>

嵌入式签署页面生成

若需在自有网站内展示签署页面,而非跳转至DocuSign:

<?php
// 基于上面的代码,获取envelopeId后执行
$recipientViewRequest = new DocuSign\eSign\Model\RecipientViewRequest();
$recipientViewRequest->setReturnUrl('签署完成后的回调URL');
$recipientViewRequest->setAuthenticationMethod('email');
$recipientViewRequest->setEmail('签署人邮箱@example.com');
$recipientViewRequest->setUserName('签署人姓名');
$recipientViewRequest->setClientUserId('123'); // 需与之前signer的clientUserId一致

$viewUrl = $envelopesApi->createRecipientView($config['account_id'], $envelopeSummary->getEnvelopeId(), $recipientViewRequest);

// 跳转至嵌入式签署页面
header('Location: ' . $viewUrl->getUrl());
exit;
?>

常见问题排查

  • 令牌过期:使用刷新令牌重新获取访问令牌,参考SDK中generateAccessToken方法的refresh_token参数
  • 文档上传失败:确保PDF文件已转base64编码,且文件大小未超出平台限制
  • 签署位置错误:调整X/Y坐标和页码,可先在DocuSign测试环境的模板编辑器中确认位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:36:21