Laravel5.5中DocuSign新增文档AutoPlace模板不生效问题求助
解决DocuSign模板AutoPlace在附加PDF上不生效的问题
嘿,这个AutoPlace失效的坑我之前也踩过!问题出在你添加文档的方式和模板绑定逻辑上,咱们一步步来改:
问题根源分析
你当前是通过envelopeOptions额外添加文档,但模板里的AutoPlace标签是绑定到模板内指定文档ID的。直接新增文档的话,模板的标签找不到对应的目标文档,自然不会生效。另外,你读取PDF的方式也有问题:Storage::disk('local')->url()返回的是文件的访问URL,不是文件内容,这样base64编码后是无效的。
修正步骤
- 正确读取PDF文件内容:用
Storage::get()获取文件原始内容,再进行base64编码。 - 把PDF作为模板的替换文档:在
envelopeDefinition中添加documents数组,指定和模板匹配的documentId(通常模板主文档ID是1),并设置参数让DocuSign知道这个文档要和模板的AutoPlace标签关联。 - 移除
envelopeOptions中的文档配置:因为文档定义要放在envelopeDefinition里才能和模板联动。
修正后的完整代码
$client = new DocuSign\Rest\Client([ 'username' => config("docusign.DOCUSIGN_USERNAME"), 'password' => config("docusign.DOCUSIGN_PASSWORD"), 'integrator_key' => config("docusign.DOCUSIGN_INTEGRATOR_KEY"), ]); $templateRole = $client->templateRole([ 'email' => '<email>', 'name' => '<name>', 'role_name' => 'Client', ]); // 读取PDF文件并base64编码 $pdfContent = Storage::disk('local')->get('mypdf.pdf'); $base64Pdf = base64_encode($pdfContent); $envelopeDefinition = $client->envelopeDefinition([ 'status' => 'sent', 'email_subject' => 'Signature Required On Your Order ', 'template_id' => '<docusign template id>', 'template_roles' => [ $templateRole ], // 关键:添加文档定义,和模板的AutoPlace关联 'documents' => [ [ 'documentId' => '1', // 必须和模板中AutoPlace标签绑定的文档ID一致 'name' => 'mypdf.pdf', 'documentBase64' => $base64Pdf, 'templateLocked' => 'true', // 锁定文档,防止模板被修改 'templateRequired' => 'true' // 标记为模板所需文档 ] ] ]); // 现在不需要envelopeOptions来传文档了,直接创建信封 $envelopeSummary = $client->envelopes->createEnvelope($envelopeDefinition); print_r($envelopeSummary); die();
额外检查项
- 确认你DocuSign模板中的AutoPlace标签,其文档ID设置为
1(和代码中documentId一致)。 - 检查标签的角色名称是否和你代码中
role_name(Client)匹配。
这样修改后,模板里的AutoPlace标签就会正确映射到你上传的mypdf.pdf文档上了!
内容的提问来源于stack exchange,提问作者Mufaddal Kangsawala
相关产品推荐
相关产品推荐

