2016-08-04 1 views
0

По какой-то причине я не могу заставить свой код показывать пользовательские поля, которые я хочу добавить на левой панели (например, имя, фамилия и т. Д.). При отправке моей формы нужно перейти в конверт и предварительно заполнить мои собственные поля. Здесь я искал документы DocuSign и другие темы. Буду признателен за любую оказанную помощь. Спасибо.Отправить форму и предварительно заполнить пользовательские поля в DocuSign Envelope

<?php 
if(!empty($_POST)){ 
    // Input your info: 
    $email = "[email protected]";         // your account email 
    $password = "password";        // your account password 
    $integratorKey = "wouldnt-you-like-to-know"; // your account integrator key, found on (Preferences -> API page) 
    $templateId = "66b7706e-936b-4438-bd5e-bd68ce47dffb"; // provide a valid templateId of a template in your account 
    $templateRoleName = "Test";        // use same role name that exists on the template in the console 

    $recipientName = 'blah bleh';      // provide a recipient (signer) name 
    $recipientEmail = '[email protected]'; 
                  // the recipient name and email. Whatever you set the clientUserId to you must use the same 
                  // value when requesting the signing URL 
                  // construct the authentication header: 
    $color = $_POST['color']; 
    $number = $_POST['number']; 
    $animal = $_POST['animal']; 

    $header = 
    "<DocuSignCredentials> 
     <Username>" . 
      $email . 
     "</Username> 
     <Password>" . 
      $password . 
     "</Password> 
     <IntegratorKey>" . 
      $integratorKey . 
     "</IntegratorKey> 
    </DocuSignCredentials>"; 

    // STEP 1 - Login (retrieves baseUrl and accountId) 
    $url = "https://demo.docusign.net/restapi/v2/login_information"; 
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl, CURLOPT_HEADER, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("X-DocuSign-Authentication: $header")); 
    $json_response = curl_exec($curl); 
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

    if ($status != 200) { 
     echo "<br>"; 
     echo "error calling webservice, status is:" . $status; 
     exit(-1); 
    } 

    $response = json_decode($json_response, true); 
    $accountId = $response["loginAccounts"][0]["accountId"]; 
    $baseUrl = $response["loginAccounts"][0]["baseUrl"]; 
    curl_close($curl); 

    //--- display results 
    echo "accountId = " . $accountId . "\nbaseUrl = " . $baseUrl . "\n" . "<br>"; 

    // STEP 2 - Create an envelope with an Embedded recipient (uses the clientUserId property) 
    $data = array(
     "accountId" => $accountId, 
     "emailSubject" => "DocuSign API - Embedded Signing Example", 
     "emailBlurb" => "This is a test.", 
     "compositeTemplates" => array(
      "serverTemplates" => array(
       "sequence" => "1", 
       "templateId" => $templateId 
      ), 
      "inlineTemplates" => array(
       "sequence" => "2", 
       "recipients" => array(
        "signers" => array(
         "roleName" => "Signer1", 
         "recipientId" => "1", 
         "name" => "John Doe", 
         "email" => "[email protected]", 
         "clientUserId" => "1234", 
         "tabs" => array(
          "textTabs" => array(
           "tabLabel" => "address", 
           "value" => "123 Main Street" 
          ) 
         ) 
        ) 
       ) 
      ) 
     ), 
     "status" => "sent" 
    );  

    $data_string = json_encode($data); 
    $curl = curl_init($baseUrl . "/envelopes"); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);                 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(                   
     'Content-Type: application/json',                     
     'Content-Length: ' . strlen($data_string), 
     "X-DocuSign-Authentication: $header")                  
    ); 

    $json_response = curl_exec($curl); 
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

    if ($status != 201) { 
     echo "error calling webservice, status is:" . $status . "\nerror text is --> <br>"; 
     print_r($json_response); echo "\n"; 
     exit(-1); 
    } 

    $response = json_decode($json_response, true); 
    $envelopeId = $response["envelopeId"]; 
    curl_close($curl); 

    //--- display results 
    echo "<br>Envelope created! Envelope ID: " . $envelopeId . "\n"; 

    // STEP 3 - Get the Embedded Signing View 
    $data = array(
     "returnUrl" => "http://www.docusign.com/devcenter", 
     "authenticationMethod" => "Email", 
     "clientUserId" => "1234", 
     "userName" => "John Doe", 
     "email" => "[email protected]" 
    ); 

    $data_string = json_encode($data);  
    $curl = curl_init($baseUrl . "/envelopes/$envelopeId/views/recipient"); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);                 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(                   
     'Content-Type: application/json',                     
     'Content-Length: ' . strlen($data_string), 
     "X-DocuSign-Authentication: $header")                  
    ); 

    $json_response = curl_exec($curl); 
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

    if ($status != 201) { 
     echo "error calling webservice, status is:" . $status . "\nerror text is --> "; 
     print_r($json_response); echo "\n"; 
     exit(-1); 
    } 

    $response = json_decode($json_response, true); 
    $url = $response["url"]; 

    //--- display results 
    echo "\n\nNavigate to this URL to start the embedded signing view of the envelope\n" . "<br>Embedded URL is: \n\n" . "<a href='$url'>HERE!</a>"; 
} 
?> 
<form action="" method="POST"> 
<label for="color">color:</label> 
<input type="text" name="color"> 
<br> 
<label for="number">number:</label> 
<input type="text" name="number"> 
<br> 
<label for="animal">animal:</label> 
<input type="text" name="animal"> 
<br> 
<button type="submit">Submit</button> 
</form>  

