HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 26.01.2022, 09:47
hinazuki
Постоянный
Регистрация: 12.01.2021
Сообщений: 343
С нами: 2808522

Репутация: 48
По умолчанию

Привтем всем!

Видел эти две темы про автооплату на форуме: Node.JS - Python и решил их переписать на PHP.


Ждал такой же гайд от @Pakulichev, но кажется он не хотел.

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

1) SimpleVK

2) 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">


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

Готово!
Цитата:
Сообщение от Спойлер  

1) Переходим на сайт qiwi p2p и входим в свой аккаунт.

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



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



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

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



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

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

Цитата:
Сообщение от Спойлер  

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

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

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





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

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



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



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




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

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.