Jump to content

Recommended Posts

Приветствую всех.

Подскажите пожалуйста где копнуть и нет ли проблемы со стороны протокола взаимодействия сити24 или возможно не учтена необходимая проверка в модуле сити24 в Ubilling, пока писал понял что похоже в проверке payID, но это не точно.  

Недавно обнаружилось с сити24 начали прилетать дубликаты платежей, в целом платежей мало, два одинаковых запроса Pay с одинаковым transactionID и payID в одну секунду одному платежному ID при этом биллинг "думает" примерно чуть больше минуты и отвечает одним ответом <result>0</result>, сити24 утверждает что ответ они не получили и по протоколу дальше повторяет запросы дублем, биллинг ответ и так по кругу, сити24 спрашивает каким образом с одинаковым payID от сити24 билл продолжает обрабатывать запросы и пополнять абоненту счет раз в 5 минут примерно, на одну и туже сумму, ведь этот payID уже был обработан предполагают сити24 согласно протоколу.

Конечно есть вопрос к сити24 зачем они дублем присылают два запроса, но они отвечают что эта ситуация учтена в протоколе и проблема на стороне биллинга, потому что он пополняет счет по уже обработанному одинаковому payID.

При этом transactionID в дублях одинаковый, но с каждым новым дублем разный.

Если зафаерволить запросы от сити24, но оставить возможность отвечать то после блокировки билл отправляет 2-3 минуты 6 ответов <account>0001</account>  <result>0</result>.

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

В openpayz в платежах transactionID и не видно payID.

Link to post
Share on other sites
4 минуты назад, sanyadnepr сказав:

два одинаковых запроса Pay с одинаковым transactionID и payID в одну секунду одному платежному ID

На жодні думки не наштовхує, ніт?

 

spacer.png

 

ну там з документацією ознайомитись... якісь очевидні аналогії з тим, що ви тут описуєте там знайти... ні, не варіант?

 

9 минут назад, sanyadnepr сказав:

при этом биллинг "думает" примерно чуть больше минуты и отвечает одним ответом <result>0</result>

Перекладаю - вашій СУБД походу кранти, там якесь м'ясо, робити там щось більше кількох сотих секунди фронтенду нічому. Розбирайтесь чому так.

 

10 минут назад, sanyadnepr сказав:

Если зафаерволить запросы от сити24, но оставить возможность отвечать то после блокировки билл отправляет 2-3 минуты 6 ответов <account>0001</account>  <result>0</result>.

Якщо робити якісь хаотичні дії - результат, теж буде очікувано хаотичним.

Link to post
Share on other sites
6 minutes ago, nightfly said:

Перекладаю - вашій СУБД походу кранти, там якесь м'ясо, робити там щось більше кількох сотих секунди фронтенду нічому. Розбирайтесь чому так.

Проблема именно когда два одинаковых прилетает, один ответ и сити его не видит.
Если один запрос без дубля то в ту же секунду ответ. Документацию читал.

Edited by sanyadnepr
Link to post
Share on other sites
7 minutes ago, nightfly said:

На жодні думки не наштовхує, ніт?

Что это некорректно сити24 шлет запрос, но они объясняют что эта ситуация учтена в протоколе и мы не отправляем ответ, хотя отправляем.

Самый главный вопрос, проверяется ли payID в модуле? и если платеж с таким payID уже был обработан и внесен в базу почему следующий одинаковый payID далее заносится в базу платеж и пополняется счет абоненту.

Link to post
Share on other sites

Ну вам ответили уже и даже сказали что и как, для начала проверьте что с вашей базой, например в модуле module=report_sysload проверить состояние БД 

https://wiki.ubilling.net.ua/doku.php?id=paymentsduplicates   

Дублювання оплат в OpenPayz

Ви можете налаштувати і використовувати Режим високої продуктивності OpenPayz aka OP_HIGHLOAD_ENABLE, забравши обробку всіх транзакцій, що надійшли, в окремий і єдиний потік, який під час своєї роботи не породжуватиме колізій.

  • Like 1
  • Thanks 1
Link to post
Share on other sites
21 hours ago, skybetik said:

Ну вам ответили уже и даже сказали что и как, для начала проверьте что с вашей базой, например в модуле module=report_sysload проверить состояние БД 

С базой все ОК. OP_HIGHLOAD_ENABLE это понятно, меня интересует проверка по payID есть или нет в модуле для сити24?

Array
(
    [id] => 5648
    [hash] => PLTZ_5648
    [date] => 2024-02-25 12:00:00
    [summ] => 100
    [customerid] => 0001
    [paysys] => CITY24M
    [processed] => 1
    [note] => transactionID:8938030549 amount:10000
)

Edited by sanyadnepr
Link to post
Share on other sites
1 час назад, sanyadnepr сказав:

С базой все ОК. OP_HIGHLOAD_ENABLE это понятно, меня интересует проверка по payID есть или нет в модуле для сити24?

Array
(
    [id] => 5648
    [hash] => PLTZ_5648
    [date] => 2024-02-25 12:00:00
    [summ] => 100
    [customerid] => 0001
    [paysys] => CITY24M
    [processed] => 1
    [note] => transactionID:8938030549 amount:10000
)

Что вам мешает посмотреть это ? 

https://github.com/nightflyza/Ubilling/blob/master/docs/openpayz/frontend/city24/index.php

К слову Сити24 Юзаем больше 2 лет нет не каких проблем ?

Link to post
Share on other sites
3 hours ago, skybetik said:

Что вам мешает посмотреть это ? 

https://github.com/nightflyza/Ubilling/blob/master/docs/openpayz/frontend/city24/index.php

К слову Сити24 Юзаем больше 2 лет нет не каких проблем ?

Используется https://github.com/nightflyza/Ubilling/blob/master/docs/openpayz/frontend/city24_multi/index.php посмотреть нет проблем, в коде не силен. не смотря на ответ  <result>0</result>  платеж с одинаковым payID вносится еще раз в базу, вероятней всего проверки нет.
Описание что проверить надо по payID не вижу есть ли проверка в коде, поэтому и уточняю. Если вы разбираетесь в коде подскажите пожалуйста есть проверка по payID или нет?

Вижу что есть информация о платеже transactionID но payID одинаковый и нет о нем информации.
if (pltz_CheckTransaction($extTransactionID)) {  //Обязательно нужно проверить(по $payID) платеж в Вашей системе, если платеж оплачен -  возвращаем result - 0

 

https://docs.google.com/document/d/1PQUiDnyZ7rMZ0wggIETbEyEF2xH3usKCuPxgZX9dPM4/edit#

 

Увага!
Відповідно до таблиці  “Список кодів завершення”, є фатальні та нефатальні помилки (коди) відповіді на <command>pay</command>


Для того щоб уникнути втрат коштів у випадку технічних несправностей або тайм-аутів, існує можливість повторити транзакцію з тим самим `payID` у випадку фатальних помилок. Ініціатором такого повторення може бути КЦ або технічна підтримка, наприклад, за зверненням платника.

Якщо наш сервер відправляє повторний запит на поповнення з `payID`, який вже існує (тобто оплата вже була успішно проведена раніше), провайдер просто повертає позитивну відповідь (значення `result=0`), не повторюючи при цьому поповнення рахунку чи облікового запису. Це є механізмом захисту від фінансових втрат у разі технічних проблем.

У випадку, коли `payID` має фатальний статус на боці провайдера, служба підтримки може повторити запит на оплату з тим самим `payID` після обробки транзакції.

Отже:

Якщо існує успішна оплата за `payID`, провайдер повинен повернути статус попередньої успішної оплати, не повторюючи її.

Якщо успішної оплати за `payID` немає, потрібно провести оплату.

У необов'язковому полі comment міститься службовий коментар.

Поле відповіді extTransactionID містить номер транзакції на стороні провайдера.

Edited by sanyadnepr
Link to post
Share on other sites

Включение режима высокой продуктивности никак не влияет на отсутствие проверки payID, платеж с одинаковым payID зачисляется на счет абоненту.

Link to post
Share on other sites
В 25.02.2024 в 17:52, sanyadnepr сказав:

Используется https://github.com/nightflyza/Ubilling/blob/master/docs/openpayz/frontend/city24_multi/index.php посмотреть нет проблем, в коде не силен. не смотря на ответ  <result>0</result>  платеж с одинаковым payID вносится еще раз в базу, вероятней всего проверки нет.

Зачем вам city24_multi ? 

Link to post
Share on other sites
1 час назад, skybetik сказал:

Зачем вам city24_multi ? 

ну а для чего он нужен?)) очевидно для работы с контрагентами

Link to post
Share on other sites
Только что, datakrava сказав:

ну а для чего он нужен?)) очевидно для работы с контрагентами

