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

  #11  
Старый 26.01.2022, 10:45
meowprd
Познавший АНТИЧАТ
Регистрация: 04.07.2019
Сообщений: 1,297
С нами: 3611265

Репутация: 183


По умолчанию

Цитата:
Сообщение от Hinazuki  

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

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

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

Цитата:
Сообщение от Котовский.  

Гайд должен быть полноценным гайдом, а не на отьебись
Ладно, я уже почти закончил.

Сделал проверку на подлинность увеодомление от 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
,
"Оплата прошла успешно."
)
;
}
}
 
Ответить с цитированием

  #13  
Старый 26.01.2022, 13:52
meowprd
Познавший АНТИЧАТ
Регистрация: 04.07.2019
Сообщений: 1,297
С нами: 3611265

Репутация: 183


По умолчанию

Цитата:
Сообщение от Hinazuki  

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

Сделал проверку на подлинность увеодомление от 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
 
Ответить с цитированием

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

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

Цитата:
Сообщение от Котовский.  

Можно было заюзать ip2long
Да можно, позже скину пример с ним.
 
Ответить с цитированием

  #15  
Старый 26.01.2022, 19:39
Majunti
Постоянный
Регистрация: 05.10.2020
Сообщений: 509
С нами: 2950908

Репутация: 48


По умолчанию

Всеравно не работает
 
Ответить с цитированием

  #16  
Старый 26.01.2022, 20:30
ImPasha
Познавший АНТИЧАТ
Регистрация: 28.10.2017
Сообщений: 1,778
С нами: 4495573

Репутация: 183


По умолчанию

Цитата:
Сообщение от Hinazuki  

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

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

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

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

Цитата:
Сообщение от Pakulichev  

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

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

Цитата:
Сообщение от Majunti  

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

  #18  
Старый 05.02.2022, 01:32
Rafaelofff
Участник форума
Регистрация: 22.06.2021
Сообщений: 120
С нами: 2576713

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

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

Код:





Код:
require("vendor/autoload.php"); // Для qiwi


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

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

  #19  
Старый 05.02.2022, 07:39
hinazuki
Постоянный
Регистрация: 12.01.2021
Сообщений: 343
С нами: 2808522

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

Цитата:
Сообщение от Rafaelofff  

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

Код:





Код:
require("vendor/autoload.php"); // Для qiwi


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

 
Ответить с цитированием

  #20  
Старый 05.02.2022, 12:11
Rafaelofff
Участник форума
Регистрация: 22.06.2021
Сообщений: 120
С нами: 2576713

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

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

Код:





Код:
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", [[]]);

        }
?>
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.