Я разрабатываю сайт краудфандинга (аналогично Kickstarter ) с использованием инфраструктуры CodeIgniter.
Я "успешно" внедрил адаптивные платежи PayPal, используя эту библиотеку .
Но я просто не уверен, как правильно и безопасно проверять успешные / неуспешные платежи, а данные, которые важны для сохранения в базе данных.
Примечание. Это отложенный платеж, связанный с цепочкой, я являюсь основным получателем, а вторичный получатель является создателем краудфандингового проекта. Деньги переводятся вторичному получателю по истечении заранее определенного периода времени.
Поток, который у меня есть сейчас, выглядит так:
- Пользователь нажимает, чтобы купить вознаграждение.
- Я использую операцию API Pay для запроса платежа (включая уникальный TrackingID) и сохраняю запрос в базе данных.
- Если запрос выполнен успешно, я сохраняю некоторые данные ответа в сеансе (TrackingID, PayKey, сумму, ...) и перенаправляю в PayPal ..
- На этом этапе пользователь может: принять платеж, отменить или просто закрыть браузер, поэтому я не знаю, что здесь происходит ... (рекомендации?)
- Если пользователь принимает платеж, он перенаправляется обратно на мой сайт, и я использую данные, сохраненные в сеансе, для запроса операции API PaymentDetails для получения информации о платеже.
- Я сохраняю результат в базе данных и проверяю, совпадает ли «сумма» ответа с «суммой» запроса (для безопасности).
- Если все прошло нормально, я обновляю базу данных и связываю TrackingID оплаты с пользователем и вознаграждением, которое он купил.
- Позже (может быть через несколько месяцев) администратор запрашивает операцию API «ExecutePayment», и деньги переводятся от нас создателю проекта, и мы берем небольшую комиссию (вот как работает краудфандинг). .)
Теперь я уверен, что мне не хватает многих вещей, но я понятия не имею, что:
- А как насчет IPN API? Мне это надо? Где же играть в потоке и проверках?
- Что мне делать, если пользователь закрывает окно браузера, когда находится в PayPay (с моего сайта).
- Я слышал, что PayKey действителен в течение 3 часов. Как я могу выполнить 'ExecutePayment' по истечении нескольких месяцев?
- Как обрабатывать огромное количество типов ошибок в API PayPal?
- Какие-нибудь советы или примеры других вещей, о которых мне нужно позаботиться? Безопасность? Ошибки? Другие
Большое спасибо, мне очень нужен ваш ответ!