我有一个在线商店,用户在 domain.com/pay 付款并在 domain.com/done 付款后收到他们的产品
但是,当我测试它时,我发现用户可以手动访问 URL 并键入 domain.com/pay,突然之间,他们无需付费即可获得产品!我想以某种方式检查用户是手动访问它还是通过重定向访问它,
如果手动然后引发 http403 如果从重定向然后该功能将正常发生
这是我的 process_pay 视图
def payment_process(request, trade_id):
trade = get_object_or_404(Trade, id=trade_id)
host = request.get_host()
paypal_dict = {
'business': trade.seller.email,
'amount': Decimal(trade.price),
'item_name': trade.filename,
'invoice': str(trade.id),
'currency_code': 'USD',
'notify_url': 'http://{}{}'.format(host,
reverse('paypal-ipn')),
'return_url': 'http://{}{}/{}'.format(host,
*reverse('payment_done', kwargs={'trade_id': trade.id})),
'cancel_return': 'http://{}{}'.format(host,
reverse('home')),
}
form = PayPalPaymentsForm(initial=paypal_dict)
return render(request, 'payment/payment_process.html', {'trade': trade, 'form': form})
我的 done_process 视图
@csrf_exempt
def payment_done(request, trade_id):
# if user entered from a redirection:
# Give product to user
# elif user entered manually:
raise http403
# else:
messages.error(request, 'something went wrong')
return redirect('home')
return redirect('trade:inbox')