PDA

Просмотр полной версии : Автооплата через QIWI (VK Keyboard BOT)


hinazuki
26.01.2022, 09:47
Привтем всем!

Видел эти две темы про автооплату на форуме: Node.JS (https://www.blast.hk/threads/74226/) - Python (https://www.blast.hk/threads/74794/) и решил их переписать на PHP.

Ждал такой же гайд от @Pakulichev (https://www.blast.hk/members/159390/), но кажется он не хотел.

Что нам понадобится:

1) SimpleVK (https://github.com/digitalstars/simplevk)

2) bill-payments-php-sdk (https://github.com/QIWI-API/bill-payments-php-sdk)

3) Прямые руки.

Видео работы скрипта:



Настройка всех нужных вещей:



Начнем с настройки группы, создаем или используем уже существующую группу.

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">
https://forum.antichat.xyz/attachments/27955382/

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">
https://forum.antichat.xyz/attachments/27955382/

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

https://forum.antichat.xyz/attachments/27955382/

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

https://forum.antichat.xyz/attachments/27955382/

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

https://forum.antichat.xyz/attachments/27955382/

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

https://forum.antichat.xyz/attachments/27955382/

https://forum.antichat.xyz/attachments/27955382/

7) Включаем сообщение бота и функций ботов в настройках, и так же кнопку начать.

Готово!





1) Переходим на сайт qiwi p2p (https://www.blast.hk/redirect/aHR0cHM6Ly9wMnAucWl3aS5jb20v) и входим в свой аккаунт.

2) Переходим в раздел "API" и создаём ключ:

https://forum.antichat.xyz/attachments/27955382/

3) Обьязатель поставим галочку на URL и пишем туда свой сайт с php скриптом qiwi:

https://forum.antichat.xyz/attachments/27955382/

4) Копируем секретный ключ.

5) Переходим в раздел "Форма приема переводов" и копируем "themeCode", если его нету то нажимаем на "настройть":

https://forum.antichat.xyz/attachments/27955382/

qiwi тоже готов!



Переходим теперь к коду.

Загружаем все нужные либы и классы для работы:​

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
=
"e5cfac8b5ed93c555000000000000000000000000000000000 0000000009e0fbd4d0341090ee9f"
;
// Токен сообщества
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"
,
[
[
]
]
)
;
}




Проверяем


https://forum.antichat.xyz/attachments/27955382/


Как видим все работает!

Теперь работаем с 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">
https://forum.antichat.xyz/attachments/27955382/

Всё работает, ссылка генериуется.

Объединяем весь код, и у нас получается готовый бот которые генериует ссылку для оплаты:​

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", [[]]);

}




Бот готов, проверяем:

https://forum.antichat.xyz/attachments/27955382/
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">
https://forum.antichat.xyz/attachments/27955382/


Как видим все работает.

Мы сделали только часть бота вк и создание ссылки для оплтаты. Теперь проверка оплаты счета.

Для этого создаём отдельный 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 на наш хостинг, а мы оброботываем это и отправляем информацию о оплате юзеру. Все готово!

Теперь не большой гайд как все это устоновить на хостинг и запустить бота:



1) Выбираем хостинг, я выбрал для тестов бесплатный тариф sprinthost'a(НЕ РЕКЛАМА!)

2) Переходим в файловый менеджер и закидываем туда архив который прикреплен в посте.

3) Извлекаем архив прямо в хостинге

https://forum.antichat.xyz/attachments/27955382/

https://forum.antichat.xyz/attachments/27955382/

4) Нажимаем на bot.php и меням все ключи на свой, и так же это делаем на qiwi.php

5) В вк переходим раздел "Callback API", в поле адрес пишем путь до нашего php скрипта бота, внизу копируем ключ и вставляем в скрипте ACCESS_KEY

https://forum.antichat.xyz/attachments/27955382/

6) Нажимаем на подвердить, должно получится как у меня:

https://forum.antichat.xyz/attachments/27955382/

7) В киви переходим в раздел "API", и редактирем URL адрес указыаем путь до скрипта qiwi.php

1643175809506.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/133394/" style="cursor: pointer;" title="1643175809506.png">
https://forum.antichat.xyz/attachments/27955382/

https://forum.antichat.xyz/attachments/27955382/

Готово!

Бот с автооплатой готов!

Я нигде не нашел бота с автооплатой qiwi для вк, и так же другие работы с qiwi p2p php.

meowprd
26.01.2022, 10:10
а как же проверка хэшей на хостинги в скрипте, который обрабатывает callback от qiwi или элементарная проверка ip серверов qiwi?

hinazuki
26.01.2022, 10:11
а как же проверка хэшей на хостинги в скрипте, который обрабатывает callback от qiwi или элементарная проверка ip серверов qiwi?


Можно сделать проверку IP qiwi или же как ты говорил проверка подлинности увоедомление с помощью HMAC с хеш-функцией SHA25, я просто показал способ.

Majunti
26.01.2022, 10:16
Крашит

hinazuki
26.01.2022, 10:17
Крашит


Да я же ванга, ну рассказывай что крашит голубчик.

Majunti
26.01.2022, 10:22
Токен группы не работает и крашит

hinazuki
26.01.2022, 10:23
Токен группы не работает и крашит


Обьяснение от бога. Как оно крашит, сообщение не приходит?

Majunti
26.01.2022, 10:24
Обьяснение от бога. Как оно крашит, сообщение не приходит?


Нет, сам скрипт закрывается

hinazuki
26.01.2022, 10:25
Нет, сам скрипт закрывается


Ты должен скрипт на хостинг ставить, с локалькой не прокатит.

Majunti
26.01.2022, 10:29
Ты должен скрипт на хостинг ставить, с локалькой не прокатит.


Да дело в том что он просто закрывается

meowprd
26.01.2022, 10:45
Можно сделать проверку IP qiwi или же как ты говорил проверка подлинности увоедомление с помощью HMAC с хеш-функцией SHA25, я просто показал способ.


Гайд должен быть полноценным гайдом, а не на отьебись

hinazuki
26.01.2022, 10:49
Гайд должен быть полноценным гайдом, а не на отьебись


Ладно, я уже почти закончил.

Сделал проверку на подлинность увеодомление от qiwi c помощью HMAC с хеш-функцией SHA25, можно было сделать и с проверкой IP. Но так лучше:

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
"-"
;
}






Обновил файл, и гайд чутка.

Есть еще один способ проверки на подлинность, это с помощью IP запроса.

Если кому-то интересно, то оставлю тут код:

PHP:






require_once
(
'simplevk-master/autoload.php'
)
;
// Подключаем либу ВК
use
DigitalStar\vk_api\VK_api
as
vk_api
;
const
VK_KEY
=
""
;
// переменные для авторизация вк
const
VERSION
=
"5.126"
;
$vk
=
vk_api
:
:
create
(
VK_KEY
,
VERSION
)
;
$data
=
json_decode
(
file_get_contents
(
'php://input'
)
,
true
)
;
// принимаем запрос от QIWI в виде json
$status
=
$data
[
'bill'
]
[
'status'
]
[
'value'
]
;
$coment
=
$data
[
'bill'
]
[
'comment'
]
;
$ip_list
=
array
(
array
(
'79.142.0.0'
,
'79.142.255.255'
)
,
// диапозон IP QIWI
array
(
'195.189.0.0'
,
'195.189.255.255'
)
,
array
(
'91.232.0.0'
,
'91.232.255.255'
)
,
array
(
'91.213.0.0'
,
'91.213.255.255'
)
,
)
;
function
getIP
(
)
{
// функция определение IP запроса
if
(
isset
(
$_SERVER
[
'HTTP_X_REAL_IP'
]
)
)
return
$_SERVER
[
'HTTP_X_REAL_IP'
]
;
return
$_SERVER
[
'REMOTE_ADDR'
]
;
}
function
ip_in_list
(
$list
,
$ip
)
{
// функция которая перебирает диапозон IP
foreach
(
$list
as
$item
)
if
(
is_array
(
$item
)
&&
version_compare
(
$item
[
0
]
,
$ip
,
'='
)
||
$ip
===
$item
)
return
true
;
return
false
;
}
$ip
=
getIP
(
)
;
// записываем IP запроса
$check
=
ip_in_list
(
$ip_list
,
$ip
)
;
// сравниваем его с диапозоном ip
if
(
$status
==
"PAID"
)
{
// и проверка
if
(
$check
==
"1"
)
{
$vk
-
>
sendMessage
(
$coment
,
"Оплата прошла успешно."
)
;
}
}