ответ

2

Чтобы создать конверт с помощью шаблона и поля (ы) предварительного заполнения документов внутри этого конверта требует, чтобы вы использовали Композитные Шаблоны структуры в запросе API. (См. Раздел «Композитные шаблоны» на странице this page для получения информации о составных шаблонах.)

Я не знаком с DocuSign PHP SDK, но объясню синтаксис запроса в JSON, и, я думаю, вы можете найти соответствующий PHP-синтаксис для генерации запросов, как показано.

Следующий пример запроса (JSON) создает конверт, который использует указанный шаблон с одного получателя (имя роли = Signer1), и предварительно заполнит адрес поле со значением «123 Main Street» для этого получатель (встроенный подписчик). (Хотя этот пример предварительно заполняет только одно поле для Signer1 - вы могли бы, очевидно, предварительно заполнить дополнительные поля, просто включив их в закладках объекта запроса вместе с адресом.)

POST https://{{env}}.docusign.net/restapi//v2/accounts/{{accountId}}/envelopes 

{ 
    "emailSubject": "Test Pre-fill Tabs", 
    "emailBlurb": "This is a test.", 
    "compositeTemplates": [{ 
     "serverTemplates": [{ 
      "sequence": "1", 
      "templateId": "CD0E6D53-3447-4A9E-BBAF-0EB2C78E8310" 
     }], 
     "inlineTemplates":[{ 
      "sequence": "2", 
      "recipients": { 
       "signers": [ 
        { 
         "roleName": "Signer1", 
         "recipientId": "1", 
         "name": "John Doe", 
         "email": "[email protected]", 
         "clientUserId": "1234", 
         "tabs": { 
          "textTabs": [ 
           { 
            "tabLabel": "address", 
            "value": "123 Main Street" 
           } 
          ] 
         } 
        } 
       ] 
      } 
     }] 
    }], 
    "status": "sent" 
} 

После того как вы создали конверт (используя вышеупомянутый запрос), вы будете выполнять запрос «POST получателя Просмотр», чтобы получить URL подписи для Signer1:

POST https://{{env}}.docusign.net/restapi//v2/accounts/{{accountId}}/envelopes/{{envelopeId/views/recipient 

{ 
    "clientUserId": "1234", 
    "userName": "John Doe", 
    "email": "[email protected]", 
    "returnUrl": "https://www.google.com", 
    "authenticationMethod": "Email" 
} 

(Обратите внимание, что вы не укажете вкладки в этом запросе .)


UPDATE # 1


Начиная с кодом добавленного к исходному сообщению, я был в состоянии изменить его таким образом, что он успешно создает конверт (с использованием шаблона), с одним встроенным получателем (Signer1) и предварительно заполняющим поле текстовым полем для этого подписавшего. Вот код - обратите внимание, что вам нужно будет указать значения для всех переменных в верхней части этого примера кода.

<?php 

// Set values for variables 
//----------- 
$email = "YOUR_DOCUSIGN_LOGIN_EMAIL";         // your account email 
$password = "YOUR_DOCUSIGN_LOGIN_PASSWORD";        // your account password 
$integratorKey = "YOUR_DOCUSIGN_INTEGRATOR_KEY"; // your account integrator key, found on (Preferences -> API page) 

$templateId = "TEMPLATE_ID"; // provide a valid templateId of a template in your account 
$templateRoleName = "TEMPLATE_RECIPIENT_ROLE_NAME";        // use same role name that exists on the template in the console 

$recipientName = "SIGNER_NAME";      // provide a recipient (signer) name 
$recipientEmail = "SIGNER_EMAIL_ADDRESS";   // provide a recipient (signer) email address 
$recipientId = "1";         // set recipient id (can be any integer value) 
$clientUserId = "1234";        // set clientUserId (can be any integer value) -- this is what makes the recipient an "embedded recipient (signer)" 

$header = 
"<DocuSignCredentials> 
    <Username>" . 
     $email . 
    "</Username> 
    <Password>" . 
     $password . 
    "</Password> 
    <IntegratorKey>" . 
     $integratorKey . 
    "</IntegratorKey></DocuSignCredentials>"; 



// STEP 1 - Login (retrieves baseUrl and accountId) 
//----------- 
$url = "https://demo.docusign.net/restapi/v2/login_information"; 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array("X-DocuSign-Authentication: $header")); 
$json_response = curl_exec($curl); 
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

if ($status != 200) { 
    echo "\n"; 
    echo "error calling webservice, status is:" . $status; 
    exit(-1); 
} 

