【发布时间】:2020-01-16 19:42:12
【问题描述】:
我在使用 django-paypal 时遇到问题,问题发生在付款成功完成后收到 paypal IPN 的那一刻。
错误:
Forbidden (CSRF cookie not set.): /paypal/
[15/Sep/2019 22:53:04] "POST /paypal/ HTTP/1.1" 403 2896
Forbidden (CSRF cookie not set.): /paypal/
[15/Sep/2019 22:53:19] "POST /paypal/ HTTP/1.1" 403 2896
Forbidden (CSRF cookie not set.): /paypal/
[15/Sep/2019 22:53:42] "POST /paypal/ HTTP/1.1" 403 2896
Forbidden (CSRF cookie not set.): /paypal/
[15/Sep/2019 22:54:24] "POST /paypal/ HTTP/1.1" 403 2896
Forbidden (CSRF cookie not set.): /paypal/
[15/Sep/2019 22:55:45] "POST /paypal/ HTTP/1.1" 403 2896
我不知道发生了什么,我开始调查错误但我没有取得多大成就,调查我将文件settings.pyCSRF_COOKIE_SECURE作为True放入,即使这样它也没有用,有什么解决办法吗?
这是付款的代码:
def process_payment(request, pk):
course = get_object_or_404(Course, pk = pk)
host = request.get_host()
paypal_dict = {
'business': settings.PAYPAL_RECEIVER_EMAIL,
'item_name': course.title,
'amount': course.price,
'currency_code': 'USD',
'notify_url': 'http://{}{}'.format(host, reverse('paypal-ipn')),
'return_url': 'http://{}{}'.format(host, reverse('course:list')),
'cancel_return': 'http://{}{}'.format(host, reverse('payment_cancelled')),
}
form = PayPalPaymentsForm(initial = paypal_dict)
return render(request, 'carts/process_payment.html', {'form': form, 'course': course})
更新
给出错误的视图不是我做的,来自负责管理paypal IPN的django-paypal,该视图称为ipn。观点如下:
https://github.com/spookylukey/django-paypal/blob/master/paypal/standard/ipn/views.py
那个视图是notify_url。
欲了解更多信息,这是我正在做的指南:https://overiq.com/django-paypal-integration-with-django-paypal/
这些是我的应用程序的 urls.py:
urlpatterns = [
path('cart/', CartDetailView.as_view(), name = 'cart'),
path('cart-add/', views.add_course, name = 'add_course'),
path('process-payment/<int:pk>/', views.process_payment, name='process_payment'),
path('payment-cancelled/', views.payment_canceled, name='payment_cancelled'),
]
这些是 django-paypal ipn 应用程序的 urls.py
urlpatterns = [
url(r'^$', views.ipn, name="paypal-ipn"),
]
这将是我的 urlconf:
urlpatterns = [
path('django-admin/', admin.site.urls),
# Paths of My Apps
path('admin/', include(administration_patterns)),
path('', include('core.urls')),
path('', include('carts.urls')),
path('', include(course_patterns)),
path('paypal/', include('paypal.standard.ipn.urls')),
# Paths of Auth
path('accounts/', include('django.contrib.auth.urls')),
path('accounts/', include('registration.urls')),
]
【问题讨论】:
-
你运行什么代码来发出这个请求?
-
我已经用代码更新了我的问题
-
请使用处理
/paypal/路径的urls.py更新您的问题,我将在早上更新我的答案。谢谢 -
或者你可以链接一个 github 项目,这样会更容易(记得先删除 api 密钥!)
-
好的,现在更新我的问题,验证,感谢您的帮助!
标签: django paypal django-rest-framework paypal-sandbox payment