def menu_charge(request, request_id=0): if request.method == "POST": stripe.api_key = settings.STRIPE_API_KEY card = request.POST.get("stripeToken") m = [] food_request = get_request(request_id) payment = Payment() payment.amount = food_request.total payment.paidBy = request.user payment.description = "food delivery: " #+ item_list x = payment.amount * 100 #Convert from dolars to cents y = (x / 100) * 2.9 #Adjust stripe fees print card success, instance = payment.charge(int((x + y) + 30), card) if not success: raise forms.ValidationError("Error: %s" % instance.message) else: instance.amount = payment.amount instance.save() food_request.paid = True food_request.save() return HttpResponseRedirect("/") else: context = {'user': request.user, 'stripe_key': settings.STRIPE_PUB_KEY} return render(request, 'pay.html', context)
def make_payment(): try: amount = int(request.form.get('amount')) * 10 # toman to rial if amount < 10000: raise ValueError("حداقل مبلغ مجاز برای پرداخت ۱۰۰۰ تومان است.") phone_number = request.form.get('phone') if phone_number: if not phone_number.isnumeric(): raise ValueError("شماره تماس وارد شده نامعتبر است.") phone_number = f'0{int(phone_number)}' # convert to english digits if not re.match(r'^09\d{9}$', str(phone_number)): raise ValueError("شماره تماس وارد شده نامعتبر است.") # record payment data in database payment = Payment() payment.name = request.form.get('name') payment.email = request.form.get('email') payment.description = request.form.get('description') payment.amount = amount payment.phone_number = phone_number db.session.add(payment) db.session.commit() payment_url = webpay.payment( reference=payment.id, # unique ID amount_irr=amount, callback_url=url_for('verify_payment', _external=True), payer_mobile=phone_number) return redirect(payment_url) except ValueError as e: flash(str(e)) return redirect(url_for('donation_page')) except Exception: db.session.rollback() # ensure database session works after error traceback.print_exc() # print traceback and continue return redirect(url_for('donation_page'))