Php 从模板创建的信封中未显示选项卡

Php 从模板创建的信封中未显示选项卡,php,docusignapi,Php,Docusignapi,我正在尝试创建一个基于模板的嵌入式信封。我遇到的问题是,在创建的信封中,我创建的选项卡丢失了 我四处搜索,找到了角色分配,并使用了它,但仍然没有运气。当我查看XML时,角色与模板以及路由顺序和ID相同 我尝试设置模板,以便无法删除任何收件人,但出现错误: 未捕获的SoapFault异常:[soap:Client]未提供模板中所需的收件人。收件人对模板测试表单中的角色、签名人不满意 这是我创建和发送信封的PHP,其中许多代码来自文档: // Get the recipient from a pos

我正在尝试创建一个基于模板的嵌入式信封。我遇到的问题是,在创建的信封中,我创建的选项卡丢失了

我四处搜索,找到了角色分配,并使用了它,但仍然没有运气。当我查看XML时,角色与模板以及路由顺序和ID相同

我尝试设置模板,以便无法删除任何收件人,但出现错误:

未捕获的SoapFault异常:
[soap:Client]未提供模板中所需的收件人。收件人对模板测试表单中的角色、签名人不满意

这是我创建和发送信封的PHP,其中许多代码来自文档:

// Get the recipient from a post
$rcp1 = new Recipient(); // First recipient to put in recipient array
$rcp1->UserName = $_POST['Name'];
$rcp1->Email = $_POST['Email'];
$rcp1->Type = RecipientTypeCode::Signer;
$rcp1->ID = "1";
$rcp1->RoutingOrder = 1;
$rcp1->CaptiveInfo = new RecipientCaptiveInfo();
$rcp1->CaptiveInfo->ClientUserId = 1;
$rcp1->RoleName = "Signer";
$rcp1->RequireIDLookup = FALSE;

// Create Role Assignments
$assign = new TemplateReferenceRoleAssignment();
$assign->RecipientID = $rcp1->ID;
$assign->RoleName = $rcp1->RoleName;

// Use a server-side template
$templateRef = new TemplateReference();
$templateRef->TemplateLocation = TemplateLocationCode::Server;
$templateRef->RoleAssignments = $assign;
$templateRef->Template = "****";



// Construct the envelope info
$envInfo = new EnvelopeInformation();
$envInfo->AccountId = $AccountID;
$envInfo->Subject = "This is the Subject";
$envInfo->EmailBlurb = "I have no Idea What a blurb is";



// Send creates draft with all the template info
$createEnvelopeFromTemplatesparams = new CreateEnvelopeFromTemplates();
$createEnvelopeFromTemplatesparams->TemplateReferences = array($templateRef);
$createEnvelopeFromTemplatesparams->Recipients = array($rcp1);
$createEnvelopeFromTemplatesparams->EnvelopeInformation = $envInfo;
$createEnvelopeFromTemplatesparams->ActivateEnvelope = true;
$env = $api->CreateEnvelopeFromTemplates($createEnvelopeFromTemplatesparams);
$envStatus = $env->CreateEnvelopeFromTemplatesResult;


// Construct the recipient token authentication assertion and specify
// ID, start time, method, and domain
$assertion = new RequestRecipientTokenAuthenticationAssertion();
$assertion->AssertionID = guid();
$assertion->AuthenticationInstant = nowXsdDate();
$assertion->AuthenticationMethod = RequestRecipientTokenAuthenticationAssertionAuthenticationMethod::Password;
$assertion->SecurityDomain = "Request Recipient Token Test";



// Construct the URLs based on UserName
$recip = $envStatus->RecipientStatuses->RecipientStatus[0];
$urls = new RequestRecipientTokenClientURLs();
$urlbase = getCallbackURL('pop.php');
$urls->OnSigningComplete = $urlbase . "?event=SignComplete&uname=" . $recip->UserName;
$urls->OnViewingComplete = $urlbase . "?event=ViewComplete&uname=" . $recip->UserName;
$urls->OnCancel = $urlbase . "?event=Cancel&uname=" . $recip->UserName;
$urls->OnDecline = $urlbase . "?event=Decline&uname=" . $recip->UserName;
$urls->OnSessionTimeout = $urlbase . "?event=Timeout&uname=" . $recip->UserName;
$urls->OnTTLExpired = $urlbase . "?event=TTLExpired&uname=" . $recip->UserName;
$urls->OnIdCheckFailed = $urlbase . "?event=IDCheck&uname=" . $recip->UserName;
$urls->OnAccessCodeFailed = $urlbase . "?event=AccesssCode&uname=" . $recip->UserName;
$urls->OnException = $urlbase . "?event=Exception&uname=" . $recip->UserName;


// Send
$requestRecipientTokenparams = new RequestRecipientToken();
$requestRecipientTokenparams->EnvelopeID = $envStatus->EnvelopeID;
$requestRecipientTokenparams->ClientUserID = $recip->ClientUserId;
$requestRecipientTokenparams->Username = $recip->UserName;
$requestRecipientTokenparams->Email = $recip->Email;
$requestRecipientTokenparams->AuthenticationAssertion = $assertion;
$requestRecipientTokenparams->ClientURLs = $urls;
$response = $api->RequestRecipientToken($requestRecipientTokenparams);
$tokenUrl = $response->RequestRecipientTokenResult;


echo '<iframe src="' . $tokenUrl . '" width="100%" height="720px"></iframe>';

这可能是因为您将templateRoleAssignments设置为对象而不是数组。由于您使用的是SOAP api而不是REST,您在Github上见过DocuSign SOAP SDK吗?它有5种不同环境的示例代码和项目,包括PHP(
PHP
Java
C
Ruby
、以及
Salesforce
):

查看PHP项目中定义的函数,我看到以下内容:

function createFinalRoleAssignments($recipients) {
    $roleAssignments[] = new TemplateReferenceRoleAssignment();

    foreach ($recipients as $r) {
        $assign = new TemplateReferenceRoleAssignment();
        $assign->RecipientID = $r->ID;
        $assign->RoleName = $r->RoleName;
        array_push($roleAssignments, $assign);
    }

    // eliminate 0th element
    array_shift($roleAssignments);

    return $roleAssignments;
}

请注意,
$roleasignments
是如何使用方括号将其声明为数组的
[]
,我有一种强烈的感觉,那就是它导致了您的错误。尝试以同样的方式定义你的角色分配,这可能会奏效

我没有看到任何明显的错误,只是再次检查您是否确定您所引用的模板上的角色名称设置为
签名者
?因为您正在设置
$rcp1->RoleName=“Signer”然后模板中保存的角色名称需要完全匹配。添加了直接从模板中获取的我的收件人信息。谢谢!成功了。我最初查看了示例文件,认为因为我只担心一个收件人,所以我不需要数组。酷,无论如何,你可以接受并投票支持我的答案吗?:)Thx-麦角蛋白
function createFinalRoleAssignments($recipients) {
    $roleAssignments[] = new TemplateReferenceRoleAssignment();

    foreach ($recipients as $r) {
        $assign = new TemplateReferenceRoleAssignment();
        $assign->RecipientID = $r->ID;
        $assign->RoleName = $r->RoleName;
        array_push($roleAssignments, $assign);
    }

    // eliminate 0th element
    array_shift($roleAssignments);

    return $roleAssignments;
}