meowprd
26.01.2022, 13:52
Ладно, я уже почти закончил.

Сделал проверку на подлинность увеодомление от qiwi c помощью HMAC с хеш-функцией SHA25, можно было сделать и с проверкой IP. Но так лучше:

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
"-"
;
}





Обновил файл, и гайд чутка.

Есть еще один способ проверки на подлинность, это с помощью IP запроса.
Если кому-то интересно, то оставлю тут код:

PHP:






require_once
(
'simplevk-master/autoload.php'
)
;
// Подключаем либу ВК
use
DigitalStar\vk_api\VK_api
as
vk_api
;
const
VK_KEY
=
""
;
// переменные для авторизация вк
const
VERSION
=
"5.126"
;
$vk
=
vk_api
:
:
create
(
VK_KEY
,
VERSION
)
;
$data
=
json_decode
(
file_get_contents
(
'php://input'
)
,
true
)
;
// принимаем запрос от QIWI в виде json
$status
=
$data
[
'bill'
]
[
'status'
]
[
'value'
]
;
$coment
=
$data
[
'bill'
]
[
'comment'
]
;
$ip_list
=
array
(
array
(
'79.142.0.0'
,
'79.142.255.255'
)
,
// диапозон IP QIWI
array
(
'195.189.0.0'
,
'195.189.255.255'
)
,
array
(
'91.232.0.0'
,
'91.232.255.255'
)
,
array
(
'91.213.0.0'
,
'91.213.255.255'
)
,
)
;
function
getIP
(
)
{
// функция определение IP запроса
if
(
isset
(
$_SERVER
[
'HTTP_X_REAL_IP'
]
)
)
return
$_SERVER
[
'HTTP_X_REAL_IP'
]
;
return
$_SERVER
[
'REMOTE_ADDR'
]
;
}
function
ip_in_list
(
$list
,
$ip
)
{
// функция которая перебирает диапозон IP
foreach
(
$list
as
$item
)
if
(
is_array
(
$item
)
&&
version_compare
(
$item
[
0
]
,
$ip
,
'='
)
||
$ip
===
$item
)
return
true
;
return
false
;
}
$ip
=
getIP
(
)
;
// записываем IP запроса
$check
=
ip_in_list
(
$ip_list
,
$ip
)
;
// сравниваем его с диапозоном ip
if
(
$status
==
"PAID"
)
{
// и проверка
if
(
$check
==
"1"
)
{
$vk
-
>
sendMessage
(
$coment
,
"Оплата прошла успешно."
)
;
}
}





Можно было заюзать ip2long

hinazuki
26.01.2022, 14:01
Можно было заюзать ip2long


Да можно, позже скину пример с ним.

Majunti
26.01.2022, 19:39
Всеравно не работает

ImPasha
26.01.2022, 20:30
Ждал такой же гайд от @Pakulichev, но кажется он не хотел.


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

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

hinazuki
26.01.2022, 20:33
Мне не очень нравится принимать платежи через QIWI, есть огромное множество других платежных сервисов, которые предоставляют большее количество возможностей и способов оплаты. Да, большинство из них недоступно для физических лиц, но при этом доступно для самозанятых. Стать самозанятым, проживая в России, можно в пару кликов, не посещая никакие органы и не заполняя никаких документов, так что все пути открыты.

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


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



