mercredi 2 janvier 2019

Docusign: How do I redirect a user after remote signing (email) to my site using PHP?

I'm using Laravel 5.4 and the docusign/esign-client 3 package. On my site I redirect a user to a document in Docusign and then redirect them back to my site to download and update my database after theyve signed it. At the same time I send them an email. My question is how do I redirect them back to my site if they clicked on the email instead of landing on the document directly from my site?

I've tried using the method TemplateRole.setEmbeddedRecipientStartUrl and it does redirect me prior to sending them to the document but I don't get any information about the envelope. Ideally I would like send them directly to docusign and then redirect them back to my site after signing when clicking the email. How do I do this? or whats the correct code to get this working?

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



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire