首页 > 解决方案 > 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 信封中。

谢谢!

标签: phpsdkdocusignapi

解决方案


弄明白了...张贴在这里以防万一有人感兴趣。谢谢!


  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;
    }


推荐阅读