В приложении Android, над которым я работаю, возникла проблема с платежами.
Когда пользователь хочет разместить заказ, мы выполняем запрос API, который возвращает URL платежа и идентификатор платежа. URL - это веб-страница, которую мы откроем для оплаты, идентификатор используется для получения статуса платежа из нашего API. Когда мы запрашиваем статус платежа у нашего API, он возвращает либо «успешно», «отменено», либо «ожидает рассмотрения». Когда платеж завершен или когда пользователь щелкнет ссылку отмены на веб-странице платежа, пользователь будет перенаправлен на URL-адрес, который обрабатывается приложением. Если пользователь перенаправлен, мы перейдем либо на страницу подтверждения заказа (если платеж был успешным), либо обратно на страницу оформления заказа (когда платеж был отменен, нажав на ссылку отмены на веб-странице). Платежная веб-страница открывается с помощью пользовательской вкладки Chrome.
Проблема возникает, когда пользователь закрывает браузер до завершения или отмены платежа, а затем возвращается в наше приложение. Когда пользователь возвращается в наше приложение без перенаправления браузером, приложение выполнит запрос статуса, чтобы проверить, следует ли нам перейти на страницу подтверждения заказа. Когда браузер закрыт, может возникнуть один из следующих сценариев ios:
- Пользователь заплатил, но закрыл браузер до того, как произошло перенаправление. Запрос статуса вернется «успешно», и мы можем перейти к экрану подтверждения заказа.
- Пользователь не заплатил, нажал кнопку отмены на странице оплаты, но закрыл браузер до того, как произошло перенаправление. Запрос статуса вернется «отменен», и мы можем отправить пользователя обратно на экран оформления заказа.
- Пользователь заплатил, но платеж все еще обрабатывается. Пользователь закрывает браузер и возвращается в приложение. Запрос статуса вернется "в ожидании"
- Пользователь не хочет платить и просто закрыл браузер, потому что он хочет go вернуться на страницу оформления заказа, чтобы что-то изменить в форме, запрос статуса вернется " в ожидании ", потому что API не знает, что пользователь закрыл браузер
Сценарии 1 и 2 в порядке, но 3 и 4 вызывают проблемы. Когда запрос статуса возвращает «ожидает», приложение не знает, является ли это сценарием 3 или 4. Приложение отобразит диалоговое окно в верхней части экрана оформления заказа с надписью «ожидание платежа». Проблема в том, что, когда это происходит, приложение не знает, 1) ли платеж все еще обрабатывается и когда-нибудь будет успешным в будущем или 2) никогда не будет успешным, потому что пользователь никогда не платил. Если пользователь закрывает этот диалог, все еще возможно, что платеж будет успешным, и пользователь не будет знать. У нас было много жалоб пользователей, которые закрыли этот диалог, а затем попытались сделать заказ снова, что привело к случайному двойному заказу.
Мы попробовали обходной путь, сделав диалог не подлежащим закрытию как минимум на 30 секунд, чтобы дать платежу некоторое время для обработки, но это принесет очень плохой UX пользователям, которые только что закрыли диалог, чтобы вернуться к оформлению заказа экран (сценарий 4).
Есть ли какая-либо функция Android, которая нам не хватает, которая могла бы решить проблему? Есть ли другое решение? Мы хотели бы видеть подходы к другим приложениям.