PayPal API Проблема межсайтового запроса Cookie (Django, JavaScript)
Я создаю сайт для своего выпускного проекта и столкнулся с некоторыми проблемами при создании платежного портала для моего сайта. Сайт работал корректно на днях вечером, и без внесения каких-либо изменений, теперь кнопки не отображаются, и меня забрасывают ошибками относительно указания cookie в межсайтовом адресе. Прилагаю файл checkout.html, в который включен PayPal js, а также коды ошибок, которые я получаю из консоли. Любая помощь будет очень признательна!
Я пытался редактировать глобальный конфиг и играл с атрибутом SameSite, но безрезультатно :(
)Информация об ошибке расширена
Вот как портал работал прошлой ночью, обратите внимание, что я не делал никаких изменений с моей стороны с тех пор до настоящего времени.
https://gyazo.com/7cfcc6a9d226af3604a7a597d39e7316
Я не знаю, в чем заключается ваша проблема, но использовать actions.order.create / capture на стороне клиента, а затем выполнять серверные операции после факта - это неправильно и плохой дизайн. Этого никогда не следует делать.
Если серверные операции должны иметь место (такие как сохранение данных формы или запись в базу данных), то создание/захват платежа должно осуществляться на сервере, через API. Если повезет, проблема в вашем вопросе может быть решена как побочный продукт начала работы и правильной реализации:
Следуйте руководству PayPal Checkout integration и создайте 2 маршрута (пути url) на вашем сервере django, один для 'Create Order' и один для 'Capture Order'. Вы можете использовать Checkout-Python-SDK для API вызовов маршрутов к PayPal, или вашу собственную реализацию HTTPS, сначала получающую токен доступа, а затем выполняющую вызов. Оба маршрута должны возвращать только данные в формате JSON (без HTML или текста). Внутри 2-го маршрута при успешном выполнении API захвата вы должны проверить правильность суммы и сохранить результирующие платежные данные в вашей базе данных (в частности purchase_units[0].payments.captures[0].id
, который является идентификатором транзакции PayPal) и выполнить любую необходимую бизнес-логику (такую как отправка электронных писем с подтверждением или резервирование продукта) непосредственно перед передачей возвращаемого JSON вызывающей стороне. В случае ошибки также передайте детали JSON, так как фронтенд должен обрабатывать такие случаи.
Сопрягите эти 2 маршрута с этим потоком утверждения на фронтенде: https://developer.paypal.com/demo/checkout/#/pattern/server . (Если вам нужно отправить какие-либо дополнительные данные с клиента на сервер, например, массив элементов или выбранные опции или данные формы в вашем случае, добавьте body
параметр к fetch со значением, которое является строкой JSON или объектом ваших сериализованных данных)