Вопрос или проблема
Я работаю над приложением на Laravel, в которое я интегрировал DocuSign для отправки документов на электронные подписи. Я следовал официальной документации API DocuSign для настройки аутентификации JWT и успешно отправлял документы. Однако, когда я отправляю документ на подпись, поле для подписи не появляется на документе.
Как я уже упоминал, я успешно отправляю документы, и код для создания конверта следующий:
public function buildEnvelope(Request $request): EnvelopeDefinition
{
$fileContent = $request->file('formFile')->get();
$fileName = $request->file('formFile')->getClientOriginalName();
$fileExtension = $request->file('formFile')->getClientOriginalExtension();
$recipientEmail = $request['email'];
$recipientName = $request['name'];
$document = new Document([
'document_id' => "1",
'document_base64' => base64_encode($fileContent),
'file_extension' => $fileExtension,
'name' => $fileName
]);
$sign_here_tab = new SignHere([
'anchor_string' => "**подпись**",
'page_number' => "1",
'anchor_units' => "pixels",
'anchor_x_offset' => "100",
'anchor_y_offset' => "300"
]);
$tabs = new Tabs([
'sign_here_tabs' => [$sign_here_tab]
]);
$signer = new Signer([
'email' => $recipientEmail,
'name' => $recipientName,
'recipient_id' => "1",
'tabs' => $tabs
]);
$recipients = new Recipients([
'signers' => [$signer]
]);
$inlineTemplate = new InlineTemplate([
'recipients' => $recipients,
'sequence' => "1"
]);
$compositeTemplate = new CompositeTemplate([
'composite_template_id' => "1",
'document' => $document,
'inline_templates' => [$inlineTemplate]
]);
return new EnvelopeDefinition([
'composite_templates' => [$compositeTemplate],
'email_subject' => "Пожалуйста, подпишите",
'status' => "отправлено"
]);
}
Я указал номер страницы, некоторые случайные координаты, строку привязки и единицы измерения привязки и ожидал, что на странице 1 я увижу текст подпись
Ответ или решение
Проблема с отсутствием таба подписи SignHere
в документе при отправке его через ваше Laravel-приложение может быть вызвана несколькими причинами. Позвольте мне объяснить, как правильно настроить интеграцию с DocuSign и устранить возможные проблемы.
Во-первых, важно убедиться, что строка анкора правильно задана в вашем документе. Вы используете anchor_string
= "signature", что означает, что DocuSign будет искать именно эту строку в документе для размещения поля подписи. Убедитесь, что текст **signature**
находится на первой странице вашего загружаемого документа в том месте, где вы ожидаете, чтобы оно было. Параметр anchor_units
у вас установлен на "pixels", что подразумевает, что координаты anchor_x_offset
и anchor_y_offset
могут быть некорректно интерпретированы, если не учитывать размер шрифта, а также другие параметры макета документа.
Вот несколько шагов, которые вы можете предпринять, чтобы устранить проблему:
-
Проверьте наличие текста в документе:
Убедитесь, что в загружаемом документе действительно присутствует текст**signature**
. Обратите внимание на регистр и дополнительные пробелы. -
Измените параметры позиционирования:
Попробуйте изменить параметрanchor_units
на "inches" или "millimeters", чтобы протестировать, будет ли это влиять на отображение поля подписи. Также попробуйте опуститьanchor_x_offset
иanchor_y_offset
, если у вас стоит фиксированное значение. -
Проверьте последовательность документов и получателей:
Ваша структура документов и получателей выглядит правильно, но убедитесь, что все id (например,recipient_id
иdocument_id
) уникальны для каждого нового подписанта или документа, особенно если вы добавляете несколько подписантов. -
Логирование и отладка:
Включите дополнительное логирование в вашем приложении для отслеживания запросов к DocuSign API. Получите и проанализируйте ответ от сервера DocuSign на предмет ошибок или предупреждений, которые могут указывать на источник проблемы.
Вот пример кода, который может помочь добавить дополнительную обработку ошибок:
try {
$envelopeApi = new EnvelopesApi($apiClient);
$envelopeSummary = $envelopeApi->createEnvelope($accountId, $envelopeDefinition);
return response()->json(['success' => true, 'envelope_id' => $envelopeSummary->getEnvelopeId()]);
} catch (ApiException $e) {
return response()->json(['success' => false, 'message' => $e->getMessage()]);
}
- Тестирование с простым документом:
Создайте простой текстовый документ (например, .txt или .docx) с одной строкой содержащей**signature**
, чтобы убедиться, что это не проблема конкретного документа.
Если после всех этих шагов проблема не устраняется, возможно, стоит обратиться в службу поддержки DocuSign с конкретными примерами запросов и ответов API, чтобы они могли помочь вам более детально. Важно собрать как можно больше информации о проблеме для эффективного решения.
Удачи в решении проблемы! Если есть еще вопросы, обращайтесь.