def payment(): form = PaymentForm(request.form) users = User.query.filter(User.activated).order_by(User.email.asc()) if request.method == 'POST' and form.validate(): user = User.query.filter(User.id == request.form['user_id']).first() payment = Payment(user, form.value.data) dbs.add(payment) dbs.commit() flash('Payment added successfully.', 'alert alert-success') return redirect(url_for('payment')) else: data = {'nav_urls': get_urls(), 'active_url': url_for('payment')} return render_template('payment_add.html', data=data, form=form, users=users)
def payment(): form = PaymentForm(request.form) users = User.query.filter(User.activated).order_by(User.email.asc()) if request.method == 'POST' and form.validate(): user = User.query.filter(User.id == request.form['user_id']).first() payment = Payment(user, form.value.data) dbs.add(payment) dbs.commit() flash('Payment added successfully.', 'alert alert-success') return redirect(url_for('payment')) else: data = { 'nav_urls': get_urls(), 'active_url': url_for('payment') } return render_template('payment_add.html', data=data, form=form, users=users)
def checkout(): paymentForm = PaymentForm(request.form) if request.method == 'POST' and paymentForm.validate(): paymentDict = {} db = shelve.open('storage.db', 'c') try: paymentDict = db['Payment'] except: print("Error in retrieving Items from storage.db.") payment = Payment.Payment(paymentForm.name.data, paymentForm.cardno.data, paymentForm.date.data, paymentForm.cvv.data) paymentDict[payment.get_name()] = payment db['Payment'] = paymentDict db.close() return redirect(url_for('invoice')) return render_template('checkout.html', form=paymentForm)
def submit(): form = PaymentForm(request.form) log.info('Incoming payment. Details:') if form.validate(): amount = str(round(form.data['amount'], 2)) # 100 -> 100.00 c = form.data['currency'] payment_data = { 'amount': amount, 'currency': c, 'shop_id': get_shop_id(), 'shop_order_id': get_shop_order_id(), } d = form.data.get('description') if d: payment_data['description'] = d log.critical(payment_data) if c == available_currencies['EUR']: payment_data['sign'] = generate_sign(**payment_data) log.info('Rendering "Pay method" form.') return render_template('payform_pay.html', **payment_data) elif c == available_currencies['RUB']: payment_data['payway'] = 'payeer_rub' payment_data['sign'] = generate_sign(**payment_data) log.info('Posting to Piastrix for confirmation') h = {'Content-Type': 'application/json'} r = requests.post('https://core.piastrix.com/invoice/create', data=json.dumps(payment_data), headers=h) res = r.json() data = res['data'] if res['result'] is True and res['message'] == 'Ok': log.info(data) log.info('Request succeded. Rendering "Invoice method" button') return render_template('payform_invoice.html', data=data) else: log.error('Request failure. Details:') log.error(res) return 'Malformed request', 403 elif c == available_currencies['USD']: payment_data['shop_amount'] = payment_data.pop('amount') payment_data['shop_currency'] = payment_data.pop('currency') payment_data['payer_currency'] = payment_data['shop_currency'] payment_data['sign'] = generate_sign(**payment_data) log.info('Posting to Piastrix for confirmation') h = {'Content-Type': 'application/json'} r = requests.post('https://core.piastrix.com/bill/create', data=json.dumps(payment_data), headers=h) res = r.json() data = res['data'] if res['result'] is True and res['message'] == 'Ok': log.info('Request succeeded. Redirecting via "Bill method"') return redirect(data['url'], code=302) else: log.error('Request failed. Details:') log.error(res) return f'Malformed request. Details:<br>{res}', 403 else: errs = {} for f, e in form.errors.items(): errs[f] = e log.error('Bad input:') log.error(errs) return f'Bad input<br>{errs}', 403