2015-03-06 3 views
0

Я пытаюсь использовать CURL для отправки в PANDADOCS следующих полей, но по какой-то причине я получаю сообщение об ошибке, что значения не принимаются на их стороне.Отправка Curl POSTFIELDS array

Это ошибка я получаю:

"типа": "validation_error", "деталь": { "URL": [ "Это поле обязательно для заполнения."], "Имя": [ "Это поле обязательно "]}}

Я отправляю со следующим:.

$docurl = "myurl.com/document.pdf"; 
$headr = array(); 
$headr[] = 'Content-length: 0'; 
$headr[] = 'Content-Type: application/json;charset=UTF-8'; 
$headr[] = "Authorization: Bearer $ACCESS_TOKEN"; 
$url = 'https://api.pandadoc.com/public/v1/documents'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER,$headr); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 


$postfields = array(); 

$postfields['name'] = 'PSA'; 
$postfields['url'] = $docurl; 
$postfields['recipients'] = array ([0]=>array(

      ['email'] => ['[email protected]'], 
      ['first_name'] => ['don'], 
      ['last_name'] => ['jones'], 
      ['role']=>['u1'] )); 



curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( $postfields)); 
$ret = curl_exec($ch); // 

когда я print_r ($ postfields) я получаю Array ([имя] => PSA [URL] =>https://api.pandadoc.com/public/v1/documents [получатели] => Массив())

так что все поля arent получаются.

но, Что странно, что URL и имя в массиве, но не в других областях пока ошибка жалующихся не получает NAME и URL ..

ошеломленный и растерянный ...

* Hostname was found in DNS cache 
* Trying 54.190.72.92... 
* Connected to api.pandadoc.com (54.190.72.92) port 443 (#28) 
* SSL connection using TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 
* Server certificate: 
* subject: OU=GT83522468; OU=See www.rapidssl.com/resources/cps (c)14; OU=Domain Control Validated - RapidSSL(R); CN=*.pandadoc.com 
* start date: 2014-11-09 00:32:24 GMT 
* expire date: 2016-10-11 09:34:58 GMT 
* subjectAltName: api.pandadoc.com matched 
* issuer: C=US; O=GeoTrust Inc.; CN=RapidSSL SHA256 CA - G3 
* SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway. 
> POST /public/v1/documents HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2 
Host: api.pandadoc.com 
Accept: */* 
Content-length: 0 
Content-Type: application/json;charset=UTF-8 
Authorization: Bearer [ACCESS TOKEN] 

* upload completely sent off: 37 out of 37 bytes 
< HTTP/1.1 400 BAD REQUEST 
* Server nginx/1.4.6 (Ubuntu) is not blacklisted 
< Server: nginx/1.4.6 (Ubuntu) 
< Date: Fri, 06 Mar 2015 19:52:53 GMT 
< Content-Type: application/json 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Vary: Accept 
< Allow: GET, POST, DELETE, HEAD, OPTIONS 
< 
* Connection #28 to host api.pandadoc.com left intact 
+0

'$ string' никогда не определяется в вашем публикуемую коде. – arkascha

ответ

0

$string не определен.

Добавить

$string = http_build_query($postfields); 

после

$postfields = array(); 

$postfields['name'] = 'PSA'; 
$postfields['url'] = $docurl; 

// This is invalid array 
$postfields['recipients'] = array ([0]=>array(

     ['email'] => ['[email protected]'], 
     ['first_name'] => ['don'], 
     ['last_name'] => ['jones'], 
     ['role']=>['u1'] )); 

http://php.net/manual/en/function.http-build-query.php

UPDATE

Я только что прочитал Pandadoc API. Они принимают данные json, и ваши данные недействительны. Также тип контента.

Это должно работать:

<?php 

$url    = 'https://api.pandadoc.com/public/v1/documents'; 
$docurl    = "myurl.com/document.pdf"; 

$postfields   = array(); 
$postfields['name'] = 'PSA'; 
$postfields['url'] = $docurl; 
$postfields['recipients'] = array(
    array(
      'email'  => '[email protected]', 
      'first_name' => 'don', 
      'last_name' => 'jones', 
      'role'  => 'u1' 
     ) 
); 
$data_string = json_encode($postfields); 

$headr = array(); 
$headr[] = 'Content-length: '.strlen($data_string); 
$headr[] = 'Content-type: application/json'; 
$headr[] = "Authorization: Bearer $ACCESS_TOKEN"; 

$ch = curl_init($url); 

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headr); 

$result = curl_exec($ch); 

?> 
+0

Я изменил код выше, но я все еще получаю то же самое {"type": "validation_error", "detail": {"url": ["Это поле обязательно."], "Name": ["This поле ".}}} Массив ([имя] => PSA [url] => myurl.com/document.pdf [получатели] => Array()) Ошибка .. также когда I print_r ($ postfields), ключи и значения для ['получателей] отсутствуют –

+0

Эй, эти изменения сработали! Ты мужчина. Я потратил весь день на это, и вы привязали его! Ты мужчина!! –

+0

Я попытался проголосовать за это, но я не смог, так как мне нужна репутация 15, но вы действительно ответили на мой вопрос. –

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