PHP Гайд Автооплата через QIWI (VK Keyboard BOT)

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,130
Ждал такой же гайд от @Pakulichev, но кажется он не хотел.
Мне не очень нравится принимать платежи через QIWI, есть огромное множество других платежных сервисов, которые предоставляют большее количество возможностей и способов оплаты. Да, большинство из них недоступно для физических лиц, но при этом доступно для самозанятых. Стать самозанятым, проживая в России, можно в пару кликов, не посещая никакие органы и не заполняя никаких документов, так что все пути открыты.

Более того, для подписок функция рекуррентных платежей незаменима, а в QIWI её нет.
 
  • Нравится
Реакции: etereon

hinazuki

Потрачен
Автор темы
346
95
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Мне не очень нравится принимать платежи через QIWI, есть огромное множество других платежных сервисов, которые предоставляют большее количество возможностей и способов оплаты. Да, большинство из них недоступно для физических лиц, но при этом доступно для самозанятых. Стать самозанятым, проживая в России, можно в пару кликов, не посещая никакие органы и не заполняя никаких документов, так что все пути открыты.

Более того, для подписок функция рекуррентных платежей незаменима, а в QIWI её нет.
Мне тоже QIWI не нравится, но я не являюсь гражданином РФ, так что не могу исползвать платежные системы. А те платежные системы без подверждение ФЛ - СКАМ проэкт.

Всеравно не работает
Прямые руки надо иметь, я все расписал от А до Я.
 

Rafaelofff

Потрачен
120
5
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А у меня вопрос, где ты взял это?
Код:
require("vendor/autoload.php"); // Для qiwi
simple vk понятно, скачал и закинул в папку со скриптом, но где ты взял vendor/autoload.php???
Уже час не понимаю где же ты это взял, на гитхабе про это я не нашёл, объясни тупому?
 

hinazuki

Потрачен
Автор темы
346
95
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А у меня вопрос, где ты взял это?
Код:
require("vendor/autoload.php"); // Для qiwi
simple vk понятно, скачал и закинул в папку со скриптом, но где ты взял vendor/autoload.php???
Уже час не понимаю где же ты это взял, на гитхабе про это я не нашёл, объясни тупому?
через composer либу устоновил устоновил.
1644032547069.png
 

Rafaelofff

Потрачен
120
5
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я не понимаю, всё вроде ок сделал, но не работает, все ключи правильные

Код:
<?php

require_once('simplevk-master/autoload.php');
require("vendor/autoload.php"); // Для qiwi
use DigitalStar\vk_api\VK_api as vk_api; // Основной класс

const VK_KEY = "";  // Токен сообщества
const ACCESS_KEY = "";  // Тот самый ключ из сообщества
const VERSION = "5.126"; // Версия API VK
const SECRET_KEY = '';

$vk = vk_api::create(VK_KEY, VERSION)->setConfirm(ACCESS_KEY); // Авторизация


$billPayments = new Qiwi\Api\BillPayments(SECRET_KEY); // Авторизация
$billId = $billPayments->generateId(); // Генерируем billId для работы сервисов qiwi
$lifetime = $billPayments->getLifetimeByDay(0.5); // Cколько будет жить счет для оплаты, по стандарту 24 часа
$customFields = ['themeCode' => 'Aleksandr-BUHUPSgUZw']; // Cюда вставляем тот самый код с раздела "Форма приема переводов"


$btn_1 = $vk->buttonText('Купить', 'green', ['command' => 'btn_1']); // Кнопки
$btn_2 = $vk->buttonText('Информация', 'blue', ['command' => 'btn_2']);


$vk->initVars($peer_id, $message, $payload, $vk_id, $type, $data); // Инициализация переменных. Проще говоря библиотека сама создает нужные переменные


if ($data->type == 'message_new') {


    if ($message == 'Начать') {
        $vk->sendButton($peer_id, "Меню:", [[$btn_1, $btn_2]]);
    }
    if ($message == 'Информация') { // Вторая кнопка
        $vk->sendMessage($peer_id, "Информация о товаре бла бла бла");
    }



    if (isset($data->object->payload)) {  //получаем payload
        $payload = json_decode($data->object->payload, True);
    } else {
        $payload = null;
    }
    $payload = $payload['command'];




// Теперь пишем действия с кнопками
    if ($payload == 'btn_1') // Первая кнопка
        $fields = [ // Нужные переменные для создание счета
            'amount' => 1, // Сумма
            'currency' => 'RUB', // Валюта
            'comment' => $vk_id, // В коментарий записываем id ползвителя который покупает
            'expirationDateTime' => $lifetime, // Сколько будет жить счет
            'customFields' => $customFields, // Стиль
        ];
        $response = $billPayments->createBill($billId, $fields); // Создаем счет
        $payUrl = $billPayments->getPayUrl($response, "https://vk.com/"); // Генерируем ссылку оплаты
        $vk->sendMessage($peer_id, "Для оплаты можете перейти по ссылке: $payUrl\n"); // Отправляем ссылку
    if ($payload == 'btn_2')
 

    if ($message == 'Отключить')
        $vk->sendButton($peer_id, "Кнопки скрыты, снова вызвать их, отправьте Начать, Ваш ID $vk_id", [[]]);


        }
?>
 

hinazuki

