php - 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");
这应该会触发电子邮件,对吧?但它不是出于某种原因。我也无法在我的沙盒中看到这个创建的信封。
解决方案
我的代码是这样工作的:
$signersArray = array();
$signer = new Signer();
$signer->set...
$signersArray[] = $signer;
$recipients->setSigners($signersArray);
如果它不起作用,请尝试将从 SDK 发送的数据转储到 API 并仔细检查状态是否正确:
转到第 159 行的 Docusign/esign-client/src/ApiClient.php 和 var_dump($postData)
推荐阅读
- regex - AWK 正则表达式编译失败
- javascript - useEffect 运行无限循环,虽然它应该工作一次
- azure - 如果相同版本的先前部署成功,则重新部署必须失败-
- jenkins - 一次触发多个项目的构建
- laravel - 在开始日期之后获取数据 laravel
- django - 如何在没有 django celery beats 帮助的情况下在 celery 中创建自定义调度程序
- laravel - laravel 处理已验证和未验证路由的最佳方法
- user-interface - ODL - 开放日光 DLUX 替代方案 - BGP 拓扑图形和建模所需
- gradle - Gradle 需要很长时间来初始化
- python - Git 审查未使用 PIP 安装