Рекомендации по проверке на стороне сервера Приобретение приложений в iOS

Мы используем проверку на стороне сервера платежа таким образом -

  • Пользователь производит платеж.
  • API хранилища API отправляет транзакционную квитанцию ​​в приложение.
  • Приложение отправляет на сервер запрос на получение кодированной транзакции base64.
  • Наш сервер вызывает https://buy.itunes.apple.com/verifyReceipt и подтверждает прием транзакций.
  • Пользователь помечен как оплаченный.

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

Теперь у нас есть одна ошибка получения транзакции и сердитый пользователь. Как вы предлагаете нам идти вперед? Как мы можем предотвратить это в будущем? Существуют ли какие-либо руководящие принципы или рекомендации, которые мы можем предпринять для предотвращения такой ситуации?

Спасибо.

Ответ 1

Основываясь на моем опыте, вероятными проблемами являются

  • Данные base64 получили url-кодирование по пути и поэтому + и/получили испорченный - замените их более безопасными символами перед передачей
  • Вся транзакция является фиктивной.

Чтобы проверить второй случай, нужно посмотреть свою учетную запись и посмотреть, есть ли соответствующая запись о покупке. К сожалению, веб-сайт может быть немного сложно пересмотреть, если у вас низкий объем покупки.

В вашем коде две вещи необходимы для правильной обработки ошибок на вашем сервере или в случае, если это произойдет, Apple закончит.

  • Не вызывайте finishTransaction: пока вы не общаетесь с сервером (это не поможет в этом случае, но стоит отметить)
  • У вас есть кнопка "Обновить покупки" или действие, которое вызывает restoreCompletedTransactions: в SKQaymentQueue defaultQueue. Для объектов, не подлежащих расходуемому/правому, это будет возвращать все транзакции с квитанциями, которые могут быть повторно проверены на вашем сервере.

Если проблема, с которой вы сталкиваетесь, связана с нерасходуемыми/правами, то второй элемент - выход.