php - DocuSign PHP API 从模板创建信封然后添加文档
问题描述
我们正在尝试我们的第一个 DocuSign API 项目并遇到了障碍。我们正在为 DocuSign 使用 PHP API,并尝试从其中包含静态文档的模板创建信封,然后添加另一个自定义生成的文档,然后发送信封。但我们无法弄清楚如何让它发挥作用。
我们最初尝试创建信封,应用模板,然后添加静态文档,然后上传/发送信封,它只发送模板。然后,经过研究,尝试创建信封,应用模板,上传信封,添加静态文档然后发送,也只发送静态页面。
这是我们正在使用的当前代码:
public function send($signer_name,$signer_email, $cc_name, $cc_email, $template_id,$email_subject, $extrapdf = null) {
$this->checkToken();
$sign_here = new \DocuSign\eSign\Model\SignHere([
'anchor_string' => '/sn1/', 'anchor_units' => 'pixels',
'anchor_y_offset' => '10', 'anchor_x_offset' => '20']);
//create roles for signers
$templateRole = new DocuSign\eSign\Model\TemplateRole();
$templateRole->setEmail($signer_email);
$templateRole->setName($signer_name);
$templateRole->setRoleName('Signer 1');
$templateRole->setTabs(new \DocuSign\eSign\Model\Tabs(['sign_here_tabs' => [$sign_here]]));
$templateRole2 = new DocuSign\eSign\Model\TemplateRole();
$templateRole2->setEmail($cc_email);
$templateRole2->setName($cc_name);
$templateRole2->setRoleName('Signer 2');
$templateRole2->setTabs(new \DocuSign\eSign\Model\Tabs(['sign_here_tabs' => [$sign_here]]));
//create envelope definition
$envelop_definition = new DocuSign\eSign\Model\EnvelopeDefinition();
//set template to be used on envelope
$envelop_definition->setTemplateId($template_id);
//set email subject on envelope
$envelop_definition->setEmailSubject($email_subject);
//apply template roles from above to envelope
$envelop_definition->setTemplateRoles(array($templateRole, $templateRole2));
//create new instance of envelope API
$envelopeApi = new DocuSign\eSign\Api\EnvelopesApi(self::$apiClient);
//go ahead and create the envelope at DocuSign
$results = $envelopeApi->createEnvelope(self::$accountID, $envelop_definition);
//get the created envelope Envelope ID
$envelopeId = $results['envelope_id'];
//create another envelope definition.
$envelop_definition = new DocuSign\eSign\Model\EnvelopeDefinition();
//see if we have an additional PDF to add to the envelope created above.
if ($extrapdf != null) {
//if so, base64 encode it.
$extrapdf64 = base64_encode($extrapdf);
//create a new document
$document = new DocuSign\eSign\Model\Document();
$document->setDocumentBase64($extrapdf64);
$document->setName("HomeownershipCounseling.pdf");
$document->setDocumentId("1");
$document->setFileExtension("PDF");
//attach document to envelope definition.
$envelop_definition->setDocuments([$document]);
//update the envelope definition to sent to get DocuSign to actually send the envelope.
$envelop_definition->setStatus('sent');
//apply changes to the original envelope above.
$results = $envelopeApi->update(self::$accountID, $envelopeId, $envelop_definition);
}
return $results;
}
信封确实发送,但它只发送模板中的静态文档。我们期望模板中的静态文档和动态生成的 PDF 都在 DocuSign 信封中。
谢谢!
解决方案
弄明白了...张贴在这里以防万一有人感兴趣。谢谢!
public function send($signer_name,$signer_email, $cc_name, $cc_email, $template_id,$email_subject, $extrapdf = null) {
$this->checkToken();
//create roles for signers
$signer1 = new \DocuSign\eSign\Model\Signer([
'email' => $signer_email, 'name' => $signer_name,
'role_name' => "Signer 1", 'recipient_id' => "1"
]);
$signer2 = new \DocuSign\eSign\Model\Signer([
'email' => $cc_email, 'name' => $cc_name,
'role_name' => "Signer 2", 'recipient_id' => "2"
]);
$recipients_server_template = new \DocuSign\eSign\Model\Recipients([
'signers' => [$signer1,$signer2]]);
//create composite template
$comp_template1 = new \DocuSign\eSign\Model\CompositeTemplate([
'composite_template_id' => "1",
'server_templates' => [
new \DocuSign\eSign\Model\ServerTemplate([
'sequence' => "1", 'template_id' => $template_id])
],
# Add the roles via an inlineTemplate
'inline_templates' => [
new \DocuSign\eSign\Model\InlineTemplate([
'sequence' => "1",
'recipients' => $recipients_server_template])
]
]);
//create new document to be added
$doc1_b64 = base64_encode($extrapdf);
$doc1 = new DocuSign\eSign\Model\Document([
'document_base64' => $doc1_b64,
'name' => 'HomeownershipCounseling', # can be different from
# actual file name
'file_extension' => 'pdf', 'document_id' =>'1']);
$comp_template2 = new DocuSign\eSign\Model\CompositeTemplate([
'composite_template_id' => "2",
# Add the recipients via an inlineTemplate
'inline_templates' => [
new \DocuSign\eSign\Model\InlineTemplate([
'sequence' => "2"])
],
'document' => $doc1]);
//create envelope definition
$envelop_definition = new DocuSign\eSign\Model\EnvelopeDefinition();
//set email subject on envelope
$envelop_definition->setEmailSubject($email_subject);
$envelop_definition->setCompositeTemplates(array($comp_template1, $comp_template2));
$envelop_definition->setStatus('sent');
//create new instance of envelope API
$envelopeApi = new DocuSign\eSign\Api\EnvelopesApi(self::$apiClient);
//go ahead and create the envelope at DocuSign
$results = $envelopeApi->createEnvelope(self::$accountID, $envelop_definition);
//get the created envelope Envelope ID
$envelopeId = $results['envelope_id'];
return $results;
}
推荐阅读
- javascript - javascript步入对象以填充变量
- java - 如何从具有 Apache POI 的公式字段的 Excel 单元格中读取确切的日期格式?
- python - 从 pandas Dataframe 到 15minute Bins 中的数据帧时间序列(按总和行)
- python - 当文件中的任何代码更改时,应运行 Python 自动化脚本
- python - 返回几个月前开始的月份数字列表
- ios - 使用 Uiapplication() 与观察者互动时出现问题
- symfony - Symfony4:了解目录 public/bundles
- swift - “在从主线程访问引擎后,此应用程序正在从后台线程修改自动布局引擎”在 Swift 中
- c# - 将asp.net中的WebService Restful连接到数据库
- java - 有人可以解释一下这个数学方法的作用吗?