DocuSign PHP多收件人批量发送问题:仅成功发送给单个收件人且无报错
解决DocuSign PHP SDK多收件人发送问题
嘿,我看了你现在的代码,问题大概率出在几个容易忽略的细节上——尤其是路由顺序的设置和签署标签的关联逻辑。让我帮你调整代码,同时给你一个完整的多收件人批量发送示例:
问题分析
- 路由顺序不合理:你第一个签署人的路由顺序设为了5,后续从6开始递增,这会让DocuSign误以为前面还有未配置的收件人,逻辑上非常容易出错,应该从1开始顺序递增。
- 签署标签重复绑定:你给所有签署人都绑定了完全相同的两个
SignHere标签,如果文档里的锚点只出现一次,只有第一个匹配的签署人能拿到签署任务,其他签署人因为没有需要完成的操作,DocuSign可能不会给他们发送邮件。 - 抄送人未正确定义:代码里的
$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
相关产品推荐
相关产品推荐

