За последние 24 часа нас посетили 95611 программистов и 6260 роботов. Сейчас ищут 1438 программистов ...

совет отправка данных методом POST

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

  1. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    Задача такая: на форме 5 скрытых полей, и одно поле ввода.
    Необходимо:
    1.Пользователь ввел данные в форму (сделано)
    2. скрипт собрал все 6 значений в одну строку (сделано)
    3. зашифровал строку sha512 (сделано). Причем ключ шифрования не должен показываться на стороне клиента, значит, как я понял JS-скрипт отпадает, только ПХП
    4. отправить POST на другой ресурс (доступа к нему нет) - вот тут затык...
    т.е. после нажатия submit я получаю данные в массиве POST, выковыриваю и делаю шифрованную строку. А дальше как ? кто может пояснить, как сделать ?.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    4 - а другой ресурс ожидает, что ты на него с бэка будешь отправлять? Если это не открытое апи, то у нас запрещено такое обсуждать
    Захешировал. Какой там ключ? Наверное, подпись имеется в виду, а не шифрование.
     
  3. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    другой ресурс ожидает. это открытое апи, тут проблем нет

    ну да, захешировал ) сделал подпись.

    $r="01234567890123456789012";
    $Vs = $_POST["order"].";".$_POST["amount"].";".$_POST['currency'].";".$_POST['merchant'].";".$_POST['terminal'].";";
    $vSign = hash('sha512', $r.$Vs);

    вот теперь мне надо отправить в post значения $Vs и $vSign.
    как их отправить ? из этой же веб-страницы делается или надо отдельную формировать? и как отправлять - есть разница отправлять переменную $Vs или все-таки отправлять полную строку $_POST["order"].";".$_POST["amount"].";".$_POST['currency'].";".$_POST['merchant'].";".$_POST['terminal'].";"; ??
     
  4. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    Требование по инструкции к апи:
    На шаге 2 запрос коммерсанта должен быть в отправлен в ecom методом POST на адрес
    https://jpay.jysanbank.kz/ecom/api параметры запроса: (все вот эти поля плюс подпись)
    или я где-то недопонимаю и как следствие сам себе усложняю все ?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    curl ом отправляйте
     
  6. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    $Vs = $_POST["order"].";".$_POST["amount"].";".$_POST['currency'].";".$_POST['merchant'].";".$_POST['terminal'].";";
    $vSign = hash('sha512', $r.$Vs);
    $post_data = array (
    'vS' => $Vs,
    'vSign' => $vSign
    );

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

    $output = curl_exec($ch);

    curl_close($ch);


    вот такой код. Где ошибка ?
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    так и хочется сказать - в ДНК...

    посмотрите ответ - вам сервер должен сказать что не так.... Вангую что неверно строку собираете

    в API должно четко говорится - какие данные и в каком формате оно ждет
     
  8. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    За что люблю старожилов - за точные и конкретные ответы ))))

    а если точнее, то в описании апи говорится: На шаге 2 запрос коммерсанта должен быть в отправлен в ecom методом POST на адрес
    https://jpay.jysanbank.kz/ecom/api параметры запроса: (все вот эти поля плюс подпись)
    от сервера пока ответа нет, либо я не понимаю где смотреть
    если не сложно, можно пальцем ткнуть, куда посмотреть ?
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    блин... новый Мессинг...
    да откуда знаем что там в АПИ говорится, вы его нам походу своими словами пересказываете...
    обычно это просто каждое поле передается как есть .. а подпись - вычисляется
    то есть
    PHP:
    1. [
    2. 'order' => $_POST['order'],
    3. 'amount' => $_POST['amount'],
    4. 'sign' => $vSign
    5. ]
    итд ... очень чето сомневаюсь что у вас поля должны называться vS, vSign ... и сформированы именно таким образом
     
    #9 ADSoft, 21 окт 2022
    Последнее редактирование: 21 окт 2022
    don.bidon нравится это.
  10. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    не, это цитата из их методички, только вместо моих слов - (все вот эти поля плюс подпись) там идет таблица перечисляющая все поля, поэтому заменил

    как форму сделать и из нее получить запрос - это понятно. У меня заморочка вот в чем:
    Посетитель сайта вводит сумму на форме, идентификаторы мерча и остальные данные - скрытые поля на этой же форме.
    Я беру эти значения, формирую подпись: $vSign = hash('sha512', $r.$Vs);
    не понимаю, как эту подпись добавить в рост-запрос...
    Запрос формируется при нажатии кнопки отправить, после того как посетитель ввел данные. Но он же сразу же формируется и тут же отправляется. В какой момент успеть из этих данных сделать подпись и прицепить ее к запросу ?
    т.е. посетитель ввел данные в поле. Но пока он не нажал сабмит, эти данные еще не поступили в бэк, т.е. я не могу сформировать подпись. А после того как он нажал сабмит, запрос уже отправился в апи.
    Вот этот момент не понимаю
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну а зачем формировать подпись до того, как данные поступили на бэк? Секретный ключ для подписи вообще на фронте мелькать не должен, иначе он уже не секретный. А у тебя чтой-то вроде банка, я так понимаю. Секретный ключ хранится где-то на сервере, в БД, например, или можно в переменную окружения засунуть, в код, в конфиг файл. Смотря по задаче.
     
    #11 mkramer, 21 окт 2022
    Последнее редактирование: 21 окт 2022
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Смотри, по ходу ты не понимаешь, как это работает, и зачем всё это нужно. Когда дело идёт о деньгах, важна дополнительная защита данных. sha512, как и все другие методы шифрования - необратимая процедура, т.е. после того, как что-то захешировали, уже "расхешировать" невозможно.

    Поэтому принцип подобных подписей работает так (я участвовал в разработке нескольких подобных, так что знаю, про что говорю):
    1. Секретный ключ хранится у платёжной системы и на бэке у мерчанта.
    2. Когда мерчант присылает подписанные данные, платёжная система достаёт из своей базы этот ключ, и подписывает данные ещё раз. После этого проверяет, совпала ли пересчитанная подпись с той, которую прислал мерчант.
    3. Это ещё более важно при обратных запросах, от платёжной системы к бэку мерчанта
    4. Если ты засветишь секретный ключ на фронте, придёт злой-злой хакер, и будет от твоего имени слать платёжной системе запросы, и она их будет пропускать, и наоборот.
    5. Дальше надо смотреть какое конкретный апи. Иногда нужно не просто сделать пост запрос, а чтоб он произошёл именно в браузере. В таком случае можно передать на фронт собственно подпись, это безопасно, без секретного ключа она не представляет никакой ценности. Дальше уже можно смотреть по задачам, к примеру можно кинуть на бэк данные аяксом и получить назад подпись. Покажи нам цитату непосредственно, как написано в документации твоего банка, потому что так нифига не понятно.
     
  13. adept77

    adept77 Новичок

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

    Вложения:

    • 1.png
      1.png
      Размер файла:
      127,5 КБ
      Просмотров:
      7
    • 2.png
      2.png
      Размер файла:
      108,2 КБ
      Просмотров:
      6
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну так у тебя просят одно отправить, а ты отправляешь совсем другое. Мой совет - нанять кого-нибудь (себя не предлагаю), а то ты так долго будешь возиться
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Но вообще, надо ещё смотреть по апихе, потому что обычно такие запросы не делаются курлом. Обычно формируется форма на сервере, в которой заполнены все нужные поля (с подписью включительно), отправляется на фронт и там уже в браузере субмитится, либо традиционным способом (т.е. показывается кнопка "оплатить", и юзверь её кликает), либо автоматически через жабаскрипт. Ну и параметр Language говорит, что тут та же история
     
  16. adept77

    adept77 Новичок

    С нами с:
    19 окт 2022
    Сообщения:
    61
    Симпатии:
    0
    В принципе, я сделал. не знаю, насколько профессионально)))
    Я сделал так: сделал форму - поля для посетителя плюс скрытые поля с моими данными.Посетитель заполняет форму своими данными, отправляет post на другую страницу. На второй странице из post вытаскиваю все, что мне нужно, делаю подпись и запихиваю все это в форму со скрытыми полями. На второй странице (со скрытой формой) есть одна единственная кнопка для юзера - Оплатить "сумма". (типа подтвердите). Юзер подтверждает, нужный мне post уходит уже на api банка.
    Может, кому такой костыль пригодится ))
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну вообще не костыль, а именно так и делается. Вместо кнопки оплатить можно скриптик поставить, который будет метод submit у формы вызывать
    HTML:
    1.  
    2. <form id='f1' method='post' action=...>....</form>
    3. <script>f1.submit(); </script>
    4.