
26.01.2022, 09:47
|
|
Постоянный
Регистрация: 12.01.2021
Сообщений: 343
С нами:
2808522
Репутация:
48
|
|
Настройка всех нужных вещей:
Сообщение от Спойлер
Начнем с настройки группы, создаем или используем уже существующую группу.
1) Нажимаем на управление:
1643171926705.pnghinazuki · 26 Янв 2022 в 08:47' data-fancybox="lb-post-955382" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/133370/" style="cursor: pointer;" title="1643171926705.png">

2) Переходим в раздел "Работа с API":
1643172028983.pnghinazuki · 26 Янв 2022 в 08:47' data-fancybox="lb-post-955382" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/133371/" style="cursor: pointer;" title="1643172028983.png">

3) Cоздаем токен и подверждаем необходимое:

4) Переходим в раздел "Callback API", выбираем версию API - 5.126, в строку адрес пишем свой сайт с ботом, и так же сохраняем секретный ключ:

5) Переходим в раздел "Типы событий", делаем как на скрине:

6) Последний пункт, выбираем "Long Poll API", включаем его, выбираем версию API - 5.126, переходим в событий и делаем так же:


7) Включаем сообщение бота и функций ботов в настройках, и так же кнопку начать.
Готово!
Переходим теперь к коду.
Загружаем все нужные либы и классы для работы:
PHP:
Код:
require_once
(
'simplevk-master/autoload.php'
)
;
// Для работы с ВК ботом
require
(
"vendor/autoload.php"
)
;
// Для qiwi
use
DigitalStar\vk_api\VK_api
as
vk_api
;
// Основной класс для работы с ботом
Начнем с бота вк:
PHP:
Код:
const
VK_KEY
=
"e5cfac8b5ed93c5550000000000000000000000000000000000000000009e0fbd4d0341090ee9f"
;
// Токен сообщества
const
ACCESS_KEY
=
"31ce192d"
;
// Тот самый ключ из сообщества
const
VERSION
=
"5.126"
;
// Версия API VK
$vk
=
vk_api
:
:
create
(
VK_KEY
,
VERSION
)
-
>
setConfirm
(
ACCESS_KEY
)
;
// Авторизация
$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
,
"Вы нажали на вторую кнопку."
)
;
// Вторая кнопка, если будете менять название кнопок в 8 строке, поменяйте тоже на 18 строке
}
if
(
isset
(
$data
-
>
object
-
>
payload
)
)
{
//получаем payload
$payload
=
json_decode
(
$data
-
>
object
-
>
payload
,
True
)
;
}
else
{
$payload
=
null
;
}
$payload
=
$payload
[
'command'
]
;
// Теперь пишем действия с кнопками
if
(
$payload
==
'btn_1'
)
// Первая кнопка, тут не надо ничего менять
$vk
-
>
sendMessage
(
$peer_id
,
"Вы нажали на первую кнопку."
)
;
if
(
$message
==
'Отключить'
)
// Отключение кнопок, на всякий
$vk
-
>
sendButton
(
$peer_id
,
"Кнопки скрыты, снова вызвать их, отправьте Начать, Ваш ID $vk_id"
,
[
[
]
]
)
;
}
Проверяем

Как видим все работает!
Теперь работаем с qiwi.
Чтобы создать счет для оплаты:
PHP:
Код:
const
SECRET_KEY
=
''
;
// Вставляем сюда секретный ключ который взяли с сайта p2p qiwi
$billPayments
=
new
Qiwi\Api\BillPayments
(
SECRET_KEY
)
;
// Авторизация
$billId
=
$billPayments
-
>
generateId
(
)
;
// Генерируем billId для работы сервисов qiwi
$lifetime
=
$billPayments
-
>
getLifetimeByDay
(
0.5
)
;
// Cколько будет жить счет для оплаты, по стандарту 24 часа
$customFields
=
[
'themeCode'
=
>
'СЮДА'
]
;
// Cюда вставляем тот самый код с раздела "Форма приема переводов"
$fields
=
[
'amount'
=
>
1
,
// Сумма
'currency'
=
>
'RUB'
,
// Валюта
'comment'
=
>
$vk_id
,
// Комментарий, $vk_id так как с помощью этого будем делать автопроверку на оплату.
'expirationDateTime'
=
>
$lifetime
,
// Сколько будет жить
'customFields'
=
>
$customFields
,
// Стиль темы
]
;
$response
=
$billPayments
-
>
createBill
(
$billId
,
$fields
)
;
// Cоздаем счет
$payUrl
=
$billPayments
-
>
getPayUrl
(
$response
,
"https://vk.com/"
)
;
// Ссылка счета
Проверяем.
1643174349259.pnghinazuki · 26 Янв 2022 в 08:47' data-fancybox="lb-post-955382" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/133384/" style="cursor: pointer;" title="1643174349259.png">

