从模板创建的信封中没有显示选项卡


Tabs not showing up in envelope created from template

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

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

我尝试设置模板,使我不能删除任何收件人,我得到错误:

Uncaught SoapFault exception: [soap:Client] Required recipient in the template has not been provided. Recipient not satisfied for role, Signer, in template Test Form

这是我的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>';

这是当I RequestTemplate():

时返回的收件人信息。
[0] => Recipient Object
                                (
                                    [ID] => 1
                                    [UserName] => 
                                    [SignerName] => 
                                    [Email] => 
                                    [Type] => Signer
                                    [AccessCode] => 
                                    [AddAccessCodeToEmail] => 
                                    [RequireIDLookup] => 
                                    [IDCheckConfigurationName] => 
                                    [PhoneAuthentication] => 
                                    [SignatureInfo] => 
                                    [CaptiveInfo] => 
                                    [CustomFields] => 
                                    [RoutingOrder] => 1
                                    [IDCheckInformationInput] => 
                                    [AutoNavigation] => 
                                    [RecipientAttachment] => 
                                    [Note] => 
                                    [RoleName] => Signer
                                    [TemplateLocked] => 
                                    [TemplateRequired] => 1
                                    [TemplateAccessCodeRequired] => 
                                    [DefaultRecipient] => 
                                    [SignInEachLocation] => 
                                )

这可能是由于您将templateRoleAssignments实例化为对象而不是数组。由于您使用的是SOAP api而不是REST,您在Github上看到DocuSign SOAP SDK了吗?它有5种不同环境的示例代码和项目,包括PHP (PHP, Java, C#, RubySalesforce):

https://github.com/docusign/DocuSign-eSignature-SDK

查看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;
}

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