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