在我的电子商务项目中,当用户向购物车添加项目并通过PayPal执行付款时,PayPal窗口将打开,提交付款后窗口将关闭,但网站页面仍保留到付款页面,其中购物车中仍有项目,因为页面未刷新
因此,我的问题是如何设置ajax javascript以将网站页面重定向到另一个名为“order_completed.html”的链接,该链接是我使用已执行订单详细信息设置的,而不是从脚本向买家显示成功消息
再详细一点,更清楚一点
我试着添加
// similar behavior as an HTTP redirect
window.location.replace("/");
这就是所发生的事情,它将我返回到主页而不刷新,但这仍然不是我试图做的,我试图做的是在视图中呈现以下内容:
return render(request, "order_completed.html", {'order': order})
这样我就可以为成功购买添加订单参考号
我不知道如何做到这一点
以下是views.html:
def payment_complete(request):
body = json.loads(request.body)
order = Order.objects.get(
user=request.user, ordered=False, id=body['orderID'])
payment = Payment(
user=request.user,
stripe_charge_id=body['payID'],
amount=order.grand_total()
)
payment.save()
# assign the payment to order
order.payment = payment
order.ordered = True
order.ref_code = create_ref_code()
order.save()
messages.success(request, "Your Order was Successful ! ")
return render(request, "order_completed.html", {'order': order})
class PaymentView(View):
def get(self, *args, **kwargs):
# order
order = Order.objects.get(user=self.request.user, ordered=False)
if order.billing_address:
context = {
'order': order,
'DISPLAY_COUPON_FORM': False
}
return render(self.request, "payment.html", context)
else:
messages.warning(
self.request, "You have not added a billing address")
return redirect("core:checkout")
# `source` is obtained with Stripe.js; see https://stripe.com/docs/payments/accept-a-payment-charges#web-create
# -token
def post(self, *args, **kwargs):
order = Order.objects.get(user=self.request.user, ordered=False)
token = self.request.POST.get('stripeToken')
amount = int(order.grand_total() * 100)
try:
charge = stripe.Charge.create(
amount=amount, # cents
currency="usd",
source=token,
)
# create payment
payment = Payment()
payment.stripe_charge_id = charge['id']
payment.user = self.request.user
payment.amount = order.grand_total()
payment.save()
# assign the payment to the order
order_items = order.items.all()
order_items.update(ordered=True)
for item in order_items:
item.save()
order.ordered = True
order.payment = payment
order.ref_code = create_ref_code()
order.save()
messages.success(self.request, "Your Order was Successful ! ")
return render(self.request, "order_completed.html", {'order': order})
以下是PayPal脚本:
<!--Paypal Script-->
<script>
// Render the PayPal button into #paypal-button-container
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== "") {
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === name + "=") {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie("csrftoken");
var orderID = "{{order.id}}";
var amount = "{{order.grand_total|floatformat:2}}";
var url = "{% url 'core:payment_complete' %}";
paypal.Buttons({
style: {
color: "blue",
shape: "pill",
label: "pay",
height: 40,
},
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: amount,
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
console.log(details);
sendData();
function sendData() {
fetch(url, {
method: "POST",
headers: {
"Content-type": "application/json",
"X-CSRFToken": csrftoken,
},
body: JSON.stringify({ orderID: orderID, payID: details.id }),
});
}
// Show a success message to the buyer
alert('Transaction completed by ' + details.payer.name.given_name + '!');
});
}
}).render('#paypal-button-container');
</script>
<!--Paypal Script-->
目前没有回答
相关问题 更多 >
编程相关推荐