
本文旨在解决使用docusign php sdk下载已完成签名的文档时,文件内容为空的问题。该问题主要源于sdk 6.5版本的一个已知缺陷。我们将详细介绍两种解决方案:推荐升级到sdk 6.5.1或更高版本,以及在无法立即升级时,通过添加特定的代码行来正确读取临时文件内容的临时修复方案,确保您能成功获取包含coc的完整签名文档。
在使用DocuSign PHP SDK集成签名流程后,常见需求之一是下载所有签署方完成签名后的最终文档,通常还包括CoC(Certificate of Completion)。然而,部分开发者在使用EnvelopesApi的getDocument方法下载文档时,可能会遇到下载的文件内容为空的情况。本文将深入分析此问题的原因,并提供详细的解决方案。
当通过DocuSign PHP SDK尝试下载特定信封(envelope)的合并(combined)文档时,即使API调用成功并返回了一个SplFileObject实例,但最终保存到本地的文件却没有任何内容。
例如,以下代码片段是常见的下载尝试:
use DocuSign\eSign\Api\EnvelopesApi;
use DocuSign\eSign\Client\ApiClient;
// 假设 $apiClient, $account_id, $envelope_id 已经正确初始化
$envelope_api = new EnvelopesApi($apiClient);
// 尝试获取合并文档
$tmpFile = $envelope_api->getDocument($account_id, 'combined', $envelope_id);
// 将临时文件内容保存到本地
$savCert = file_put_contents("signed_document.pdf", file_get_contents($tmpFile->getPathname()));尽管$tmpFile变量是一个有效的SplFileObject实例,指向一个临时文件路径(例如 C:\Users\AppData\Local\Temp\19F.tmp),但直接读取其路径内容并保存,会导致生成的 signed_document.pdf 为空。这表明SplFileObject在返回时,其内部文件指针可能不在文件开头,或者file_get_contents无法正确处理其流。
立即学习“PHP免费学习笔记(深入)”;
经过排查,此问题是DocuSign PHP SDK 6.5版本中的一个已知缺陷。在该版本中,getDocument方法返回的SplFileObject对象,其内部文件指针可能已经位于文件末尾,导致后续的读取操作无法获取到任何内容。
解决此问题有两种主要方法:
最直接且推荐的解决方案是将您的DocuSign PHP SDK升级到修复了此问题的版本。DocuSign SDK 6.5.1 版本已经包含了对该缺陷的修复。
您可以通过Composer更新您的依赖:
composer update docusign/esign-client
或者,如果您在 composer.json 中指定了版本,请确保将其更新为 ^6.5.1 或更高版本:
{
"require": {
"docusign/esign-client": "^6.5.1"
}
}更新后,重新运行您的代码,问题应得到解决。
如果由于某些原因,您无法立即升级SDK版本,可以在现有代码中添加几行来绕过此问题。这涉及到在读取SplFileObject内容之前,手动将文件指针重置到文件开头,并以流式方式读取其内容。
修改后的代码示例如下:
use DocuSign\eSign\Api\EnvelopesApi;
use DocuSign\eSign\Client\ApiClient;
// 假设 $apiClient, $account_id, $envelope_id 已经正确初始化
$envelope_api = new EnvelopesApi($apiClient);
// 尝试获取合并文档
$tmpFile = $envelope_api->getDocument($account_id, 'combined', $envelope_id);
// --- 以下是为SDK 6.5版本添加的修复代码 ---
// 1. 将文件指针重置到文件开头
$tmpFile->rewind();
// 2. 读取文件的全部内容
$contents = $tmpFile->fread($tmpFile->fstat()['size']);
// --- 修复代码结束 ---
// 将获取到的内容保存到本地文件
$savCert = file_put_contents("signed_document.pdf", $contents);
if ($savCert !== false) {
echo "文档已成功下载并保存为 signed_document.pdf\n";
} else {
echo "文档下载失败或保存失败。\n";
}代码解释:
当您在使用DocuSign PHP SDK下载已签名文档时遇到内容为空的问题,最根本的原因是SDK 6.5版本的一个已知缺陷。解决此问题的最佳实践是升级您的DocuSign PHP SDK到6.5.1或更高版本。如果无法立即升级,可以通过在读取SplFileObject内容前,使用rewind()和fread()方法来手动处理文件指针和内容读取,从而成功获取到完整的签名文档。遵循这些指南,您将能够稳定可靠地从DocuSign平台下载所需的已签名文档。
以上就是DocuSign PHP SDK:解决下载已签名文档内容为空的问题的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号