Skip to content

BUG: Not able to get embedded signing url when not passing a client user id to the request #225

@samuelhgf

Description

@samuelhgf

Hi, I'm using the library inside a Laravel project where I'm trying to generate the signing url for a specific signer.
Before this, the envelope is created using the api as well, calling the createSenderView endpoint, passing all of the envelope definitions.

TL;DR

The createRecipientView endpoint only works passing the client_user_id correct. The same that was passed within the envelope creation endpoint (createRecipientView).


Since I'm using a template_id, I also pass the Templates Roles to the envelope definitions. Inside the templates roles I can pass the client_user_id, but if the person that is finishing the envelope deletes the signers and creates new ones even with the same data (Name and Email) the client_user_id will be null. And with this field null, when I try to get the embedded signing url, calling the createRecipientView, passing the signer's name, email and client_user_id = null returned by DocuSign, the loaded envelope does not have the signature field, seems to be in a review mode.
I also tried using the user_id from DocuSign and got the same thing.

Creating the preview and send envelope url

$envelopeSigners = [
            resolve(TemplateRole::class)
                ->setRoleName('signer')
                ->setClientUserId($sender->id)
                ->setName($sender->name)
                ->setEmail($sender->email),
        ];
        $clientId = null;

        foreach ($signers as $signer) {
            if (data_get($signer, 'is_client')) {
                $clientId = data_get($signer, 'user_id');
            }

            $envelopeSigners[] = resolve(TemplateRole::class)
                ->setRoleName('signer')
                ->setClientUserId(data_get($signer, 'user_id'))
                ->setName(data_get($signer, 'name'))
                ->setEmail(data_get($signer, 'email'));
        }

        $envelopeDefinition = resolve(EnvelopeDefinition::class)
            ->setStatus('created')
            ->setTemplateId($template->template_id)
            ->setTemplateRoles($envelopeSigners);

        $customFields = [];

        $senderUserIdField = app(TextCustomField::class);
        $senderUserIdField->setName(CustomFieldsKeys::SenderUserIdKey)
            ->setShow('false')
            ->setValue(user()->id);
        $customFields[] = $senderUserIdField;

        $meetingIdFields = app(TextCustomField::class);
        $meetingIdFields->setName(CustomFieldsKeys::MeetingIdCustomFieldKey)
            ->setShow('false')
            ->setValue($meeting->id);
        $customFields[] = $meetingIdFields;

        if ($clientId) {
            $clientIdField = app(TextCustomField::class);
            $clientIdField->setName(CustomFieldsKeys::ClientIdCustomFieldKey)
                ->setShow('false')
                ->setValue($clientId);

            $customFields[] = $clientIdField;
        }

        $envelopeField = app(CustomFields::class);
        $envelopeField->setTextCustomFields($customFields);

        $envelopeDefinition->setCustomFields($envelopeField);

        try {
            $response = $this->envelopesApi
                ->createEnvelope(
                    account_id: $this->accountId,
                    envelope_definition: $envelopeDefinition,
                );

            $options = app(ReturnUrlRequest::class);
            $options->setReturnUrl(route('docusign.envelope-callback'));

            return $this->envelopesApi->createSenderView($this->accountId, $response->getEnvelopeId(), $options)->getUrl();

Creating the embedded signing url

$request = app(RecipientViewRequest::class)
            ->setAuthenticationMethod('None')
            ->setEmail($signer->email)
            ->setUserName($signer->name)
            ->setClientUserId($signer->docusign_user_id) // If that's null it never works
            ->setReturnUrl($returnUrl)
            ->setFrameAncestors([
                config('app.url'),
                config('services.docusign.signing_link_frame_ancestor'),
            ])
            ->setMessageOrigins([
                config('services.docusign.signing_link_frame_ancestor'),
            ]);
        
        try {

            return $this->envelopesApi
                ->createRecipientView(
                    account_id: $this->accountId,
                    envelope_id: $envelope->envelope_id,
                    recipient_view_request: $request,
                )
                ->getUrl();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions