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

DocuSign PHP多收件人批量发送问题:仅成功发送给单个收件人且无报错

解决DocuSign PHP SDK多收件人发送问题

嘿,我看了你现在的代码,问题大概率出在几个容易忽略的细节上——尤其是路由顺序的设置和签署标签的关联逻辑。让我帮你调整代码,同时给你一个完整的多收件人批量发送示例:

问题分析

  1. 路由顺序不合理:你第一个签署人的路由顺序设为了5,后续从6开始递增,这会让DocuSign误以为前面还有未配置的收件人,逻辑上非常容易出错,应该从1开始顺序递增。
  2. 签署标签重复绑定:你给所有签署人都绑定了完全相同的两个SignHere标签,如果文档里的锚点只出现一次,只有第一个匹配的签署人能拿到签署任务,其他签署人因为没有需要完成的操作,DocuSign可能不会给他们发送邮件。
  3. 抄送人未正确定义:代码里的$cc1-$cc4没有实例化,这可能导致静默错误,影响收件人配置。

修正后的完整示例代码

// 初始化签署人数组
$signers = [];

// 第一个签署人(主签署人)
$signer1 = new \DocuSign\eSign\Model\Signer([
    'email' => $this->email_signatario,
    'name' => $this->nome_signatario,
    'recipient_id' => "1",
    'routing_order' => "1" // 路由顺序从1开始,保证流程正常
]);
array_push($signers, $signer1);

// 批量添加额外签署人
$routingOrder = 2;
foreach ($this->emails_adicionais as $endereco_adicional) {
    $signer = new \DocuSign\eSign\Model\Signer([
        'email' => $endereco_adicional,
        'name' => $this->nome_signatario . "_" . $routingOrder,
        'recipient_id' => (string)$routingOrder, // ID要唯一且和路由顺序对应
        'routing_order' => (string)$routingOrder
    ]);
    array_push($signers, $signer);
    $routingOrder++;
}

// 为每个签署人分配专属的签署标签
foreach ($signers as $signer) {
    // 用签署人ID匹配文档中的专属锚点,比如*signature_1*、*signature_2*
    $signHere = new \DocuSign\eSign\Model\SignHere([
        'anchor_string' => "*signature_" . $signer->getRecipientId() . "*",
        'anchor_units' => 'pixels',
        'anchor_y_offset' => '10',
        'anchor_x_offset' => '20'
    ]);
    
    // 将标签绑定到当前签署人
    $tabs = new \DocuSign\eSign\Model\Tabs([
        'sign_here_tabs' => [$signHere]
    ]);
    $signer->setTabs($tabs);
}

// 正确定义抄送人(示例,可根据实际需求修改)
$carbonCopies = [];
// 添加第一个抄送人
$cc1 = new \DocuSign\eSign\Model\CarbonCopy([
    'email' => 'cc1@example.com',
    'name' => '抄送收件人1',
    'recipient_id' => "100", // 抄送人ID要和签署人区分开,避免冲突
    'routing_order' => "1" // 可以和签署人同顺序收到副本,或设为最后
]);
array_push($carbonCopies, $cc1);

// 可继续添加更多抄送人
// $cc2 = new \DocuSign\eSign\Model\CarbonCopy([...]);
// array_push($carbonCopies, $cc2);

// 创建收件人集合
$recipients = new \DocuSign\eSign\Model\Recipients([
    'signers' => $signers,
    'carbon_copies' => $carbonCopies,
    'recipient_count' => count($signers) + count($carbonCopies)
]);

// 将收件人绑定到信封定义
$envelope_definition->setRecipients($recipients);

额外注意事项

  • 确保你的文档中存在对应的锚点字符串(比如*signature_1*、*signature_2*),每个签署人对应一个,这样他们才能看到自己的签署位置。
  • 如果需要所有签署人在同一个位置签署,可以给每个签署人的SignHere标签设置不同的recipient_id关联,或者使用DocuSign的“多人签署同一位置”功能,但需要调整标签配置。
  • 路由顺序决定了收件人收到邮件的先后顺序,如果你不需要按顺序签署,可以把所有签署人的路由顺序设为1,这样他们会同时收到邮件。

内容的提问来源于stack exchange,提问作者Juan Carlos Nunes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:47:36