首页 > 解决方案 > DocuSign - 无法在 createEnvelope 上设置“已发送”

问题描述

我正在使用 Docusign PHP 客户端并尝试创建和封装并将其作为电子邮件发送。使用当前的 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");这应该会触发电子邮件,对吧?但它不是出于某种原因。我也无法在我的沙盒中看到这个创建的信封。

标签: phpdocusignapi

解决方案


我的代码是这样工作的:

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

如果它不起作用,请尝试将从 SDK 发送的数据转储到 API 并仔细检查状态是否正确:

转到第 159 行的 Docusign/esign-client/src/ApiClient.php 和 var_dump($postData)


推荐阅读