无法使用 Docusign PHP SDK 添加日期签名字段

Unable to add Date Signed field with Docusign PHP SDK

我正在使用 https://github.com/docusign/docusign-php-client 的 PHP SDK,并且我正在尝试向文档中添加日期签名字段。我正在成功创建信封、添加签名者并发送信封。但是我无法弄清楚“签名日期”字段中缺少什么。

我到处搜索添加它的示例,并查看了 API 文档。我觉得我缺少一些实际上将字段或 'tab' 放在文档上的方法,并且需要指向正确方向的指针。我发现了诸如 this Question 它向我展示了我需要在 DateSigned 对象上设置哪些属性,但没有帮助我弄清楚我需要调用的 PHP 方法。

我正在为我们的项目制作一个包装器 class,所以如果您可以忽略这一点,我将分享我已有的代码,用于添加签名字段,然后我尝试添加签名日期给定签名者的字段。我很困惑我遗漏了什么,实际上会把它放在文档上。我省略了实际调用这些方法的代码,但信封确实发送了——只是没有日期签名字段。

非常感谢

function addSigner($signerName, $signerEmail, $xPos, $yPos, $documentId = 1, $documentPage = 1)
{
     $index = count($this->signers);
     $this->signers[$index] = new DocuSign\eSign\Model\Signer();
     $this->signers[$index]->setName($signerName);
     $this->signers[$index]->setEmail($signerEmail);
     $this->signers[$index]->setRecipientId((string)$index + 1);
     $this->sigFields[$index] = new DocuSign\eSign\Model\SignHere();
     $this->sigFields[$index]->setXPosition($xPos);
     $this->sigFields[$index]->setYPosition($yPos);
     $this->sigFields[$index]->setDocumentId($documentId);
     $this->sigFields[$index]->setPageNumber($documentPage);
     $this->sigFields[$index]->setRecipientId((string)$index + 1);
     $this->sigTabs[$index] = new DocuSign\eSign\Model\Tabs();
     $this->sigTabs[$index]->setSignHereTabs(array($this->sigFields[$index]));
     $this->signers[$index]->setTabs($this->sigTabs[$index]);

     return $index;  // signerid
}

function addSignerDate($signerId, $xPos, $yPos, $documentId = 1)
{
     $index = count($this->dateSignedFields);
     $this->dateSignedFields[$index] = new DocuSign\eSign\Model\DateSigned();

     // the date should always be on the same page as the signature
     $pageNumber = $this->sigFields[$signerId]->getPageNumber();
     $this->dateSignedFields[$index]->setPageNumber($pageNumber);
     $this->dateSignedFields[$index]->setDocumentId($documentId);
     $this->dateSignedFields[$index]->setRecipientId($signerId);
     $this->dateSignedFields[$index]->setName('Date Signed');
     $this->dateSignedFields[$index]->setTabLabel('Date Signed');
     $this->dateSignedFields[$index]->setXPosition($xPos);
     $this->dateSignedFields[$index]->setYPosition($yPos);

    // EDIT - I added this bit but still no Date Signed. Probably the right track though. 
     $this->dateSignedTabs[$index] = new DocuSign\eSign\Model\Tabs();
     $this->dateSignedTabs[$index]->setDateSignedTabs(array($this->dateSignedFields[$index]));
     $this->dateSignedFields[$index]->setTabId($this->dateSignedTabs[$index]);

     return $index;

}

好的,这是我修复它的方法。我改为只有一个 Tabs 数组——没有单独的数组用于 Date Signed 字段。 Tabs 对象包含不同类型的 Tabs,因此我们对两个字段使用相同的 Tabs。

function addSigner($signerName, $signerEmail, $xPos, $yPos, $documentId = 1, $documentPage = 1)
{
    $index = count($this->signers);
    $this->signers[$index] = new DocuSign\eSign\Model\Signer();
    $this->signers[$index]->setName($signerName);
    $this->signers[$index]->setEmail($signerEmail);
    $this->signers[$index]->setRecipientId((string)$index + 1);
    $this->sigFields[$index] = new DocuSign\eSign\Model\SignHere();
    $this->sigFields[$index]->setXPosition($xPos);
    $this->sigFields[$index]->setYPosition($yPos);
    $this->sigFields[$index]->setDocumentId($documentId);
    $this->sigFields[$index]->setPageNumber($documentPage);
    $this->sigFields[$index]->setRecipientId((string)$index + 1);
    $this->sigTabs[$index] = new DocuSign\eSign\Model\Tabs();
    $this->sigTabs[$index]->setSignHereTabs(array($this->sigFields[$index]));

    return $index;
}

function addSignerDate($signerId, $xPos, $yPos, $documentId = 1)
{
    $index = count($this->dateSignedFields);
    $this->dateSignedFields[$index] = new DocuSign\eSign\Model\DateSigned();

    // the date should always be on the same page as the signature
    $pageNumber = $this->sigFields[$signerId]->getPageNumber();

    $this->dateSignedFields[$index]->setPageNumber($pageNumber);
    $this->dateSignedFields[$index]->setDocumentId($documentId);
    $this->dateSignedFields[$index]->setRecipientId($signerId);
    $this->dateSignedFields[$index]->setName('Date Signed');
    $this->dateSignedFields[$index]->setTabLabel('Date Signed');
    $this->dateSignedFields[$index]->setXPosition($xPos);
    $this->dateSignedFields[$index]->setYPosition($yPos);

    $this->sigTabs[$signerId]->setDateSignedTabs(array($this->dateSignedFields[$index]));

    return $index;
}

然后我稍后在我的 SendEnvelope 方法中将它们添加到文档中:

foreach($this->signers as $signerId => $signer)
{
    $this->signers[$signerId]->setTabs($this->sigTabs[$signerId]);
}