标签未显示在从模板创建的信封中

时间:2014-05-27 17:28:44

标签: php docusignapi

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

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

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

未被捕获的SoapFault例外:[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>';

这是我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] => 
                                )

1 个答案:

答案 0 :(得分:1)

这可能是由于您将templateRoleAssignments设置为对象而不是数组。既然您正在使用SOAP api而不是REST,您是否在Github上看过DocuSign SOAP SDK?这包含5个不同环境的示例代码和项目,包括PHP(PHPJavaC#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如何使用方括号[]声明为数组,我有强烈的感觉,导致您的错误。尝试以相同的方式定义您的roleAssignments,这可能会起作用。