$response = json_decode($json_response, true); 
$accountId = $response["loginAccounts"][0]["accountId"]; 
$baseUrl = $response["loginAccounts"][0]["baseUrl"]; 
curl_close($curl); 

//--- display results 
echo "accountId = " . $accountId . "\nbaseUrl = " . $baseUrl . "\n\n"; 



// STEP 2 - Create an envelope with an Embedded recipient (uses the clientUserId property) 
//----------- 
// tabs 
$textTabs = array(); 
$textTabs[] = array('tabLabel' => "address", 'value' => "123 Main Street");    
$tabs = array('textTabs' => $textTabs); 
#echo ("tabs:\n" . json_encode($tabs) . "\n\n"); 

// recipients 
$signers = array(); 
$signers[] = array('roleName' => $templateRoleName, 'recipientId' => $recipientId, 'name' => $recipientName, 'email' => $recipientEmail, 'clientUserId' => $clientUserId, 'tabs' => $tabs); 
$recipients = array('signers' => $signers); 
#echo ("recipients:\n" . json_encode($recipients) . "\n\n"); 

// serverTemplates 
$serverTemplates = array(); 
$serverTemplates[] = array('sequence' => "1", 'templateId' => $templateId); 
#echo ("serverTemplates:\n " . json_encode($serverTemplates) . "\n\n"); 

// inlineTemplates 
$inlineTemplates = array(); 
$inlineTemplates[] = array('sequence' => "2", 'recipients' => $recipients); 
#echo ("inlineTemplates:\n" . json_encode($inlineTemplates) . "\n\n"); 

// compositeTemplates 
$compositeTemplates = array(); 
$compositeTemplates[] = array('serverTemplates' => $serverTemplates ,'inlineTemplates' => $inlineTemplates); 
#echo ("compositeTemplates:\n" . json_encode($compositeTemplates) . "\n\n"); 

// request body 
$data = array('emailSubject' => "DocuSign Test - Embedded Signing", 'emailBlurb' => "Please sign. Thanks!", 'status' => 'sent', 'compositeTemplates' => $compositeTemplates); 
$data_string = json_encode($data); 

$curl = curl_init($baseUrl . "/envelopes"); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string), 
    "X-DocuSign-Authentication: $header")                  
); 

$json_response = curl_exec($curl); 
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

if ($status != 201) { 
    echo "error calling webservice, status is:" . $status . "\nerror text is --> \n"; 
    print_r($json_response); echo "\n"; 
    exit(-1); 
} 

$response = json_decode($json_response, true); 
$envelopeId = $response["envelopeId"]; 
curl_close($curl); 

//--- display results 
echo "\nEnvelope created! Envelope ID: " . $envelopeId . "\n"; 



// STEP 3 - Get the Embedded Signing View 
//----------- 
$data = array(
    "returnUrl" => "http://www.docusign.com/devcenter", 
    "authenticationMethod" => "Email", 
    "clientUserId" => $clientUserId, 
    "userName" => $recipientName, 
    "email" => $recipientEmail 
); 

$data_string = json_encode($data);  
$curl = curl_init($baseUrl . "/envelopes/$envelopeId/views/recipient"); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string), 
    "X-DocuSign-Authentication: $header")                  
); 

$json_response = curl_exec($curl); 
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

if ($status != 201) { 
    echo "error calling webservice, status is:" . $status . "\nerror text is --> "; 
    print_r($json_response); echo "\n"; 
    exit(-1); 
} 

$response = json_decode($json_response, true); 
$url = $response["url"]; 

//--- display results 
echo "\n\nNavigate to this URL to start the embedded signing view of the envelope:\n\n" . $url . "\n\n"; 

?> 

Отказ от ответственности: хотя этот код работает и достигает цели, это мой первый набег в работе с PHP, так что, вероятно, лучше (более эффективный) способ, чтобы написать этот код. Я приветствую обратную связь, если какие-либо эксперты PHP настолько склонны.

+0

Я получаю эту ошибку: { «ERRORCODE»: «INVALID_REQUEST_BODY», «сообщение»: «Тело запроса отсутствует или неправильно отформатирована Не может десериализации текущего объекта JSON (например, {\» Имя \ ": \ "value \"}) в тип 'System.Collections.Generic.List'1 [API_REST.Models.v2.compositeTemplate]', потому что для корректного десериализации дескриптора требуется массив JSON (например, [1,2,3]). – pascalallen

+0

Это означает, что DocuSign ожидает массив в месте, где вы указываете объект.Исследуйте полный след вашего запроса (используя Fiddler или аналогичный инструмент) и сравните его с примером, который я предоставил, - убедитесь, что ваш запрос задает массив для составных шаблонов (а также serverTemplates, InlineTemplates и т. Д.). –

+0

Не могу понять это. Я застрял на этом пару дней. Первоначально я думал, что помещение полей из формы в документ DocuSign будет элементарным, но это занимает очень много времени, и их документы не дают ответа на то, что я ищу. – pascalallen