Всеравно не работает


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

Rafaelofff
05.02.2022, 01:32
А у меня вопрос, где ты взял это?

Код:






require("vendor/autoload.php"); // Для qiwi




simple vk понятно, скачал и закинул в папку со скриптом, но где ты взял vendor/autoload.php???

Уже час не понимаю где же ты это взял, на гитхабе про это я не нашёл, объясни тупому?

hinazuki
05.02.2022, 07:39
А у меня вопрос, где ты взял это?

Код:






require("vendor/autoload.php"); // Для qiwi




simple vk понятно, скачал и закинул в папку со скриптом, но где ты взял vendor/autoload.php???
Уже час не понимаю где же ты это взял, на гитхабе про это я не нашёл, объясни тупому?


через composer либу устоновил устоновил.

https://forum.antichat.xyz/attachments/27966001/

Rafaelofff
05.02.2022, 12:11
Я не понимаю, всё вроде ок сделал, но не работает, все ключи правильные

Код:






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
05.02.2022, 12:13
Xnj



Я не понимаю, всё вроде ок сделал, но не работает, все ключи правильные

Код:






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
05.02.2022, 12:14
Xnj

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


Вообщем закидываю скрипт на хостинг, до того как я вставлял это












https://sun9-17.userapi.com/impg/1GyqHWMAauA-ln5s2O0yWd0wc3k0CChaXa2KCA/5h0W4BATpU4.jpg?size=582x81&quality=96&sign=8e6a5d796ca63796c2dd629e621d2585&type=album

Бот на вк работал, вставил это и теперь после перехода по ссылке не выдаёт ok.

Я так понимаю я что-то не подключил, что именно?

hinazuki
05.02.2022, 12:19
Вообщем закидываю скрипт на хостинг, до того как я вставлял это












https://sun9-17.userapi.com/impg/1GyqHWMAauA-ln5s2O0yWd0wc3k0CChaXa2KCA/5h0W4BATpU4.jpg?size=582x81&quality=96&sign=8e6a5d796ca63796c2dd629e621d2585&type=album

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


Покажи файлы который ты кинул на хостинг

Rafaelofff
05.02.2022, 12:23
https://forum.antichat.xyz/attachments/27966122/

hinazuki
05.02.2022, 13:01
Скачай архив под постом, скопируй с архива папку vendor и закинь на хостинг.

Rafaelofff
05.02.2022, 13:39
Скачай архив под постом, скопируй с архива папку vendor и закинь на хостинг.


Извини меня дауна, я не заметил архив под постом, то есть я настроил бота в вк и секрет кей и всё больше ничего не нужно? Всё будет работать?

hinazuki
05.02.2022, 13:41
Извини меня дауна, я не заметил архив под постом, то есть я настроил бота в вк и секрет кей и всё больше ничего не нужно? Всё будет работать?


Да.