Потрачен
Автор темы
346
95
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Xnj
Я не понимаю, всё вроде ок сделал, но не работает, все ключи правильные

Код:
<?php

require_once('simplevk-master/autoload.php');
require("vendor/autoload.php"); // Для qiwi
use DigitalStar\vk_api\VK_api as vk_api; // Основной класс

const VK_KEY = "";  // Токен сообщества
const ACCESS_KEY = "";  // Тот самый ключ из сообщества
const VERSION = "5.126"; // Версия API VK
const SECRET_KEY = '';

$vk = vk_api::create(VK_KEY, VERSION)->setConfirm(ACCESS_KEY); // Авторизация


$billPayments = new Qiwi\Api\BillPayments(SECRET_KEY); // Авторизация
$billId = $billPayments->generateId(); // Генерируем billId для работы сервисов qiwi
$lifetime = $billPayments->getLifetimeByDay(0.5); // Cколько будет жить счет для оплаты, по стандарту 24 часа
$customFields = ['themeCode' => 'Aleksandr-BUHUPSgUZw']; // Cюда вставляем тот самый код с раздела "Форма приема переводов"


$btn_1 = $vk->buttonText('Купить', 'green', ['command' => 'btn_1']); // Кнопки
$btn_2 = $vk->buttonText('Информация', 'blue', ['command' => 'btn_2']);


$vk->initVars($peer_id, $message, $payload, $vk_id, $type, $data); // Инициализация переменных. Проще говоря библиотека сама создает нужные переменные


if ($data->type == 'message_new') {


    if ($message == 'Начать') {
        $vk->sendButton($peer_id, "Меню:", [[$btn_1, $btn_2]]);
    }
    if ($message == 'Информация') { // Вторая кнопка
        $vk->sendMessage($peer_id, "Информация о товаре бла бла бла");
    }



    if (isset($data->object->payload)) {  //получаем payload
        $payload = json_decode($data->object->payload, True);
    } else {
        $payload = null;
    }
    $payload = $payload['command'];




// Теперь пишем действия с кнопками
    if ($payload == 'btn_1') // Первая кнопка
        $fields = [ // Нужные переменные для создание счета
            'amount' => 1, // Сумма
            'currency' => 'RUB', // Валюта
            'comment' => $vk_id, // В коментарий записываем id ползвителя который покупает
            'expirationDateTime' => $lifetime, // Сколько будет жить счет
            'customFields' => $customFields, // Стиль
        ];
        $response = $billPayments->createBill($billId, $fields); // Создаем счет
        $payUrl = $billPayments->getPayUrl($response, "https://vk.com/"); // Генерируем ссылку оплаты
        $vk->sendMessage($peer_id, "Для оплаты можете перейти по ссылке: $payUrl\n"); // Отправляем ссылку
    if ($payload == 'btn_2')
 

    if ($message == 'Отключить')
        $vk->sendButton($peer_id, "Кнопки скрыты, снова вызвать их, отправьте Начать, Ваш ID $vk_id", [[]]);


        }
?>
Что именно не работает? Скрипт крашится? Бот не отвечает на сообщение? Не генерируется ссылка оплаты?
 

Rafaelofff

Потрачен
120
5
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Xnj

Что именно не работает? Скрипт крашится? Бот не отвечает на сообщение? Не генерируется ссылка оплаты?
Вообщем закидываю скрипт на хостинг, до того как я вставлял это
5h0W4BATpU4.jpg

Бот на вк работал, вставил это и теперь после перехода по ссылке не выдаёт ok.
Я так понимаю я что-то не подключил, что именно?
 

hinazuki

Потрачен
Автор темы
346
95
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вообщем закидываю скрипт на хостинг, до того как я вставлял это
5h0W4BATpU4.jpg

Бот на вк работал, вставил это и теперь после перехода по ссылке не выдаёт ok.
Я так понимаю я что-то не подключил, что именно?
Покажи файлы который ты кинул на хостинг
 

Rafaelofff

Потрачен
120
5
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1644049410836.png
 

Rafaelofff

Потрачен
120
5
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Скачай архив под постом, скопируй с архива папку vendor и закинь на хостинг.
Извини меня дауна, я не заметил архив под постом, то есть я настроил бота в вк и секрет кей и всё больше ничего не нужно? Всё будет работать?
 

hinazuki

Потрачен
Автор темы
346
95
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

McKinfinn

Новичок
4
1
Hinazuki, достаточно информативный гайд. Несмотря на то, что достаточно большой промежуток времени работаю с VK API и SimpleVk, подчеркнул для себя некоторые новые вещи. Свободно запустил на локальной машине, используя локальный сервер и Ngrok для создания туннеля. Хотя и разрабатываю собственный класс для работы с VK API, это будет не лишним. Спасибо)
 
  • Нравится
Реакции: norrthh

Livarka

Известный
155
65
Ты защиту делал от повторного уведомления от киви? Они любят даже после успешной оплаты дублировать на сервер Инфу об оплаченном счете и баланс/товар будет выдан повторно
 

hinazuki

Потрачен
Автор темы
346
95
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ты защиту делал от повторного уведомления от киви? Они любят даже после успешной оплаты дублировать на сервер Инфу об оплаченном счете и баланс/товар будет выдан повторно
За годы исползвание такого не было. Можеь если появится свободное время сделаю.