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'))