McKinfinn
06.02.2022, 22:49
Hinazuki (https://www.blast.hk/members/427087/), достаточно информативный гайд. Несмотря на то, что достаточно большой промежуток времени работаю с VK API и SimpleVk, подчеркнул для себя некоторые новые вещи. Свободно запустил на локальной машине, используя локальный сервер и Ngrok для создания туннеля. Хотя и разрабатываю собственный класс для работы с VK API, это будет не лишним. Спасибо)

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

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


За годы исползвание такого не было. Можеь если появится свободное время сделаю.

coldsuicide
01.03.2022, 05:41
Вообще не рекомендую принимать платежи с QIWI ибо был уже случай что личный QIWI кошелек забанила служба безопасности QIWI по просту без причины и спустя пол года только вывели 50к рубасов дав в саппорт своих фоток ебала с паспортом и договор сотовой связи + бумажка о переводе остатка в другой банк.

ImPasha
08.03.2022, 04:37
Вообще не рекомендую принимать платежи с QIWI ибо был уже случай что личный QIWI кошелек забанила служба безопасности QIWI по просту без причины и спустя пол года только вывели 50к рубасов дав в саппорт своих фоток ебала с паспортом и договор сотовой связи + бумажка о переводе остатка в другой банк.


Несмотря на то, что я не использую QIWI Кошелек в качестве основного способа принятия платежей, никаких проблем с P2P переводами у меня никогда не возникало. Я заранее зарегистрировался в качестве самозанятого и уведомил об этом техническую поддержку QIWI Кошелька, тем самым обезопасил себя от блокировок по 115-ФЗ и другим причинам, которые всплывают когда ведешь свою деятельность в обход налоговой. Самозанятые платят очень маленький процент налогов, а если прибыли нет вовсе, то не платят ничего. Самый простой способ работать легально, не затратно и без каких-либо блокировок.

А в случае, если суммы слишком большие, то можно воспользоваться B2B от QIWI Кошелька. Там тоже достаточно быть самозанятым, либо оформить ИП. ИП можно оформлять под самозанятого, чтобы сохранить низкие ставки по налогам, а также освободиться от уплаты страховых взносов в ПФР и на ОМС.

F0RQU1N and
08.03.2022, 07:18
так что не могу исползвать платежные системы.


Всмысле? Аккаунт киви с подтвержденными данными 50р стоит

coldsuicide
08.03.2022, 20:45
Несмотря на то, что я не использую QIWI Кошелек в качестве основного способа принятия платежей, никаких проблем с P2P переводами у меня никогда не возникало. Я заранее зарегистрировался в качестве самозанятого и уведомил об этом техническую поддержку QIWI Кошелька, тем самым обезопасил себя от блокировок по 115-ФЗ и другим причинам, которые всплывают когда ведешь свою деятельность в обход налоговой. Самозанятые платят очень маленький процент налогов, а если прибыли нет вовсе, то не платят ничего. Самый простой способ работать легально, не затратно и без каких-либо блокировок.

А в случае, если суммы слишком большие, то можно воспользоваться B2B от QIWI Кошелька. Там тоже достаточно быть самозанятым, либо оформить ИП. ИП можно оформлять под самозанятого, чтобы сохранить низкие ставки по налогам, а также освободиться от уплаты страховых взносов в ПФР и на ОМС.


ну это если ты хочешь подписаться на авантюру отдай денюшку налоговой то тогда без проблем, а так yoomoney или платежными системами free-kassa, enot io, anypay и т.д и не беспокоиться что в любой момент твой кошелек улетит в бан да или принимать в крипте стабильной

ImPasha
09.03.2022, 13:33
ну это если ты хочешь подписаться на авантюру отдай денюшку налоговой то тогда без проблем, а так yoomoney или платежными системами free-kassa, enot io, anypay и т.д и не беспокоиться что в любой момент твой кошелек улетит в бан да или принимать в крипте стабильной


Зато всегда можно получить по жопе за неуплату налогов и незаконную деятельность с максимально веселыми размерами штрафов. Проще уж платить реально копейки и не боятся санкций со стороны контролирующих органов, плюс пользоваться QIWI Кошельком с удобным API, чем зажать 10 рублей в месяц и пользоваться какими-нибудь Яндекс Деньгами с максимально чудесным API, который при Сбербанке стал ещё чудеснее (нет).

BallunCello
15.07.2022, 20:21
У меня не работает, работает только Кнопка Информация, а купить неа, делал всё по гайду,

Moorell
24.07.2022, 02:32
У меня не работает, работает только Кнопка Информация, а купить неа, делал всё по гайду,


Я только что столкнулся с такой проблемой, так вот как ее решить. Когда ты создаешь в qiwi во вкладке API там при создании будет окно где покажет твой секретный ключ и публичный, так вот в переменную const SECRET_KEY нужно вставить не публичный а секретный ключ)

beadidd
26.12.2022, 17:32
Привет, подскажи пожалуйста,

бот на сообщения вообще не отвечает