Docusign:使用PHP进行远程签名(电子邮件)后,如何将用户重定向到我的网站?

时间:2019-01-02 18:01:45

标签: laravel laravel-5 laravel-5.4 docusignapi

我正在使用Laravel 5.4和docusign / esign-client 3软件包。在我的网站上,我将用户重定向到Docusign中的文档,然后在他们签名后将他们重定向回我的网站,以下载和更新数据库。同时,我给他们发送电子邮件。我的问题是,如果他们单击电子邮件而不是直接从我的站点登陆文档,如何将它们重定向回我的站点?

我尝试使用方法TemplateRole.setEmbeddedRecipientStartUrl,在将它们发送到文档之前,它确实重定向了我,但是我没有得到有关信封的任何信息。理想情况下,我想将它们直接发送到docusign,然后在单击电子邮件后签名后将它们重定向回我的网站。我该怎么做呢?或什么是正确的代码才能使它正常工作?

      <?php
 //fill in document fields
        $text_tabs = [];
        foreach($custom_fields as $custom_field_name=>$custom_field_value){
            $text_tabs[] = (new \DocuSign\eSign\Model\Text())
                            ->setTabLabel($custom_field_name)
                            ->setValue($custom_field_value);
        }

        $tabs = (new \DocuSign\eSign\Model\Tabs())
                ->setTextTabs($text_tabs);
        //end fill in document fields


        // assign recipient to template role by setting name, email, and role name.  Note that the
        // template role name must match the placeholder role name saved in your account template.
        $templateRole = (new \DocuSign\eSign\Model\TemplateRole())
                        ->setEmail($email)
                        ->setName($name)
                        //->setEmbeddedRecipientStartUrl(route("test1"))
                        ->setEmbeddedRecipientStartUrl("SIGN_AT_DOCUSIGN")//sends user directly to docusign
                        ->setClientUserId($rand_user_id)
                        ->setTabs($tabs)
                        ->setRoleName("Applicant");


        //webhook config
        $envelope_events = [
            (new \DocuSign\eSign\Model\EnvelopeEvent())->setEnvelopeEventStatusCode("sent"),
            (new \DocuSign\eSign\Model\EnvelopeEvent())->setEnvelopeEventStatusCode("delivered"),
            (new \DocuSign\eSign\Model\EnvelopeEvent())->setEnvelopeEventStatusCode("completed"),
            (new \DocuSign\eSign\Model\EnvelopeEvent())->setEnvelopeEventStatusCode("declined"),
            (new \DocuSign\eSign\Model\EnvelopeEvent())->setEnvelopeEventStatusCode("voided"),
            (new \DocuSign\eSign\Model\EnvelopeEvent())->setEnvelopeEventStatusCode("sent"),
            (new \DocuSign\eSign\Model\EnvelopeEvent())->setEnvelopeEventStatusCode("sent")
        ];

        $recipient_events = [
            (new \DocuSign\eSign\Model\RecipientEvent())->setRecipientEventStatusCode("Sent"),
            (new \DocuSign\eSign\Model\RecipientEvent())->setRecipientEventStatusCode("Delivered"),
            (new \DocuSign\eSign\Model\RecipientEvent())->setRecipientEventStatusCode("Completed"),
            (new \DocuSign\eSign\Model\RecipientEvent())->setRecipientEventStatusCode("Declined"),
            (new \DocuSign\eSign\Model\RecipientEvent())->setRecipientEventStatusCode("AuthenticationFailed"),
            (new \DocuSign\eSign\Model\RecipientEvent())->setRecipientEventStatusCode("AutoResponded")
        ];

        /*NOTE *****
        //make sure to add route url to $except in Http\Middleware\VerifyCsrfToken*/
        $event_notification = (new \DocuSign\eSign\Model\EventNotification())
                                ->setUrl(route("webhook"))//url webhook goes to
                                ->setLoggingEnabled("true")
                                ->setRequireAcknowledgment("true")
                                ->setUseSoapInterface("false")
                                ->setIncludeCertificateWithSoap("false")
                                ->setSignMessageWithX509Cert("false")
                                ->setIncludeDocuments("true")
                                ->setIncludeEnvelopeVoidReason("true")
                                ->setIncludeTimeZone("true")
                                ->setIncludeSenderAccountAsCustomField("true")
                                ->setIncludeDocumentFields("true")
                                ->setIncludeCertificateOfCompletion("true")
                                ->setEnvelopeEvents($envelope_events)
                                ->setRecipientEvents($recipient_events);
        //end webhook config







        // instantiate a new envelope object and configure settings
        $envelop_definition = (new \DocuSign\eSign\Model\EnvelopeDefinition())
                                ->setEmailSubject("Docusign Test")
                                ->setTemplateId($template_id)
                                ->setTemplateRoles(array($templateRole))
                                //->setRecipients($recipients)
                                ->setEventNotification($event_notification)
                                ->setStatus("sent");// set envelope status to "sent" to immediately send the signature request


        // optional envelope parameters
        $options = (new \DocuSign\eSign\Api\EnvelopesApi\CreateEnvelopeOptions())
                    ->setCdseMode(null)
                    ->setMergeRolesOnDraft(null);

        // create and send the envelope (aka signature request)
        $envelopeApi = new \DocuSign\eSign\Api\EnvelopesApi($this->api_client);

        $envelop_summary = $envelopeApi->createEnvelope($this->account_id, $envelop_definition, $options);
        if(!empty($envelop_summary)){

            $envelop_summary = json_decode($envelop_summary,true);


            $recipient_view_request = ( new \DocuSign\eSign\Model\RecipientViewRequest() )
                                        ->setReturnUrl( route("return_url_for_document") )
                                        ->setClientUserId($rand_user_id)
                                        ->setAuthenticationMethod("email")
                                        ->setUserName($name)
                                        ->setEmail($email);

            try{
                $signing_view = $envelopeApi->createRecipientView($this->account_id, $envelop_summary["envelopeId"], $recipient_view_request);

                $signing_url                    = $signing_view->getUrl();
                $envelop_summary["signing_url"] = $signing_url;

                return $envelop_summary;

            } catch (\DocuSign\eSign\ApiException $e){
                echo  "Error connecting Docusign : " . $e->getResponseBody()->errorCode . " " . $e->getResponseBody()->message;
            }
        }

1 个答案:

答案 0 :(得分:1)

  

我的问题是,如果他们单击电子邮件而不是直接从我的站点登陆文档,如何将它们重定向回我的站点?

使用embeddedRecipientStartURL。为了使您的应用程序能够理解上下文,请使用documentation中所述的合并字段功能:

  

可以使用合并字段将信息附加到嵌入式收件人的起始URL。可用的合并字段项包括:信封ID,收件人ID,收件人名称,收件人电子邮件和customFields。

例如,使用embeddedRecipientStartURL的{​​{1}}值