Docusign API call errors PHP

2019-09-19 06:52发布

问题:

Trying to set up Docusign using the example PHP code for Requesting a signature via a template. I have all my account details set up correctly and have tried adding the lines:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,false);

but i still keep getting errors :

accountId = xxxxxxx baseUrl = https://demo.docusign.net/restapi/v2/accounts/1135802 error calling webservice, status is:0 error text is -->

I have also opened up the firewall to prevent any errors there

Any ideas what the error means

the code from Docusign is:

<?php
// Input your info here:
$email = "#######";         // your account email (also where this signature request will be sent)
$password = "#######";      // your account password
$integratorKey = "########";        // your account integrator key, found on (Preferences -> API page)
$recipientName = "#####";       // provide a recipient (signer) name
$templateId = "#######";        // provide a valid templateId of a template in your account
$templateRoleName = "Owner";    // use same role name that exists on the template in the console

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

/////////////////////////////////////////////////////////////////////////////////////////////////
// STEP 1 - 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"));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,false);

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

if ( $status != 200 ) {
    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";

/////////////////////////////////////////////////////////////////////////////////////////////////
// STEP 2 - Create and envelope using one template role (called "Signer1") and one recipient
/////////////////////////////////////////////////////////////////////////////////////////////////
$data = array("accountId" => $accountId, 
    "emailSubject" => "DocuSign API - Signature Request from Template",
    "templateId" => $templateId, 
    "templateRoles" => array( 
            array( "email" => $email, "name" => $recipientName, "roleName" => $templateRoleName )),
    "status" => "sent");                                                                    

$data_string = json_encode($data);  
$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! Envelope ID = " . $envelopeId . "\n\n"; 

回答1:

Is your problem that you don't have trusted CA certificates installed?

How to check

Add to the example code:

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_VERBOSE, true); #### Added
curl_setopt($curl, CURLOPT_HEADER, false);

And see what you get.

In my case, (running on Windows with WAMP), the verbose output included:

SSL certificate problem: unable to get local issuer certificate

The fix for this is to install the trusted certificates locally. The alternative is to turn off cert checking which extremely NOT recommended!!

Installing the trusted certificate

  1. Download the certificates from the Curl website. Store the file locally, in the same directory as your example php software as cacert.pem

  2. Add the following two options to both of your curl operations:

Search for $curl = curl_init($url); and add the code after each instance:

curl_setopt($curl, CURLOPT_CAINFO, "cacert.pem");
curl_setopt($curl, CURLOPT_CAPATH, ".");

Install trusted CA list at the PHP level

Even better is to fix your PHP installation, as a whole, by configuring it to use the cacert.pem by default.



标签: docusignapi