Многим нравится название, потому и спрашиваю )

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By nightfly
      Ubilling 1.5.9 rev 9525 The Perfect Lock
       
      Зміни в структурі БД. alter.ini: нова опція GENERATORS_ENABLED, що вмикає модуль моніторингу генераторів. alter.ini: нова опція TB_GENERATORS_NOTIFY, що вмикає нотифікацію про запущені генератори в області сповіщень. alter.ini: нова опція PON_ONU_UNI_STATUS_COMPACT, що вмикає компактне відображення стану мідних портів на ONU. alter.ini: нова опція PONBOXES_MINIMAP, що дозволяє вмикати та вимикати міні-мапу, при редагування ПОН коробки. Новий модуль Єдинорожий телепорт: дозволяє просто та зручно переносити ваш робочий білінг на новий сервер. Модуль “Реєстрація користувачів”: виправлено проблеми сумісності з PHP 8.5. Модуль “Останні події”: викинуто дубову статку на мороз. Askozia PBX: інтеграція була давно непідтримуваною, викинуто на мороз, разом зі всіма опціями. Модуль Mapon: тепер використовує OmaeURL для взаємодії з API. Модуль “Мапа ONU”: в черговий раз покращення навігації між мапою та іншими модулями системи. Новий модуль Генератори: дозволяє моніторити стан генераторів, базово облікувати мотогодини, пальне та планувати ТО. Модуль ПОНізатор: тепер причини останньої дереєстрації ONU можуть визначатись також по серійнику ONU а не тільки за MAC. Модуль “ПОН Коробки”: покращено продуктивність відмальовки зв'язків коробок на мапах. Глобально: проведено чергову спробу зробити логування подій, що відбуваються навколо користувачів, якимось трішки більш притомним. RemoteAPI: новий виклик generators, що запускає скрипти обробки станів генераторів з автоматичним запуском. RemoteAPI: новий виклик gencontrol, для примусового запуску/зупинки генераторів за допомогою зовнішнього ПЗ. Бібліотека UbillingCache: виправлено проблеми сумісності з PHP 8.5. Бібліотека OmaeURL: виправлено проблеми сумісності з PHP 8.5. Бібліотека UbillingTelegram: вся робота з CURL перенесена до одного методу, покращено сумісність з PHP 8.5. Кабінет користувача: виправлено проблеми сумісності з PHP 8.5. UBinstaller: тепер при встановленні попередньо розгортає та конфігурує SphinxSearch. UBinstaller: Зібрано бінарні пакунки для FreeBSD 14.3 amd64 + PHP 8.5. UBinstaller: Зібрано бінарні пакунки для FreeBSD 15.0 amd64 + PHP 8.5.  
      Повний чейнджлог
      Оновлена демка
       
       

    • By maxkorn
      Доброго дня!
      На Mikrotik NAS, створив нову підмережу для клієнтів, все наче порядок, тільки помітив, що не створюються шейпери в Queues для клієнтів цієї підмережі.
      В логах Stargazer наступне:
      2025-12-29 09:05:57 - [Ubilling] - OnConnect started for user `xxasdb5rzm`:
      2025-12-29 09:05:57 - [Executer] - Success: Firewall entry was updated/created
      2025-12-29 09:05:57 - [Executer] - Error: Queue entry can't be updated, missing
      2025-12-29 09:05:57 - [Executer] - Success: Queue_tree entry was updated/created
      2025-12-29 09:05:57 - [Executer] - Success: DHCP entry was updated/created
      2025-12-29 09:05:57 - [Executer] - Success: ARP entry was updated/created
      2025-12-29 09:05:57 - [Ubilling] - QC: 6, elapsed time: 0.064 sec.
       
      При чому, на тому ж мікротіку є ще кілька підмереж, в яких все проходить нормально:
       
      2025-12-29 08:30:17 - [Ubilling] - OnConnect started for user `22zxp7u58x`:
      2025-12-29 08:30:17 - [Executer] - Success: Firewall entry was updated/created
      2025-12-29 08:30:17 - [Executer] - Success: Queue entry was updated/created
      2025-12-29 08:30:17 - [Executer] - Success: Queue_tree entry was updated/created
      2025-12-29 08:30:17 - [Executer] - Success: DHCP entry was updated/created
      2025-12-29 08:30:17 - [Executer] - Success: ARP entry was updated/created
      2025-12-29 08:30:17 - [Ubilling] - QC: 6, elapsed time: 0.602 sec.
       
      Налаштування аналогічні, в чому може бути причина?
    • By ProstoName
      Змінювали мережеву карту. Здається все поправив. Працює. Але є невелика проблема - після внесення коштів (коли абонент був відключений), інет в нього не з'являється. Тільки після заміни тарифу на інший (і потім вернувши тариф) в абонента з'являється інет. 
    • By ppv
      Собака-посилака перестала відправляти повідомлення. Підкажіть де шукати.
      Можливо таке після пропадання світла, сервер ребутнувся, але я не впевнений. Візуально все працює, крон працює, а повідомлення висять в черзі, смс така ж картина.

    • By camchatix
      Привіт!
       
      Є багато запитів, щоб інтернет не виключався у північ, а скажімо в день (сигналізації, камери під охороною і тд)
      При щоденній абонплаті - як знімати гроші не у 12:00 у північ, а наприклад у 11 годин дня ?
×
×
  • Create New...