Всё работает, ссылка генериуется.
Объединяем весь код, и у нас получается готовый бот которые генериует ссылку для оплаты:
PHP:
Код:
setConfirm(ACCESS_KEY); // Авторизация ВК
$billPayments = new Qiwi\Api\BillPayments(SECRET_KEY); // Авторизация qiwi
$billId = $billPayments->generateId(); // Генерируем billId, для создание счета
$lifetime = $billPayments->getLifetimeByDay(0.5); // Сколько будет жить счет оплаты
$customFields = ['themeCode' => 'стиль сюда']; // Стиль счета
$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", [[]]);
}
Бот готов, проверяем:

1643174816372.pnghinazuki · 26 Янв 2022 в 08:47' data-fancybox="lb-post-955382" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/133389/" style="cursor: pointer;" title="1643174816372.png">

Как видим все работает.
Мы сделали только часть бота вк и создание ссылки для оплтаты. Теперь проверка оплаты счета.
Для этого создаём отдельный php скрипт на хостинге:
PHP:
Код:
require
(
"vendor/autoload.php"
)
;
// Подключаем либы
require_once
(
'simplevk-master/autoload.php'
)
;
use
DigitalStar\vk_api\VK_api
as
vk_api
;
const
VK_KEY
=
""
;
// Токен ВК
const
VERSION
=
"5.126"
;
const
SECRET_KEY
=
''
;
// Секретный ключ QIWI
$billPayments
=
new
Qiwi\Api\BillPayments
(
SECRET_KEY
)
;
// Авторизация
$vk
=
vk_api
:
:
create
(
VK_KEY
,
VERSION
)
;
$data
=
json_decode
(
file_get_contents
(
'php://input'
)
,
true
)
;
// Принимаем запрос от qiwi как json
$status1
=
$data
[
'bill'
]
[
'siteId'
]
;
// Пиздим с запроса все нужные параметры, а именно billId, siteId, status, comment, version
$status2
=
$data
[
'bill'
]
[
'billId'
]
;
$status3
=
$data
[
'bill'
]
[
'status'
]
[
'value'
]
;
$status4
=
$data
[
'version'
]
;
$coment
=
$data
[
'bill'
]
[
'comment'
]
;
if
(
!
function_exists
(
'getallheaders'
)
)
{
// Берём с запроса qiwi X-Api-Signature-SHA256(это ключ счета), это нужна для проверки
function
getallheaders
(
)
{
// чтобы его получить подбираем все HEADERS и ищем нужный
$headers
=
[
]
;
foreach
(
$_SERVER
as
$name
=
>
$value
)
{
if
(
substr
(
$name
,
0
,
5
)
==
'HTTP_'
)
{
$headers
[
str_replace
(
' '
,
'-'
,
ucwords
(
strtolower
(
str_replace
(
'_'
,
' '
,
substr
(
$name
,
5
)
)
)
)
)
]
=
$value
;
}
}
return
$headers
;
}
}
$head
=
array_change_key_case
(
getallheaders
(
)
,
CASE_LOWER
)
;
$validSignatureFromNotificationServer
=
$head
[
mb_strtolower
(
'x-api-signature-SHA256'
)
]
;
// записываем наш ключ в переменную
$notificationData
=
[
// массив с данными для проверки
'bill'
=
>
[
'siteId'
=
>
$status1
,
'billId'
=
>
$status2
,
'amount'
=
>
[
'value'
=
>
1
,
'currency'
=
>
'RUB'
]
,
// где value' => 1 cтавим нужныую сумму, для меня это рубль
'status'
=
>
[
'value'
=
>
'PAID'
]
]
,
'version'
=
>
$status4
]
;
$secretKey
=
''
;
// сюда секретный ключ qiwi
$check
=
$billPayments
-
>
checkNotificationSignature
(
// с помощью либы проверяем, и если все правильно оно возвращает истину
$validSignatureFromNotificationServer
,
$notificationData
,
$secretKey
)
;
if
(
$check
==
"1"
)
{
// а тут как раньше
$vk
-
>
sendMessage
(
$coment
,
"Оплата прошла успешно."
)
;
}
else
{
echo
"-"
;
}
Ну как вы поняли, мы создаем ссылку и отправляем юзеру, юзер оплачивает счет. Qiwi отправляем увеодомление о оплате в виде json на наш хостинг, а мы оброботываем это и отправляем информацию о оплате юзеру. Все готово!
Теперь не большой гайд как все это устоновить на хостинг и запустить бота:
Бот с автооплатой готов!
Я нигде не нашел бота с автооплатой qiwi для вк, и так же другие работы с qiwi p2p php.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|