За последние 24 часа нас посетили 18096 программистов и 1700 роботов. Сейчас ищут 1533 программиста ...

JSON POST-запрос на php

Тема в разделе "PHP для новичков", создана пользователем adept77, 28 ноя 2022.

  1. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    Знатоки,есть что по теме сказать - милости прошу... иначе -нефига тему засирать)))
     
  2. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    CURLOPT_URL=>$url.'/ping',

    Это что за запись такая ? нигде не могу инфу найти.
    так тоже можно пинговать ?
    --- Добавлено ---
    добрался до того, что выдал ошибку file type P12 for certificate not supported

    т.е. curl не поддерживает сертификаты *.p12 ???
    кто знает ?
    Либо может есть какой-то другой путь авторизации, без curl
     
  3. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71

    Вложения:

    • ответ.jpg
      ответ.jpg
      Размер файла:
      23,8 КБ
      Просмотров:
      2
    adept77 нравится это.
  4. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    нет, не такой.
    у меня - {"message":"PONG!","date":"2022-11-30 14:53:00"}
    адрес правильный
    только этот ответ я получил, если прохожу по твоей ссылке.
    если же делаю отдельный файл bzk.php :
    Код (Text):
    1. <?php
    2. $ch = curl_init('https://sandboxapi.paymtech.kz/ping');
    3. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    4. $result = curl_exec($ch);
    5. curl_close($ch);
    6. print_r($result);
    7. ?>
    то выводится просто пустая страница
     
  5. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    У меня bad request 400 если перехожу по ссылке.
    А если в этот же файл который выше добавить
    curl_setopt для
    CURLOPT_SSLCERT =>'umit_life.p12',
    CURLOPT_SSLCERTTYPE => 'P12',
    CURLOPT_SSLCERTPASSWD =>'W111111'
    вот этих значений?
    Это я так написал?
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
     
    adept77 нравится это.
  6. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    bad request 400 - это потому что у тебя сертификата нет, скорее всего. Но пинг же у тебя проходит.
    у меня пинг не проходит. Что не так делаю ?
     
  7. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Я просто перехожу в браузере из адресной строки. У тебя в файле bzk.php в строчке
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    тоже array ? Сделай просто строку.
    curl_setopt($ch, CURLOPT_HTTPHEADER, 'Content-Type:application/json');

    И про сертификаты добавь в этот файл информацию.
     
    adept77 нравится это.
  8. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    так совсем грубо ругается:
    Warning: curl_setopt() [function.curl-setopt]: You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in Z:\home\umit\www\ping.php on line 5

    Код (Text):
    1. <?php
    2.  
    3. $ch = curl_init('https://sandboxapi.paymtech.kz/ping');
    4. curl_setopt($ch, CURLOPT_HTTPHEADER, 'Content-Type: application/json');
    5. $ch_post= array(
    6.     //CURLOPT_URL=>$url.'/ping',
    7.     CURLOPT_POST => TRUE,
    8.     CURLOPT_RETURNTRANSFER =>FALSE,
    9.     CURLOPT_TIMEOUT =>10,
    10.     CURLOPT_SSLCERT =>'umit_life.p12',
    11.     CURLOPT_SSLCERTTYPE => 'P12',
    12.     CURLOPT_SSLCERTPASSWD =>'W11111'
    13. );
    14. curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
    15. curl_setopt($ch,CURLOPT_USERPWD,"umit_life:b11111");
    16. curl_setopt_array($ch,$ch_post);
    17.  
    18.  
    19. $result = curl_exec($ch);
    20. curl_close($ch);
    21. print_r($result);
    22.  
    23. ?>

    --- Добавлено ---
    Да и кстати, хотел попутно вопрос
    У меня не дает определить массив таким образом:
    Код (Text):
    1. $post_data =[
    2.     'field1'=>'val_1',
    3.     'field2'=>'val_2',
    4. ];
    сразу браузер ошибку синтаксиса выдает
    разрешает только так:
    Код (Text):
    1. $post_data =array(
    2.     'field1'=>'val_1',
    3.     'field2'=>'val_2',
    4. );
     
  9. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    922
    Симпатии:
    143
    @adept77, не можешь прочесть ман на уровне "ы", иди в другой топик, скажи спасибо, что некоторые люди тратят своё личное время на тебя.
    адепт, блин.
     
  10. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    а у тебя ЧСВ не позволяет помогать неопытным ? Или квалификация ? Выучил наизусть мануал по "echo" ? И заняться больше нечем, кроме как хрень писать ? Ну так будь счастлив. Этот топик не для тебя. Он так и называется - PHP для новичков.
    P.S. Ну а уж если ты такой крутой спец, накидал бы уже нужный скрипт и объяснил людям, как работает. Нет ? До свиданья, не мешай
     
  11. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    922
    Симпатии:
    143
    > Необходимо отправить POST-запрос на платежную систему
    То есть ты для денег забесплатно решений хочешь?
    Нужный скрипт накидаю на взаимовыгодных условиях, пока ты этого не поймёшь, далеко не уедешь.
     
  12. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    от тебя вообще ничего не хочу. откуда ты тут взялся ? и нафиг навязываешься ? Хотел бы купить скрипт - купил, а мне надо самому разобраться. Сказал же - до свиданья.
     
  13. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Надо определить параметры либо в массиве либо по отдельности.
    Тогда вставь в массив еще элемент
    CURLOPT_HTTPHEADER => 'Content-Type: application/json'
    а curl_setopt(CURLOPT_HTTPHEADER, 'Content-Type: application/json') убери
    Массив через квадратные скобки не определить, потому что версия php не позволяет
     
    adept77 нравится это.
  14. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    теперь ругается на 16 строку:
    Warning: curl_setopt_array() [function.curl-setopt-array]: You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in Z:\home\umit\www\ping.php on line 16
    т.е. как я понимаю, опять же этот параметр ему не нравится...
    --- Добавлено ---
    т.е. если даешь для CURLOPT_HTTPHEADER параметр массив, то возвращает NULL
    если без массива, то ругается

    CURLOPT_HTTPHEADER => array('Content-Type: application/json');
     
  15. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    нашел вот еще одну тему про сертификаты. там говорят, что curl не понимает р12, нужно перевести его в pem
    В итоге написал:
    Код (Text):
    1. $certs = array();
    2. $pkcs12 = file_get_contents("umit_life.p12");
    3. openssl_pkcs12_read( $pkcs12, $certs, "W1111111" );
    4. file_put_contents('cert/cert.pem', $certs['cert']);
    5. file_put_contents('cert/priv.key', $certs['pkey']);
    6.  
    7. $curl = curl_init();
    8.  
    9. curl_setopt($curl,CURLOPT_CUSTOMREQUEST,"POST");
    10. curl_setopt($curl,CURLOPT_URL,"https://sandboxapi.paymtech.kz");
    11. curl_setopt($curl,CURLOPT_POST,0);
    12. curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    13. curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,1);
    14. curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,1);
    15. //curl_setopt($curl,CURLOPT_CAINFO,'C:/www/html/web_site/certificates/CA.cert');
    16. curl_setopt($curl,CURLOPT_SSLCERT,'cert/cert.pem');
    17. curl_setopt($curl,CURLOPT_SSLKEY,'cert/priv.key');
    18. curl_setopt($curl,CURLOPT_SSLCERTPASSWD,"W1111111");
    19. curl_setopt($curl,CURLOPT_SSLKEYPASSWD,"W1111111");
    20. curl_setopt($curl,CURLOPT_USERPWD,"umit_life:b111111");
    21. $array = array(
    22. 'AMOUNT' => $_POST['AMOUNT'],
    23. 'CURRENCY' => $_POST['CURRENCY'],
    24. 'MERCHANT_ORDER_ID' => $_POST['MERCHANT_ORDER_ID'],
    25. 'DESCRIPTION' => $_POST['DESCRIPTION']
    26. );
    27. curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    28. curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($array));
    29. curl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
    30.  
    31. $result = curl_exec($curl);
    32. curl_close($curl);
    33.  
    34. $obj = json_decode($result,true);
    35.  
    36. var_dump($obj);
    не пойму только, откуда берется это //curl_setopt($curl,CURLOPT_CAINFO,'C:/www/html/web_site/certificates/CA.cert');

    Хотя результат тот же самый, возвращается страница пустая
     
  16. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Какой вид запроса ты делаешь? Давай получим код ошибки.
    if ($result===false) echo curl_error($curl);
     
    #66 antoniii, 30 ноя 2022
    Последнее редактирование: 30 ноя 2022
    adept77 нравится это.
  17. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    выдает ошибку:
    unable to use client certificate (no key found or wrong pass phrase?)NULL
    это он какой ключ найти не может ? или дело в путях ?
     
  18. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    А путь у тебя правильный URL ? Кто тебе давал сертификат, он должен быть рабочий.
     
    adept77 нравится это.
  19. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    должен быть рабочий... мне их дали два - один на апи, другой - на админку. в админку заходит норм
    скорее всего и второй тоже рабочий
    --- Добавлено ---
    file_put_contents('cert/cert.pem', $certs['cert']);
    file_put_contents('cert/priv.key', $certs['pkey']);

    вот здесь он нормально вытаскивает массив и раскладывает по файлам
    в curl ставлю те же пути, по которым положил их
     
  20. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Ну ошибка говорит что либо ключ не найден либо пароль неверный. Ты у кого взял эти данные? Может у них шпаргалка есть получше?
     
    adept77 нравится это.
  21. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    да в том то и проблема, что сидят тоже такие же, у кого вместо знаний одни понты... "Вы вам инструкцию дали, разбирайтесь, это не наша компетенция"
    --- Добавлено ---
    Щас попробую за ключи узнать еще раз
    --- Добавлено ---
    установил этот серт себе на комп в винду, пароль нормальный
    --- Добавлено ---
    указал абсолютный путь до сертификата
    SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failedNULL
    --- Добавлено ---
    или может попробовать вернуть первоначальный скрипт?? там где было
    CURLOPT_SSLCERT =>'umit_life.p12',
    CURLOPT_SSLCERTTYPE => 'P12'
     
  22. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    А что если отключить проверку:
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    Что изменится?
     
    adept77 нравится это.
  23. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    закомментил, ничего не изменилось, ошибка та же
    SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failedNUL
    --- Добавлено ---
    вот он ругается : verify that the CA cert is OK.
    Это не на отсутствие вот этого //curl_setopt($curl,CURLOPT_CAINFO,'/CA.cert'); ????
    только что это за серт и откуда его брать ?
     
  24. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Какие еще запросы ты делал к API? Были успешные с информацией? В книжке нет информации про сертификаты. Там про базовую аутентификацию с логином и паролем.
     
    adept77 нравится это.
  25. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    попробовал вернуть Р12, нет, не понимает
    --- Добавлено ---
    только пинг проходит, другие не делал. я так понимаю, что пока сертификаты не сойдутся, ни один запрос не проходит
    --- Добавлено ---
    вот скрин админки
     

    Вложения:

    • 113.png
      113.png
      Размер файла:
      27,9 КБ
      Просмотров:
      2