django - 未找到:/回调/错误。我希望我的 payment_reponse 函数将 order.paid 更新为 True,保存到数据库并返回 done.html 页面
问题描述
#orders.view#
支付成功完成。但不是设置order.pad=True
,保存和重定向到orders:done
,orders:canceled
它返回“未找到:/回调/”错误
from django.shortcuts import render, redirect
from django.urls import reverse
from cart.cart import Cart
from .models import OrderItem, Order
from .forms import OrderCreateForm
from .tasks import order_created
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_http_methods
from django.template import loader
from decimal import Decimal
import environ
import random
import math
import requests
env = environ.Env()
environ.Env.read_env()
def order_create(request):
cart = Cart(request)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
total_cost = cart.get_total_price()
if form.is_valid():
name = form.cleaned_data['last_name']
email = form.cleaned_data['email']
amount = f'{total_cost:.2f}',
phone = form.cleaned_data['phone']
order = form.save()
for item in cart:
OrderItem.objects.create(order=order,
product=item['product'],
price=item['price'],
quantity=item['quantity'])
# clear the cart
cart.clear()
# launch asynchronous task
order_created.delay(order.id)
request.session['order_id'] = order.id
return redirect(str(process_payment(name, email, amount, phone)))
else:
form = OrderCreateForm()
return render(request,
'orders/order/create.html',
{'cart': cart, 'form': form})
def process_payment(name, email, amount, phone):
auth_token = env('SECRET_KEY')
hed = {'Authorization': 'Bearer ' + auth_token}
data = {
"tx_ref": ''+str(math.floor(1000000 + random.random()*9000000)),
"amount": amount,
"currency": "NGN",
"redirect_url": "http://localhost:8000/callback",
"payment_options": "card",
"meta": {
"consumer_id": 23,
"consumer_mac": "92a3-912ba-1192a"
},
"customer": {
"email": email,
"phonenumber": phone,
"name": name
},
"customizations": {
"title": "Jmd Fashion Store",
"description": "Best store in town",
"logo": "https://getbootstrap.com/docs/4.0/assets/brand/bootstrap-solid.svg"
}
}
url = ' https://api.flutterwave.com/v3/payments'
response = requests.post(url, json=data, headers=hed)
response = response.json()
link = response['data']['link']
return link
@csrf_exempt
def payment_done(request):
return render(request, 'orders/order/done.html')
@csrf_exempt
def payment_canceled(request):
return render(request, 'orders/order/canceled.html')
@require_http_methods(['GET', 'POST'])
def payment_response(request, order_id):
order_id = request.session.get('order_id')
order = get_object_or_404(Order, id=order_id)
status = request.GET.get('status', None)
tx_ref = request.GET.get('tx_ref', None)
if status and tx_ref:
order.paid = True
order.flutter_tx_ref = tx_ref
order.save()
return render('orders:done')
else:
return render('orders:canceled')
#orders.url#
from django.urls import path
from . import views
app_name = 'orders'
urlpatterns = [
path('create/', views.order_create, name='order_create'),
path('callback', views.payment_response, name='payment_response'),
path('done/', views.payment_done, name='done'),
path('canceled/', views.payment_canceled, name='canceled'),
]
解决方案
推荐阅读
- react-native - 反应原生,使用 TouchableOpacity onPress
- c++ - 如何在 C++ 中的 5 张牌中找到“四种”
- coq - 如何使用 ssreflect 进行反射:无法将 ?x == ?y 与“n = n0”统一
- kubernetes - kubernetes v1.18:Pod 的 DNS 解析记录
- amazon-cloudformation - Cloudformation 跨账户导出输出/输入参数
- c - 如何从汇编中调用 C 函数以及如何静态链接它?
- xamarin.forms - 仅 xamarin 表单应用程序的 Asp.net Core 授权失败
- sql - 如何编写 SQL 查询以按时间戳对每个唯一用户的操作进行排名?
- elasticsearch - 使用 Rest API 调用将数据直接推送到 Elasticsearch
- flutter - 如何将特定索引处的值添加到 dart 中的空列表?