|
Laravel 5.5 Braintree защита от повторных созданий подписки
|
|||
---|---|---|---|
#18+
Всем привет! Работаю над проектом с оплатой и подписками braintree. Возник вопрос защиты от повторных запросов на подписку пользователя. Они возникают, например, если не блокировать кнопку submit при отправки формы. Если сохранять форму из разных табов/брузеров. Функция создания подписки состоит из двух частей - запрос к braintree на создании подписки и затем сохранение в БД подписки. За время запроса к braintree которое может быть до пару секунд возникает race_conditions когда первый запрос еще не сделал пользователя подписанным и за ним проходят еще несколько запросов. Код создания подписки: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Также замечу, что пользователь может иметь только одну активную подписку одновременно. Думаю в начале функции нужно записывать куда то время начале запроса. И при следующем запросе если с этого времени прошло скажем менее минуты отсекать повторный запрос. Пометку данную убирать в случае когда подписка успешно добавлена. Думаю как лучше создавать такую метку. Через фасад Cache в памяти? Но надежно ли? Создать столбец типа locked_time в Users? Также через фасад Cache, но выбрать драйвер для кеша БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 23:27 |
|
Laravel 5.5 Braintree защита от повторных созданий подписки
|
|||
---|---|---|---|
#18+
Вот что нашел Код: php 1. 2. 3. 4. 5. 6. 7.
Встроенную блокировку семафором в PHP ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2017, 01:22 |
|
Laravel 5.5 Braintree защита от повторных созданий подписки
|
|||
---|---|---|---|
#18+
Использовать транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2017, 08:18 |
|
|
start [/forum/topic.php?fid=23&msg=39570645&tid=1460431]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 473ms |
0 / 0 |