DocuSign - не могу установить "отправлено" на createEnvelope - PullRequest
0 голосов
/ 03 октября 2018

Я использую Docusign PHP Client и пытаюсь создать и конвертировать и отправить его по электронной почте.В текущем SDK я получил ошибку:

INVALID_REQUEST_BODY Тело запроса отсутствует или неправильно отформатировано.Невозможно десериализовать текущий объект JSON (например, {"name": "value"}) в тип 'API_REST.Models.v2.document []', поскольку для десериализации типа требуется массив JSON (например, [1,2,3])правильно. \ r \ n ◀ Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип так, чтобы это был нормальный тип .NET (например, не примитив t ▶Путь 'documents.documentBase64', строка 1, позиция 31.

Поэтому мне пришлось отредактировать EnvelopeApi.php (строка 2876) json_encode($httpBody), чтобы заставить его работать.


Теперь, когда он работает, я получаю ответ, подобный этому, однако я не могу изменить статус созданного на отправленный - это моя проблема.

EnvelopeSummary {#460 ▼
  #container: array:4 [▼
    "envelope_id" => "6b9ef863-2ee0-4ea6-9f7e-20b7d4f59b22"
    "status" => "created"
    "status_date_time" => "2018-10-03T12:30:22.8600000Z"
    "uri" => "/envelopes/6b9ef863-2ee0-4ea6-9f7e-20b7d4f59b22"
  ]
}

Мой полныйкод:

Сначала я проверил и получил мои $accountId

And then creating Envelope:

$path = public_path('test.pdf');
$b64Doc = base64_encode(file_get_contents($path));

$document = new Document();
$document->setName("TEST.pdf");
$document->setFileExtension("pdf");
$document->setDocumentId(1);
$document->setDocumentBase64($b64Doc);

$sign_here = new SignHere();
$sign_here->setXPosition(25);
$sign_here->setYPosition(50);
$sign_here->setDocumentId(1);
$sign_here->setPageNumber(1);
$sign_here->setRecipientId(1);

$tabs = new Tabs();
$tabs->setSignHereTabs($sign_here);

$signers = new Signer();
$signers->setName('Test User');
$signers->setEmail('test@mailinator.com');
$signers->setRoleName('Signer');
$signers->setRecipientId(1);
$signers->setRoutingOrder(1);
$signers->setTabs($tabs);

$recipients = new Recipients();
$recipients->setSigners($signers);

$envelope_definition = new EnvelopeDefinition();
$envelope_definition->setEmailSubject('Signature Request');
$envelope_definition->setStatus("sent"); // ***
$envelope_definition->setDocuments($document);
$envelope_definition->setRecipients($recipients);

$options = new CreateEnvelopeOptions();
$options->setCdseMode(null);
$options->setMergeRolesOnDraft(null);

try {
   $envelopeSummary = $envelopeApi->createEnvelope($accountId, $envelope_definition, $options);
   dd($envelopeSummary);

   // Also tried this:
   // $envelopeApi->update($accountId, $envelopeSummary->getEnvelopeId(), json_encode(['status' => 'sent']);

 } catch (ApiException $e){
     dd($e->getResponseBody()->errorCode . " " . $e->getResponseBody()->message);
}

$envelope_definition->setStatus("sent");, это должно вызвать электронную почту, верно?по какой-то причине. Также я не вижу этот созданный конверт в своей песочнице.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Мой код работает следующим образом:

$signersArray = array();
$signer = new Signer();
$signer->set... 
$signersArray[] = $signer;
$recipients->setSigners($signersArray);

Если он не работает, попробуйте выгрузить данные, отправленные из SDK в API, и дважды проверьте, что статус правильный:

Перейтив Docusign / esign-client / src / ApiClient.php и var_dump ($ postData) в строке 159

0 голосов
/ 04 октября 2018

Вы неправильно настраиваете подписчиков.Это должен быть массив объектов-подписчиков.

Вот некоторый непроверенный код:

# This code creates a signer, not signers
$signer = new Signer();
$signer->setName('Test User');
$signer->setEmail('test@mailinator.com');
$signer->setRoleName('Signer');
$signer->setRecipientId(1);
$signer->setRoutingOrder(1);
$signer->setTabs($tabs);

$recipients = new Recipients();
# setSigners wants an array of signer objects.
# in this case, we make an array with one element
$recipients->setSigners(array($signer));

Кроме того, вкладки также создаются неправильно.Опять же, это должен быть массив типа табуляции.

См. этот пример для дополнительных идей.

0 голосов
/ 03 октября 2018

Да, установка status в отправлено должна заставить DocuSign отправлять конверт при создании.Тот факт, что ответ содержит "status" => "created", по-видимому, указывает на то, что ваши настройки свойства ($envelope_definition->setStatus("sent");) на самом деле не включены как часть запроса, который выдается DocuSign.

Я сравнил ваш код с примерами кода, предоставленными в GitHub для PHP SDK , в частности, с функцией signatureRequestOnDocument на этой странице.Единственное очевидное различие, которое я вижу между вашим кодом и примером кода, заключается в синтаксисе создания объектов.Например, при создании конверта:

  • Ваш код: $envelope_definition = new EnvelopeDefinition();

  • Пример кода PHP SDK: $envelop_definition = new DocuSign\eSign\Model\EnvelopeDefinition();

Я не очень разбираюсь в PHP, не говоря уже о PHP SDK DocuSign PHP, но я бы посоветовал вам попытаться сымитировать примеров кода , которые являются частью SDKрепо на GitHub, чтобы увидеть, если вы получите другой результат таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...