На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Прием платежей на сайте через QIWI



Прием платежей на сайте можно организовать разными способами. Самый удобный – это посредники, агрегаторы платёжных сервисов. Однако, у большинства них жесткие условия и комиссии. Альтернатива – подключиться к платежным системам напрямую. В случае банков это непросто, но для электронные кошельков не составляет проблемы. Кроме того, помимо самих кошельков, через ПС можно платить и картами российских банков. Давайте рассмотрим пример подключения приема платежей на сайте для QIWI через api.

Условия

Вообще, данное апи предназначено для получения платежей физическими лицами. Оно так и называется - API P2P-счетов. То есть если у вас небольшой ресурс, то вы смело можете настраивать прием денежки на свой кошелек. Условие одно – он должен иметь статус «Основной», то есть вы должны ввести свои реальные данные в систему киви.



Начало

Переходим сюда https://qiwi.com/p2p-admin/api и создаем пару ключей для каждого сайта. Галочку для уведомлений на первое время можно не ставить



Получаем два ключа. Один публичный и второй приватный. Скопируйте и сохраните их.

Код фронтенд

Код условный, все в целом так будет работать, но у вас наверняка будут некоторые изменения, я же дам больше общую концепцию, как я обычно использую в работе.

Итак, первое – это некая форма, в которой пользователь будет вводить сумму, на которую хочет пополнить свой (ваш) баланс

<input type="hidden" name="account" id="account" value="<?php echo uid; ?>" />
<input type="number" value="1" id="sum" name="sum" >
<button id="add_pay" >Пополнить</button>
Здесь кнопка и два параметра – ид аккаунта (чтобы мы знали, кому пополнять баланс на сайте) и собственно сумма пополнения, по умолчанию стоит 1 рубль.

По нажатию кнопки будет выполняться вот такой JS код (я использую jQuery но вам никто не мешает использовать что-то свое)

jQuery("#add_pay").click(function() {
    jQuery.post("ajax.php", {
        user_id: jQuery("#account ").val(),
        reque: "add_pay_user",
        sum: jQuery("#sum").val()
    }).done(function(data) {
        var obj = JSON.parse(data);
        if (obj["success"] == true){
            let url = "https://oplata.qiwi.com/create?publicKey=<?php echo QIWI_PUBLIC_KEY; ?>";
            let amount = obj["sum"];
            let billId = obj["billId"];              
            let qiwi_pay_url = url + "&amount=" + amount + "&billId=" + billId;
            window.open(qiwi_pay_url, "_blank"); 
        }
        else {
            alert(obj["err"]);
        }
    });

});
Здесь

  • ajax.php – адрес файла обработчика
  • QIWI_PUBLIC_KEY – публичный ключ, который вы получали ранее
Отправляя POST-запрос к своему ajax.php мы создаем счет, возвращаем его идентификатор, формируем урл и переходим по нему, открывая ссылку в новом окне.

Как выглядит

Вот такое открывается у нас новое окно



Код бэкенд

Теперь давайте приведу примерный код файла ajax.php

$reque = $_POST["reque"];
if ($reque == "add_pay_user"){
    $sum  =  (int)$_POST["sum"];
    $user_id  = (int)$_POST["user_id"];
    $resp = array();
    $resp["success"] = true;
    $query = "INSERT INTO `pay_history` (`sum`, `user_id`) VALUES ('$sum', '$user_id');";
    $ress = (mysqli_query($conn, $query) or die (mysqli_error($conn)));
    $billId = $conn->insert_id;
    $resp["billId"] = "l2".$billId;
    $resp["sum"] = $sum;
    echo json_encode($resp);
}
А теперь нам надо проверять оплаченные счета. Вообще, сам киви рекомендует делать это через вебхуки. Однако проще проверять их самостоятельно периодически. Например, запустить на выполнение через крон скрипт примерно такого содержания

$result = $conn->query("SELECT * FROM `pay_history` WHERE l2_pay_history.pay_status = '1' ORDER by id DESC LIMIT 5");

while ($row = $result->fetch_assoc()){ 
    $billid = "l2".$row["id"];
    $user_id = $row["user_id"];
    $add_sum = $row["sum"];
    $history_payments_id = $row["id"];

    $invoice_raw = get_info_invoice($billid);
    $invoice = json_decode($invoice_raw, true);
    $status = $invoice["status"]["value"];
	//если счет оплачен
    if ($status == "PAID"){
        //обновляем баланс пользователя
        update_user_balance($user_id, $end_add_sum);
		
		//пишем, что деньги поступил
		update_history_payments_status($history_payments_id);
    }
}
Сама функция получения статуса счета

function get_info_invoice($billid){
    $token = "здесь_ваш_секретный_ключ";
    $url = "https://api.qiwi.com/partner/bill/v1/bills/$billid";
     
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
       'Content-Type: application/json',
       'Authorization: Bearer ' . $token
       ));
    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}
Для простоты и наглядности обработка ошибок везде пропущена, вам необходимо будет добавить её самостоятельно.

Итоги

Вот так несложно и быстро можно подключить к своему сайту прием платежей, оплату чего-либо. Если вам требуется платная помощь или консультация – пишите мне.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, qiwi, php, javascript

Читайте также:


Поля и методы в Java: рекурсия и стек вызовов метода
Консультация и быстрая помощь по сайту онлайн


© upread.ru 2013-2023
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.