DocuSign — лучший вариант для нескольких пользователей / контрактов

#php #laravel #docusignapi

Вопрос:

Может ли кто-нибудь указать мне правильный способ настройки документа.

Моя среда-сайт агентов по недвижимости php/laravel/vuejs. У нас есть наш веб-сайт, который используется несколькими агентствами/филиалами.

Наши клиенты (агенты по недвижимости) в настоящее время отправляют по электронной почте PDF-документ, который получает получатель, может распечатать, подписать и вернуть. Или просто распечатайте и отправьте с SAE, чтобы оно было возвращено с подписью.

Мы хотели бы предложить электронную версию, но не уверены, как лучше поступить.

Что мне нужно легко реализовать, так это способ быстро и легко разрешить любому агенту отправлять по электронной почте любому поставщику/арендодателю/арендатору уникальный документ для подписания (договор купли-продажи/договор аренды).

На мой взгляд, я думал, что смогу создать PDF-файл, заполненный пользовательскими полями, в которых уже указаны Поставщик/Арендодатель/Арендатор, области для подписей/дат, и отправить его через документ, чтобы получатель затем подписал.

Я нашел этот вариант для Laravel 8:-

https://blog.codehunger.in/embedded-signing-docusign-laravel/

НО, когда он отправляет PDF-файл, вам нужно войти в систему, добавить каждое поле и затем отправить его.

Учитывая вышесказанное, означает ли это, что всем нашим агентам требуется учетная запись Docusign для входа в систему, внесения изменений в каждый PDF-файл, чтобы добавить подпись/инициалы/дату подписания, чтобы при подписании все стороны (включая агента) получали копию подписанного документа по электронной почте?

Или есть лучший способ реализовать Docusign?

Я не вижу, чтобы опция шаблона работала, так как каждый документ нуждается в заполнении уникальной информацией (адрес/поставщик/арендодатель/арендатор/гарант).

Просто пытаюсь найти лучший способ автоматизировать эту опцию в нашей системе. Или вы бы порекомендовали альтернативную систему?

Надеюсь, я объяснил это достаточно, чтобы кто-нибудь ответил! Если нет, дайте мне знать!

Заранее выпьем за Карла.

Комментарии:

1. Возможно, у вас больше шансов найти ответ на суперпользователя ?

2. @R_Dax спасибо, опубликую это там

Ответ №1:

У нас есть полностью завершенный проект быстрого запуска приложения, в котором показано несколько различных способов, которыми вы могли бы подойти к этому, перечисленных здесь. Создайте учетную запись разработчика, если вы еще этого не сделали, и используйте эту страницу, чтобы выбрать PHP для создания завершенного приложения для вас. Это сэкономит время на настройке ключа интеграции и локальных перенаправлений для вашей машины. Он загрузит PHP-приложение, которое вы можете использовать для шаблонного кода для вашей конкретной интеграции, которую вы собираетесь создать.

Чтобы ответить на ваш конкретный вопрос,

Моя среда-сайт агентов по недвижимости php/laravel/vuejs. У нас есть наш веб-сайт, который используется несколькими агентствами/филиалами.

Наши клиенты (агенты по недвижимости) в настоящее время отправляют по электронной почте PDF-документ, который получает получатель, может распечатать, подписать и вернуть. Или просто распечатайте и отправьте с SAE, чтобы оно было возвращено с подписью.

Мы хотели бы предложить электронную версию, но не уверены, как лучше поступить.

Что мне нужно легко реализовать, так это способ быстро и легко разрешить любому агенту отправлять по электронной почте любому поставщику/арендодателю/арендатору уникальный документ для подписания (договор купли-продажи/договор аренды).

Документы отправляются подписавшим их лицам с использованием так называемого конверта. Объекты конверта генерируются и передаются через наш API либо для подписания набора документов на месте (с помощью перенаправления на страницу, размещенную в docusign), либо путем отправки их получателю по электронной почте для подписи. Пример 2 в PHP quickstart отправит конверт вашему подписавшему и cc. Используя автоматическую маркировку, вы можете указать имена и ценности ваших поставщиков, арендодателей и арендаторов и передать их документу(документам) в вашем конверте, чтобы различные стороны подписали и/или получили копии.

     # document 1 (html) has sign here anchor tag **signature_1**
    # document 2 (docx) has sign here anchor tag /sn1/
    # document 3 (pdf)  has sign here anchor tag /sn1/
    #
    # The envelope has two recipients.
    # recipient 1 - signer
    # recipient 2 - cc
    # The envelope will be sent first to the signer.
    # After it is signed, a copy is sent to the cc person.
    #
    # create the envelope definition
    $envelope_definition = new EnvelopeDefinition([
       'email_subject' => 'Please sign this document set'
    ]);
    $doc1_b64 = base64_encode($this->clientService->createDocumentForEnvelope($args));
    # read files 2 and 3 from a local directory
    # The reads could raise an exception if the file is not available!
    $content_bytes = file_get_contents(self::DEMO_DOCS_PATH . $GLOBALS['DS_CONFIG']['doc_docx']);
    $doc2_b64 = base64_encode($content_bytes);
    $content_bytes = file_get_contents(self::DEMO_DOCS_PATH . $GLOBALS['DS_CONFIG']['doc_pdf']);
    $doc3_b64 = base64_encode($content_bytes);

    # Create the document models
    $document1 = new Document([  # create the DocuSign document object
        'document_base64' => $doc1_b64,
        'name' => 'Order acknowledgement',  # can be different from actual file name
        'file_extension' => 'html',  # many different document types are accepted
        'document_id' => '1'  # a label used to reference the doc
    ]);
    $document2 = new Document([  # create the DocuSign document object
        'document_base64' => $doc2_b64,
        'name' => 'Battle Plan',  # can be different from actual file name
        'file_extension' => 'docx',  # many different document types are accepted
        'document_id' => '2'  # a label used to reference the doc
    ]);
    $document3 = new Document([  # create the DocuSign document object
        'document_base64' => $doc3_b64,
        'name' => 'Lorem Ipsum',  # can be different from actual file name
        'file_extension' => 'pdf',  # many different document types are accepted
        'document_id' => '3'  # a label used to reference the doc
    ]);
    # The order in the docs array determines the order in the envelope
    $envelope_definition->setDocuments([$document1, $document2, $document3]);


    # Create the signer recipient model
    $signer1 = new Signer([
        'email' => $args['signer_email'], 'name' => $args['signer_name'],
        'recipient_id' => "1", 'routing_order' => "1"]);
    # routingOrder (lower means earlier) determines the order of deliveries
    # to the recipients. Parallel routing order is supported by using the
    # same integer as the order for two or more recipients.

    # create a cc recipient to receive a copy of the documents
    $cc1 = new CarbonCopy([
        'email' => $args['cc_email'], 'name' => $args['cc_name'],
        'recipient_id' => "2", 'routing_order' => "2"]);

    # Create signHere fields (also known as tabs) on the documents,
    # We're using anchor (autoPlace) positioning
    #
    # The DocuSign platform searches throughout your envelope's
    # documents for matching anchor strings. So the
    # signHere2 tab will be used in both document 2 and 3 since they
    #  use the same anchor string for their "signer 1" tabs.
    $sign_here1 = new SignHere([
        'anchor_string' => '**signature_1**', 'anchor_units' => 'pixels',
        'anchor_y_offset' => '10', 'anchor_x_offset' => '20']);
    $sign_here2 = new SignHere([
        'anchor_string' => '/sn1/', 'anchor_units' =>  'pixels',
        'anchor_y_offset' => '10', 'anchor_x_offset' => '20']);

    # Add the tabs model (including the sign_here tabs) to the signer
    # The Tabs object wants arrays of the different field/tab types
    $signer1->setTabs(new Tabs([
        'sign_here_tabs' => [$sign_here1, $sign_here2]]));

    # Add the recipients to the envelope object
    $recipients = new Recipients([
        'signers' => [$signer1], 'carbon_copies' => [$cc1]]);
    $envelope_definition->setRecipients($recipients);

    # Request that the envelope be sent by setting |status| to "sent".
    # To request that the envelope be created as a draft, set to "created"
    $envelope_definition->setStatus($args["status"]);

    return $envelope_definition;
 

Сам быстрый запуск PHP-это приложение MVC, которое полностью работает. Вы, скорее всего, захотите взглянуть на код представлений, например, 2, который действует как html-форма с помощью шаблона twig. В зависимости от того, что вы делаете, у вас будут либо эти данные, предварительно заполненные информацией о поставщике/арендодателе, и у вас будут некоторые поля ввода для арендатора (или некоторая комбинация, основанная на ваших бизнес-потребностях). Затем ваша форма отобразится на контроллере в виде запроса на отправку, который затем вызовет отправку конверта. Для OAuth используйте аутентификацию предоставления JWT с помощью единой учетной записи администратора, чтобы вы могли генерировать новый токен доступа по мере необходимости во всем приложении.

Комментарии:

1. спасибо за эту информацию, в настоящее время я работаю над своей системой, и как только наступит момент для вышесказанного, я буду кодировать в соответствии с этим.

2. Могу я задать вам несколько вопросов о том, как работает Docusign? У меня есть учетная запись разработчика, я с самого начала жестко закодировал все данные своей учетной записи, но как только мы будем довольны тем, как работает система, и она заработает (я предполагаю, с помощью Docusign), буду ли я по-прежнему использовать тот же ключ интегратора, но наш адрес электронной почты/пароль клиентов? Использует ли каждый клиент наш шаблон, а затем мы просто заполняем пользовательские поля соответствующим образом? Как я могу создать пользовательские поля, которые связаны со всеми, а не с каждым получателем? Существует ли API для возврата всех пользовательских полей?

3. Каждому приложению должен быть делегирован свой собственный ключ интегратора и либо секретный, если используется предоставление кода авторизации, либо ключ RSA для предоставления JWT. Адрес электронной почты и пароль предоставляются каждым клиентом, если вы хотите использовать код авторизации, и только один раз в самый первый раз при использовании JWT.

4. да, можно создавать пользовательские поля, доступные для всей системы, да. Вы можете запросить API eSignature, чтобы получить список всех доступных пользовательских полей: developers.docusign.com/esign-rest-api/reference/customtabs/… Вам понадобится определенный идентификатор оболочки для поиска пользовательских вкладок и базовых метаданных: developers.docusign.com/docs/esign-rest-api/reference/envelopes/…

5. Теперь мне удалось вернуть все пользовательские поля, но api пользовательских вкладок не работает (я создал новый вопрос с дополнительной информацией).