forum.bitel.ru http://forum.bitel.ru/ |
|
[6.0] Задвоение платежей http://forum.bitel.ru/viewtopic.php?f=38&t=11871 |
Страница 1 из 1 |
Автор: | ЮжныйКраснодар [ 16 авг 2016, 14:03 ] |
Заголовок сообщения: | [6.0] Задвоение платежей |
Добрый день. Если в момент бэкапа БД приходит Яндекс-платёж - он вносится дважды: Код: id cid tranz sum val pc purse datetime 2916 17795 2000466776173 650.00 RUB EKOM 410011837201967 02.07.2016 07:03:15 2917 17795 2000466776173 650.00 RUB EKOM 410011837201967 02.07.2016 07:03:15 2964 18379 2000468855534 500.00 RUB EKOM 410011837201967 06.07.2016 07:00:23 2965 18379 2000468855534 500.00 RUB EKOM 410011837201967 06.07.2016 07:00:23 Видимо, не дождавшись ответа из-за нагрузки на БД при бэкапе, Яндекс перепосылает платеж - он падает в очередь и, после окончания бэкапа, проводится дважды - не отсекая повторный по номеру транзакции. |
Автор: | Artur [ 16 авг 2016, 14:08 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
А вы бэкап делаете с основной БД? Обычно делают репликацию на слейв, а потом снимают бэкапы со слейва, который потом догонит мастер... |
Автор: | ЮжныйКраснодар [ 16 авг 2016, 14:10 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
да - с основной |
Автор: | stark [ 16 авг 2016, 14:30 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
Еще есть Percona XtraBackup. |
Автор: | ЮжныйКраснодар [ 16 авг 2016, 14:40 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
это - понятно, но - в идеале - модуль должен отсекать повторяющиеся платежи с одинаковыми номерами транзакции, суммами и временем. |
Автор: | Artur [ 16 авг 2016, 14:57 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
А с каким интервалом приходили платежи? |
Автор: | dimOn [ 16 авг 2016, 16:41 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
Каким экзекутером/протоколом пользуетесь? /yaexecuter/ или /yaexecuter3/ |
Автор: | dimOn [ 16 авг 2016, 16:46 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
проверки там все эти есть согласно протоколу (сверяется по InvoiceId): 1) на повторный checkOrder ошибка там вылезает (по протоколу не может прийти повторно), но это нормально т.к. запрос приходит в момент попытки платежа и всё равно там ничего не делается при этом, только договор пытается найтись 2) на повторный paymentAviso сразу отправляется корректный ответ (с текстовым комментарием OK (Re-send) ) и ничего не делается, как и положено по протоколу, т.к. там и написано что уведомление об оплате может приходить повторно так что дело не в коде, а в том что в момент прихода второго запроса у вас в БД нет записи ещё о первом приходе, вот тут нужно подумать почему такое |
Автор: | ЮжныйКраснодар [ 16 авг 2016, 18:05 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
dimOn писал(а): Каким экзекутером/протоколом пользуетесь? /yaexecuter/ или /yaexecuter3/ /yaexecuter3/ запросы Код: [02/Jul/2016:07:03:14 +0300] 0.019 200 171 "POST /bgbilling/yaexecuter3 HTTP/1.1"
и [02/Jul/2016:07:10:35 +0300] 380.285 200 173 "POST /bgbilling/yaexecuter3 HTTP/1.1" |
Автор: | dimOn [ 16 авг 2016, 18:18 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
Второй запрос висел 6.5 минут. Вероятно, он захватил себе коннекшен, в это время другой запрос сделал все дела, потом когда его отпустило - он в этом коннекшене и сделал всё что ему нужно, а в нём не было данных БД, потому что там транзакции. Наверное, так. Хотя первый запрос был 7+ минут ранее, потому непонятно что произошло, нужно совместно подумать об этом. В коде как я сказал все проверки на дублирующийся запрос есть. |
Автор: | ЮжныйКраснодар [ 16 авг 2016, 18:51 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
А если добавить на таблицу yamoney_transactions_Х ключ по связке (invoiceId + paymentDateTime)? Тогда сама БД будет отбивать такие дубли, вываливая ошибку в логи |
Автор: | dimOn [ 17 авг 2016, 11:36 ] |
Заголовок сообщения: | Re: [6.0] Задвоение платежей |
Ну почему тогда не по invoiceId просто. Ну так-то можно теоретически... но тогда яндексу вернётся ошибочный ответ что не очень-то по протоколу |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |