如何在PHP中用embeddedRecipientStartURL:SIGN_AT_DOCUSIGN给嵌入式签署人发抄送邮件?
在PHP中实现DocuSign嵌入式签署人抄送邮件(设置
embeddedRecipientStartURL":"SIGN_AT_DOCUSIGN") 我来给你详细拆解这个需求的实现方案——当你把embeddedRecipientStartURL设为SIGN_AT_DOCUSIGN时,本质是让原本的嵌入式签署人收到DocuSign官方发送的签署邀请邮件,引导他们到DocuSign平台完成签署,同时我们可以配置抄送参数,让指定人员收到抄送邮件。下面是具体的操作步骤和代码示例:
1. 准备DocuSign PHP SDK环境
首先确保你已经安装了DocuSign的官方PHP SDK,用Composer安装最方便:
composer require docusign/esign-client
接下来初始化DocuSign客户端,这里以JWT认证为例(适合服务器端集成),你需要提前准备好JWT应用的密钥、集成密钥、用户ID等信息:
require __DIR__ . '/vendor/autoload.php'; use DocuSign\eSign\Configuration; use DocuSign\eSign\ApiClient; use DocuSign\eSign\Model\EnvelopeDefinition; use DocuSign\eSign\Model\Signer; use DocuSign\eSign\Model\CarbonCopy; use DocuSign\eSign\Model\Document; use DocuSign\eSign\Model\Recipients; use DocuSign\eSign\Model\Tabs; use DocuSign\eSign\Model\SignHere; // 配置DocuSign客户端 $config = new Configuration(); $config->setHost('https://demo.docusign.net/restapi'); // 生产环境替换为https://www.docusign.net/restapi $oauthToken = 'YOUR_JWT_ACCESS_TOKEN'; // 替换为你的JWT访问令牌 $config->addDefaultHeader('Authorization', "Bearer $oauthToken"); $apiClient = new ApiClient($config);
2. 构建包含抄送的信封定义
核心是在签署人配置中设置embeddedRecipientStartURL为SIGN_AT_DOCUSIGN,同时添加抄送收件人到信封的carbonCopyRecipients数组中:
// 1. 准备要签署的文档(这里以本地PDF为例) $document = new Document(); $document->setDocumentBase64(base64_encode(file_get_contents('path/to/your/document.pdf'))); $document->setName('签署文档.pdf'); $document->setDocumentId('1'); // 2. 配置嵌入式签署人 $signer = new Signer(); $signer->setEmail('signer@example.com'); // 签署人邮箱 $signer->setName('签署人姓名'); $signer->setRecipientId('1'); $signer->setClientUserId('YOUR_CLIENT_USER_ID'); // 标识为嵌入式收件人(即使设置了SIGN_AT_DOCUSIGN也需要保留) $signer->setEmbeddedRecipientStartURL('SIGN_AT_DOCUSIGN'); // 关键参数:让签署人收到DocuSign的签署邮件 // 添加签署位置(如果使用模板可以跳过,这里手动指定) $signHere = new SignHere(); $signHere->setDocumentId('1'); $signHere->setPageNumber('1'); $signHere->setXPosition('100'); $signHere->setYPosition('100'); $tabs = new Tabs(); $tabs->setSignHereTabs([$signHere]); $signer->setTabs($tabs); // 3. 配置抄送收件人 $ccRecipient = new CarbonCopy(); $ccRecipient->setEmail('cc@example.com'); // 抄送邮箱 $ccRecipient->setName('抄送收件人姓名'); $ccRecipient->setRecipientId('2'); // 4. 构建收件人集合 $recipients = new Recipients(); $recipients->setSigners([$signer]); $recipients->setCarbonCopyRecipients([$ccRecipient]); // 5. 构建信封定义 $envelopeDefinition = new EnvelopeDefinition(); $envelopeDefinition->setEmailSubject('请签署这份文档'); $envelopeDefinition->setEmailBlurb('这是一份需要你签署的文档,点击链接完成签署即可。'); $envelopeDefinition->setDocuments([$document]); $envelopeDefinition->setRecipients($recipients); $envelopeDefinition->setStatus('sent'); // 设置为发送状态
3. 发送信封并触发邮件
最后调用EnvelopesApi的createEnvelope方法发送信封:
use DocuSign\eSign\Api\EnvelopesApi; $envelopesApi = new EnvelopesApi($apiClient); $accountId = 'YOUR_ACCOUNT_ID'; // 替换为你的DocuSign账户ID try { $envelopeSummary = $envelopesApi->createEnvelope($accountId, $envelopeDefinition); echo "信封已发送,信封ID:" . $envelopeSummary->getEnvelopeId(); } catch (Exception $e) { echo "发送失败:" . $e->getMessage(); }
关键注意事项
clientUserId的作用:即使设置了SIGN_AT_DOCUSIGN,保留clientUserId会将该签署人标记为嵌入式收件人,你仍然可以在后续生成嵌入式签署链接(如果需要),但不影响DocuSign发送签署邮件。- 抄送邮件的触发:只要你正确添加了
carbonCopyRecipients,DocuSign会自动给抄送收件人发送邮件,告知他们有一份文档正在签署,并且会在签署完成后发送签署完成的抄送邮件。 - 环境切换:代码中的
host默认是Demo环境,上线时需要替换为生产环境的地址。 - 权限验证:确保你的JWT集成密钥拥有
envelope:send的权限,否则会发送失败。
内容的提问来源于stack exchange,提问作者Sobinder Glocify
相关产品推荐
相关产品推荐

