使用 Paypal Python SDK 在 Django 应用程序中集成 PayPal
Integrate PayPal in Django app using Paypal Python SDK
我正在开发一个使用 Python(3.6) & Django(1.10) 的项目,我需要在这个项目中实现 Paypal 支付方式。我决定使用来自 Paypal 的官方 Python SDK 而不是其他第三方 packages.It 不仅是 csrf 问题,还有我们如何为 paypal 结账按钮呈现自定义表单。
这是我尝试过的。
根据文档 Here.
这是我的模板:
<form class="form">
{% csrf_token %}
<div id="paypal-button"></div>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script>
var CREATE_PAYMENT_URL = '{% url 'users:payment' %}';
var EXECUTE_PAYMENT_URL = 'https://my-store.com/paypal/execute-payment';
paypal.Button.render({
env: 'sandbox', // Or 'production'
commit: true, // Show a 'Pay Now' button
payment: function () {
return paypal.request.post(CREATE_PAYMENT_URL).then(function (data) {
return data.paymentID;
});
},
onAuthorize: function (data) {
return paypal.request.post(EXECUTE_PAYMENT_URL, {
paymentID: data.paymentID,
payerID: data.payerID}).then(function () {
// The payment is complete!
// You can now show a confirmation message to the customer
});
}
}, '#paypal-button');
</script>
</form>
来自urls.py:
url('^payment/$', views.PaymentProcess.as_view(), name='payment'),
来自 views.py:
class PaymentProcess(LoginRequiredMixin, generic.DetailView):
def post(self, request, *args, **kwargs):
mydict = {
'paymentID': 'PAYMENTID',
}
print('Getting payment request')
return json.dumps(mydict)
当 Paypal 向 /payment 提交 post 请求时,它 returns 由于 csrf_token
而出现 403 禁止错误。如何通过此请求传递 csrf_token
。
任何资源或教程将不胜感激。
您似乎可以将自定义 headers 添加到您的 post 请求中:https://github.com/paypal/PayPal-Python-SDK/blob/master/paypalrestsdk/api.py#L270
考虑到您只需将 csrf 令牌添加到 headers:https://docs.djangoproject.com/en/2.0/ref/csrf/#setting-the-token-on-the-ajax-request
你的服务器应该给你访问权限
我正在开发一个使用 Python(3.6) & Django(1.10) 的项目,我需要在这个项目中实现 Paypal 支付方式。我决定使用来自 Paypal 的官方 Python SDK 而不是其他第三方 packages.It 不仅是 csrf 问题,还有我们如何为 paypal 结账按钮呈现自定义表单。
这是我尝试过的。
根据文档 Here.
这是我的模板:
<form class="form">
{% csrf_token %}
<div id="paypal-button"></div>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script>
var CREATE_PAYMENT_URL = '{% url 'users:payment' %}';
var EXECUTE_PAYMENT_URL = 'https://my-store.com/paypal/execute-payment';
paypal.Button.render({
env: 'sandbox', // Or 'production'
commit: true, // Show a 'Pay Now' button
payment: function () {
return paypal.request.post(CREATE_PAYMENT_URL).then(function (data) {
return data.paymentID;
});
},
onAuthorize: function (data) {
return paypal.request.post(EXECUTE_PAYMENT_URL, {
paymentID: data.paymentID,
payerID: data.payerID}).then(function () {
// The payment is complete!
// You can now show a confirmation message to the customer
});
}
}, '#paypal-button');
</script>
</form>
来自urls.py:
url('^payment/$', views.PaymentProcess.as_view(), name='payment'),
来自 views.py:
class PaymentProcess(LoginRequiredMixin, generic.DetailView):
def post(self, request, *args, **kwargs):
mydict = {
'paymentID': 'PAYMENTID',
}
print('Getting payment request')
return json.dumps(mydict)
当 Paypal 向 /payment 提交 post 请求时,它 returns 由于 csrf_token
而出现 403 禁止错误。如何通过此请求传递 csrf_token
。
任何资源或教程将不胜感激。
您似乎可以将自定义 headers 添加到您的 post 请求中:https://github.com/paypal/PayPal-Python-SDK/blob/master/paypalrestsdk/api.py#L270
考虑到您只需将 csrf 令牌添加到 headers:https://docs.djangoproject.com/en/2.0/ref/csrf/#setting-the-token-on-the-ajax-request
你的服务器应该给你访问权限