Programmishkin Blog

Покупка промокода и ошибка его инициализации

баг баунти

Описание

Сервис предоставляет возможность получать платный медиаконтент за разовую плату.
Оплата осуществляется через платежную систему stripe, после чего контент становится доступным в пользовательском каталоге.
В процессе тестовой оплаты, был исследован API-запрос инициализации платежа согласно документации.
{
  ...
  "sepa_debit_info": null,
  "session_id": "cs_live_n7RSUDnLkxw4vcxfSX6XOrGmPfHorRdYpziXltcPDUziqUVFsqjEtBTzNnUnqf9fLCRou0F",
  "setup_future_usage": null,
  "setup_future_usage_for_payment_method_type": {},
  "setup_intent": null,
  "shipping_address_collection": null,
  "shipping_options": [],
  "shipping_rate": null,
  "shipping_tax_amounts": [],
  "state": "active",
  "status": "open",
  "submit_type": "pay",
  "subscription_data": null,
  "subscription_settings": null,
  "success_url": "https://example.com/api/stripe-success?session_id=cs_live_n7RSUDnLkxw4vcxfSX6XOrGmPfHorRdYpziXltcPDUziqUVFsqjEtBTzNnUnqf9fLCRou0F",
    ...
  }
   ...
Здесь session_id - это id сессии, который отдает stripe при создании платежа, а success_url - это страница, на которую перебрасывает пользователя, в случае успешной оплаты.

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

Как оказалось, на стороне сервера не правильно обрабатывался статус paid от stripe.

Решение

Необходимо загружать контент в каталог пользователя только в том случае, когда есть подтверждение от самого stripe (статус - paid) по соответствующему session_id.
Made on
Tilda