отправка Curl POSTFIELDS массив

0

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

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

"type": "validation_error", "detail": {"url": ["Это поле обязательно."], "name": ["Это поле обязательно."]}}

Я публикую следующее:

$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 ([name] => PSA [url] => https://api.pandadoc.com/public/v1/documents [recipients] => Array())

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

но что wierd в том, что URL и NAME находятся в массиве, но не в других полях, но ошибка вызывает жалобы на отсутствие 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 никогда не определяется в вашем размещенном коде.
Теги:
arrays
curl

1 ответ

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

ОБНОВИТЬ

Я просто прочитал API Pandadoc. Они принимают данные 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": ["Это поле обязательно для заполнения . "]}} Массив ([имя] => PSA [url] => myurl.com/document.pdf [получатели] => Массив ()) Ошибка .. также, когда я печатаю__ ($ postfields), ключи и значения для ['получателей'] отсутствует
  • 0
    Эй, эти изменения сработали! Ты человек. Я потратил на это весь день, а ты это сделал !! Ты человек!!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню