2015-09-04 4 views
0

Пытается настроить Docusign, используя пример кода PHP для Requesting a signature via a template. Я все мои реквизиты установлены правильно и попытался добавить строки:Ошибки вызова Docusign API PHP

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

, но я до сих пор продолжаю получать ошибки:

ACCOUNTID = ххххххх BaseUrl = https://demo.docusign.net/restapi/v2/accounts/1135802 ошибка при вызове веб-сервиса, статус: Текст 0 Ошибка есть ->

Я также открыл брандмауэр, чтобы предотвратить какие-либо ошибки там

любые идеи, что означает ошибка

код из DocuSign является:

<?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"; 
+0

Какой «предоставленный код» вы используете? Пожалуйста, включите ссылку или поместите больше вашего sw в вопрос. –

+0

это код PHP, данный Docusign – andyc209

+0

Я подтвердил проблему в системе Window 7 с помощью WAMP. Пример отлично работает в системе Linux (я только что протестировал ее). Я продолжаю расследовать ... –

ответ

1

Ваша проблема, что вы не доверяли сертификаты CA установлен?

Как проверить

Добавить в примере кода:

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

И посмотреть, что получится.

В моем случае (работает на Windows, с WAMP), подробный вывод включены:

SSL certificate problem: unable to get local issuer certificate

Исправление для этого является установка доверенных сертификатов на местном уровне. Альтернативой является отключение проверки сертификатов, которые крайне НЕ рекомендуются !!

Установка доверенный сертификат

  1. Download the certificates from the Curl website. Сохраните файл локально, в том же каталоге, что и, например, программное обеспечение РНР, как cacert.pem

  2. Добавьте следующие два варианта оба ваших локон операций:

Поиск $ завитка = curl_init ($ URL); и добавить код после каждого экземпляра:

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

Установить список доверенных CA на уровне PHP

Еще лучше исправить установку PHP, в целом, путем настройки его для использования cacert. по умолчанию.

+1

В частности, в WAMP вам нужно будет добавить ее в конфигурацию. Файл: C: \ WAMP \ Bin \ PHP \ phpX \ php.ini Добавить следующее: [Curl] curl.cainfo = "C: /wamp/cert/cacert.pem" – Andrew

Смежные вопросы