2016-08-23 91 views
0

我在使用以下代码在我的开发人员帐户中工作时遇到问题。我不断收到以下错误:Docusign API transformPdfFields&php

“ERROR calling webservice,status is:400 error text is - > {”errorCode“:”ENVELOPE_IS_INCOMPLETE“,”message“:”The Envelope is not Complete。完整的信封需要文档,收件人,选项卡和主题行。“}”

任何人都有一个想法,为什么会出现此错误?该“检验.pdf”位于同一目录docusign.php文件是下面的代码:

///////////////////////////////////////////////////////////////////////////////////////////////// 

    // STEP 2 - Establish Credentials & Variables 

    ///////////////////////////////////////////////////////////////////////////////////////////////// 

    // Input your info here: 

    $name = "John P. Doe"; //The user from Docusign (will show on the email as the sender of the contract) 

    $email = " MY EMAIL ACCOUT USED FOR DOCUSIGN "; 

    $password = " MY PASSWORD FOR DOCUSIGN "; // The password for the above user 

    $integratorKey = " MY API KEY FOR DEMO "; 





    // construct the authentication header: 

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



    ///////////////////////////////////////////////////////////////////////////////////////////////// 

    // STEP 3 - Login (to retrieve baseUrl and accountId) 

    ///////////////////////////////////////////////////////////////////////////////////////////////// 

    $url = "https://demo.docusign.net/restapi/v2/login_information"; 

    $curl = curl_init($url); 

    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 "ERROR:<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 "\naccountId = " . $accountId . "\nbaseUrl = " . $baseUrl . "\n"; 

    echo "Document is being prepared. Please stand by.<br>Do not navigate away from this page until sending is confirmed.<br><br>"; 



    ///////////////////////////////////////////////////////////////////////////////////////////////// 

    // STEP 4 - Create an envelope using composite templates 

    /////////////////////////////////////////////////////////////////////////////////////////////////                 





    $data_string = 

    " 

     { 

      \"status\":\"sent\", 

      \"emailSubject\":\"Test transforming pdf forms and assigning them to each user\", 

      \"emailBlurb\":\"Test transforming pdf forms and assigning them to each user\", 

      \"compositeTemplates\":[ 

       { 

        \"inlineTemplates\":[ 

         { 

         \"sequence\": \"1\", 

         \"recipients\":{ 

          \"signers\":[ 

           { 

            \"email\":\"[email protected]\", 

            \"name\":\"Signer One\", 

            \"recipientId\":\"1\", 

            \"routingOrder\":\"1\", 

            \"tabs\":{ 

            \"textTabs\":[ 

             { 

              \"tabLabel\":\"PrimarySigner\", 

              \"value\":\"Signer One\" 

             } 

            ] 

            } 

           }, 

           { 

            \"email\":\"[email protected]\", 

            \"name\":\"Signer Two\", 

            \"recipientId\":\"2\", 

            \"routingOrder\":\"2\", 

            \"tabs\":{ 

            \"textTabs\":[ 

             { 

              \"tabLabel\":\"SecondarySigner\", 

              \"value\":\"Secondary One\" 

             } 

            ] 

            } 

           } 

          ] 

         } 

         } 

        ], 

        \"document\": { 

         \"documentId\": \"1\", 

         \"name\": \"test.pdf\", 

         \"transformPdfFields\": \"true\" 

        } 

       } 

      ] 

      } 

     "; 



    $curl = curl_init($baseUrl . "/envelopes"); 

    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); 

    $envelopeId = $response["envelopeId"]; 



    // --- display results 

    echo "Document is sent!<br> Envelope: " . $envelopeId . "\n\n"; 

回答

0

从我可以告诉,检验.pdf实际PDF字节不被发送,这个API请求的一部分 - 因此,错误消息说明您正在引用缺少的文档。看看如何可以从文件中读取PDF字节的PHP食谱的例子,包括在你的API请求:

https://www.docusign.com/developer-center/recipes/request-a-signature-via-email

具体而言,此行和变量:$ file_contents =的file_get_contents($ documentFileName);

+0

谢谢。我正在尝试这个配方。我在文件中拥有凭证(用户名,密码,api密钥),但它没有任何地方可以清楚地定义文件名和路径。我应该在那里添加别的东西吗?我是否必须对pdf进行编码并将字节剪切/粘贴到该php文件中? – Brent

+0

$ documentFileName应该是您的文件的路径+名称 - 如果它与您的脚本位于同一目录中,它应该只是'test.pdf'IMO。 file_get_contents PHP函数应该完成拉取PDF字节的工作 - 配方的其余部分将把这些字节放入API调用的有效负载中 –