示例#1
0
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'))