Что нового

Как автоматизировать процесс покупки на plati.ru ?

vaf

Новичок
Сообщения
189
Репутация
2
Всем привет. Помогите автоматизировать процесс покупки товара на plati.ru ?
Обычно процесс покупки происходит следующим образом
1.Переходится по ссылке (для примера https://plati.market/itm/crysis-remastered-trilogy-1-2-3-xbox-key-gift/3348120)
2.Нажимается купить сейчас
3.Выбирается один из способов оплаты (LAVA, Enot.io, QIWI, Карта RU|KZ или Карта RU), при этом в URL меняется curr (привёл их ниже)

LAVA - Бансковская карта curr=LVA
Enot - Банковская карта curr=ENT
QIWI - curr=GMQ
Карта RU|KZ - curr=GMC
Карта RU - curr=CL1

4.Вводятся реквизиты карты
5.Выходится страница об успешной покупке

Вопрос - каким образом это можно автоматизировать ?
Первое что приходит в голову это эмуляция того что делаешь вручную и сразу первый вопрос - каким образом с эмулировать выбор способа оплаты ?
Ввод реквизитов карты более менее понятно как сделать, но вот как выбрать нужный способ оплаты ?
 

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
ну как минимум вам не обязательно посещать прям площадку сайта и взаимодействовать с кнопкой купить, т.к вам достаточно знать id товара
и указать его в этой ссылке https://digiseller.market/asp2/pay_fk.asp?id_d=3348120
а вот тут уже есть несколько вариантов что делать дальше
1. смотреть по запросам страницы (через сеть в браузере F12), а потом повторять все через winhttp.winhttprequest.5.1
2. эмулировать нажатие и заполнение как вы хотели (советую через WebDrive
 
Автор
V

vaf

Новичок
Сообщения
189
Репутация
2
ну как минимум вам не обязательно посещать прям площадку сайта и взаимодействовать с кнопкой купить, т.к вам достаточно знать id товара
и указать его в этой ссылке https://digiseller.market/asp2/pay_fk.asp?id_d=3348120
а вот тут уже есть несколько вариантов что делать дальше
1. смотреть по запросам страницы (через сеть в браузере F12), а потом повторять все через winhttp.winhttprequest.5.1
2. эмулировать нажатие и заполнение как вы хотели (советую через WebDrive

да, согласен, но после того как выберешь способ оплаты на карточке по ссылке https://digiseller.market/asp2/pay_fk.asp?id_d=3348120
он генерирует новый длинный URL, в котором есть уникальный digiuid=D6CA93234-92D6-453D-3067-59E1FC9A5D77 и ещё много чего, но при смене методов оплаты в URL меняется только curr= так что да, думаю проблем не возникнет. Нужно будет получить URL и поменять в нём только curr=
Сообщение автоматически объединено:

Ну в общем всё бы хорошо, но всё таки всё упирается что выбор методов оплаты придётся эмулировать, т.к. генерация URL происходит по непонятным мне правилам.

В общем буду рад помощи.

Задача зайти к примеру на https://digiseller.market/asp2/pay_lv.asp?id_d=3465748 и попробовать выбрать метод оплаты
к примеру LAVA - банковская карта, Enot.io - Банковская карта, Карта RU|KZ и именно эмуляцией, т.к. я не знаю по какому принципу формируется URL
 
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
пример генерации ссылки для оплаты через LAVA. С остальными вариантами смотрите уже при нажатие кнопки оплатить что происходит в мониторинге браузера
что касается digiuid, то это что то вроде рандомной генерации или же своего рода маячок для проверки оплаты, тут точно не скажу, но в примере ниже он не обязателен.
за точную работу примера и нормально последующей оплаты ничего сказать не могу, проверять на свой страх и риск (если вздумаете покупать товар по получившейся ссылки)
Код:
$email = "[email protected]"
$IdPlati = "3348120"
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Option(6) = false
$oHTTP.Open("get", "https://digiseller.market/asp2/pay_lv.asp?id_d="&$IdPlati&"&id_po=0&cart_uid=&ai=&ain=&curr=LVA&lang=ru-RU")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0")
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send('email='&$email&'&Curr_add=card&oper=next&product_cnt=1')
MsgBox(0,"",$oHTTP.GetAllResponseHeaders)
$Location = StringRegExp($oHTTP.GetAllResponseHeaders, 'Location: (.*)', 3)
if IsArray($Location) then
    ShellExecute($Location[0])
EndIf
 
  • Like
Реакции: vaf
Автор
V

vaf

Новичок
Сообщения
189
Репутация
2
пример генерации ссылки для оплаты через LAVA. С остальными вариантами смотрите уже при нажатие кнопки оплатить что происходит в мониторинге браузера
что касается digiuid, то это что то вроде рандомной генерации или же своего рода маячок для проверки оплаты, тут точно не скажу, но в примере ниже он не обязателен.
за точную работу примера и нормально последующей оплаты ничего сказать не могу, проверять на свой страх и риск (если вздумаете покупать товар по получившейся ссылки)
Код:
$email = "[email protected]"
$IdPlati = "3348120"
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Option(6) = false
$oHTTP.Open("get", "https://digiseller.market/asp2/pay_lv.asp?id_d="&$IdPlati&"&id_po=0&cart_uid=&ai=&ain=&curr=LVA&lang=ru-RU")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0")
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send('email='&$email&'&Curr_add=card&oper=next&product_cnt=1')
MsgBox(0,"",$oHTTP.GetAllResponseHeaders)
$Location = StringRegExp($oHTTP.GetAllResponseHeaders, 'Location: (.*)', 3)
if IsArray($Location) then
    ShellExecute($Location[0])
EndIf

Впечатляюще. Попробую таким образом купить что нибудь недорогое. Конечно тут для разных методов оплат вместо pay_lv.asp будут другие значения, но надеюсь что справлюсь.
Огромное вам спасибо !!!
Сообщение автоматически объединено:

Хотел реализовать покупку по самой низкой цене (цена зависит от методов оплаты), да и получилось генерировать нужный URL в зависимости от метода оплаты

Но похоже придётся от этой идеи отказаться, так как не всегда какой то метод оплаты поддерживает оплату с карты. А в целом, вот кусок кода который выбирает самую низкую цену - не слишком эстетично, но работает :smile:

Код:
#include <Array.au3>

$currency_ = 'ENT;CL1;LVA;GMC'

$currency  = StringSplit($currency_, ';') ; [1]ENT ; [2]CL1 ; [3]LVA ; [4]GMC
;_ArrayDisplay ($currency)

$email = "[email protected]"
$IdPlati = "3188646"

$TotalPay = ''
For $c = 1 To $currency[0] ; Цикл на получение цен
    $iRead = InetRead ('https://api.digiseller.ru/api/products/price/calc?product_id=' & $IdPlati & '&currency=' & $currency[$c] & '&count=1', 1)
    $String = BinaryToString($iRead, 4) ; Преобразуем бинарные данные в текст UTF8
    $StrArr = StringSplit ($String, ',"')
    $curr = Number(StringReplace ($StrArr[19], ':', ''))
    If $c < $currency[0] Then ; Если дальше ещё что то будет то ставим разделитель, иначе разделитель не ставим
        If $curr = '0' Then $curr = '999999'
        $TotalPay = $TotalPay & $curr & ';'
    Else
        If $curr = '0' Then $curr = '999999'
        $TotalPay = $TotalPay & $curr
    EndIf
Next

ConsoleWrite ($TotalPay)
$TotalPay = StringSplit ($TotalPay, ';') ; Массив с ценами
$MinPrice = _ArrayMin($TotalPay, 1, 1) 
$MinIndex = _ArrayMinIndex($TotalPay, 1, 1)


$MaxPrice = _ArrayMax($TotalPay, 1, 1) ; Максимальная цена
If $MaxPrice = 999999 And $MinPrice = 999999 Then MsgBox (4096, '', 'Игра кончилась')

_ArrayDisplay ($TotalPay, $MinPrice & ' (' & $currency[$MinIndex] & ')')

Сообщение автоматически объединено:

Странно LVA срабатывает а остальные нет, хотя вроде бы URL генерирует правильно
Код:
AutoItSetOption("SendKeyDelay", 100)

#include <Array.au3>

$currency_ = 'CL1;LVA;GMC'
$currency  = StringSplit($currency_, ';') ; [1]ENT ; [2]CL1 ; [3]LVA ; [4]GMC
;_ArrayDisplay ($currency)

$email = "[email protected]"
$IdPlati = "2658018"

$TotalPay = ''
For $c = 1 To $currency[0] ; Цикл на получение цен
    $iRead = InetRead ('https://api.digiseller.ru/api/products/price/calc?product_id=' & $IdPlati & '&currency=' & $currency[$c] & '&count=1', 1)
    $String = BinaryToString($iRead, 4) ; Преобразуем бинарные данные в текст UTF8
    $StrArr = StringSplit ($String, ',"')
    $curr = Number(StringReplace ($StrArr[19], ':', ''))
    If $c < $currency[0] Then ; Если дальше ещё что то будет то ставим разделитель, иначе разделитель не ставим
        If $curr = '0' Then $curr = '999999'
        $TotalPay = $TotalPay & $curr & ';'
    Else
        If $curr = '0' Then $curr = '999999'
        $TotalPay = $TotalPay & $curr
    EndIf
Next

ConsoleWrite ($TotalPay)
$TotalPay = StringSplit ($TotalPay, ';') ; Массив с ценами
$MinPrice = _ArrayMin($TotalPay, 1, 1) ; Минимальная цена
$MinIndex = _ArrayMinIndex($TotalPay, 1, 1) ; Минимальная цена


$MaxPrice = _ArrayMax($TotalPay, 1, 1) ; Максимальная цена
If $MaxPrice = 999999 And $MinPrice = 999999 Then MsgBox (4096, '', 'Игра кончилась')

_ArrayDisplay ($TotalPay, $MinPrice & ' (' & $currency[$MinIndex] & ')')
;Exit

$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Option(6) = false
;$oHTTP.Open("get", "https://digiseller.market/asp2/pay_lv.asp?id_d="&$IdPlati&"&id_po=0&cart_uid=&ai=&ain=&curr=LVA&lang=ru-RU")
$oHTTP.Open("get", getUrl ($currency[$MinIndex], $IdPlati))

$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0")
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send('email='&$email&'&Curr_add=card&oper=next&product_cnt=1')
MsgBox(0,"",$oHTTP.GetAllResponseHeaders)
$Location = StringRegExp($oHTTP.GetAllResponseHeaders, 'Location: (.*)', 3)
if IsArray($Location) then
    ShellExecute($Location[0])
EndIf

Func getUrl ($PayMethod, $id)
    If $PayMethod = 'ENT' Then $Url = "https://digiseller.market/asp2/pay_enot.asp?id_d=" & $IdPlati & "&id_po=0&cart_uid=&ai=&ain=&curr=ENT&lang=ru-RU" ; ENOT
    If $PayMethod = 'CL1' Then $Url = "https://digiseller.market/asp2/pay_cl.asp?id_d="   & $IdPlati & "&id_po=0&cart_uid=&ai=&ain=&curr=CL1&lang=ru-RU" ; VISA MasterCard
    If $PayMethod = 'LVA' Then $Url = "https://digiseller.market/asp2/pay_lv.asp?id_d=" &   $IdPlati & "&id_po=0&cart_uid=&ai=&ain=&curr=LVA&lang=ru-RU" ; LAVA
    If $PayMethod = 'GMC' Then $Url = "https://digiseller.market/asp2/pay_gm.asp?id_d="   & $IdPlati & "&id_po=0&cart_uid=&ai=&ain=&curr=GMC&lang=ru-RU" ; VISA MasterCard МИР
    Return $Url
EndFunc
 
Последнее редактирование:
Верх