почтовый запрос php -curl

Я написал этот код:

 $data = array(
    'user' => '*****',
    'password' => '****',
     'terminal' => '******',
      'GoodURL' => '********',
       'Total' => *******,
    );
    $jsonData = json_encode($data);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://gateway20.pelecard.biz/PaymentGW/init");
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;','Content-Length: ' . strlen($jsonData)));
        if ($call == 'pay') {
            $result = curl_exec($ch);
            $serverData = json_decode($result, true);
            echo $serverData['URL'];
        }

параметры хороши в массиве data, но я всегда получаю result = false. кто-нибудь может сказать мне, что я делаю неправильно?
Спасибо


person tal azouri    schedule 10.09.2015    source источник


Ответы (1)


Вы должны реализовать обработку ошибок, и сам cURL может сообщить вам о проблеме. Используя http://php.net/manual/en/function.curl-error.php, вы можете сделать:

print __LINE__;
if ($call == 'pay') {
   $err = curl_error($ch);
   print __LINE__;
   if (!empty($err)) {
     throw new Exception($err);
   }
   $result = curl_exec($ch);
   print serialize($result);
   $serverData = json_decode($result, true);
   print_r($serverDATA);
   echo $serverData['URL'];
}

И тогда вы сможете увидеть причину сбоя. Основываясь на других частях кода, вы можете захотеть распечатать его, поместить в базу данных журнала и т. д. Создание исключения не всегда является правильным способом обработки этого.

person Aron Novak    schedule 10.09.2015
comment
Я пытался использовать ваш код, и я не получаю никакой ошибки. это правильный способ отправить запрос? - person tal azouri; 10.09.2015
comment
В целом да, это кажется законным запросом. Я обновил отладочную версию, можете попробовать еще раз? - person Aron Novak; 10.09.2015
comment
по-прежнему ничего не получается, я вижу в php.net/manual/en/function.serialize.php, что функция serialize() не обрабатывает тип ресурса. - person tal azouri; 10.09.2015
comment
Это интересно, curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); должно препятствовать тому, чтобы curl_exec() возвращал ресурс. Итак, давайте попробуем изучить ваш запрос с помощью: print_r(curl_getinfo($ch)); внизу фрагмента кода - person Aron Novak; 10.09.2015
comment
когда я печатаю curl_getinfo($ch), я получаю:Array ([url] =› gateway20.pelecard.biz /PaymentGW/init [content_type] =› [http_code] =› 0 [header_size] =› 0 [request_size] =› 0 [filetime] =› -1 [ssl_verify_result] =› 0 [redirect_count] =› 0 [total_time] => 0,047 [namelookup_time] => 0 [connect_time] => 0,016 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length ] =› -1 [upload_content_length] =› -1 [starttransfer_time] =› 0 [redirect_time] =› 0 [certinfo] =› Array ( ) [redirect_url] =› - person tal azouri; 10.09.2015
comment
Затем попробуйте следующее: stackoverflow.com/questions/4570973/ - это может быть SSL-сертификат сайта HTTPS. - person Aron Novak; 10.09.2015
comment
Хорошо, просто чтобы сделать его безопасным, а не только для меня, пожалуйста, следуйте unitstep.net/blog/2009/05/05/ — см. соответствующую часть исправления - person Aron Novak; 10.09.2015