#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 пользовательских вкладок не работает (я создал новый вопрос с дополнительной информацией).