From 9a2529bc4d074b4eb1f5676d102f7d69dc8a7d04 Mon Sep 17 00:00:00 2001 From: vanzhiganov Date: Mon, 23 Oct 2017 03:12:09 +0300 Subject: [PATCH] update --- wotstats/models/userwallet.py | 5 +- wotstats/templates/pages/wallet/index.html | 6 +- wotstats/views/wallet.py | 110 ++++++++++++++++++++- 3 files changed, 114 insertions(+), 7 deletions(-) diff --git a/wotstats/models/userwallet.py b/wotstats/models/userwallet.py index 10c6b65..1b34453 100644 --- a/wotstats/models/userwallet.py +++ b/wotstats/models/userwallet.py @@ -8,8 +8,9 @@ class UserWallet(db.Model): user = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) balance = db.Column(db.Integer, default=0) - # def __init__(self): - # pass + def __init__(self, user, balance=0): + self.user = user + self.balance = balance def __repr__(self): return ''.format( diff --git a/wotstats/templates/pages/wallet/index.html b/wotstats/templates/pages/wallet/index.html index b1853d3..0863997 100644 --- a/wotstats/templates/pages/wallet/index.html +++ b/wotstats/templates/pages/wallet/index.html @@ -2,11 +2,11 @@ {% block content %}

Кошелёк

-

Баланс: $100500

+

Баланс: {{ balance }} рублей

Пополнить баланс

-
+
- +
diff --git a/wotstats/views/wallet.py b/wotstats/views/wallet.py index 512a698..5f5e771 100644 --- a/wotstats/views/wallet.py +++ b/wotstats/views/wallet.py @@ -7,7 +7,7 @@ from jinja2 import TemplateNotFound from wotstats.openid import oid from wotstats.database import db -from wotstats.models import User +from wotstats.models import User, UserWallet from wotstats.lib import parse_wargaming_openid_url pages_wallet = Blueprint( @@ -19,6 +19,112 @@ def index(): if not g.user: return redirect(url_for('pages_home.index')) + if UserWallet.query.filter_by(user=session['user']).count() == 0: + n = UserWallet(session['user'], 0) + db.session.add(n) + db.session.commit() + + balance = UserWallet.query.with_entities( + UserWallet.balance + ).filter_by( + user=session['user'] + ).scalar() + return render_template( - 'pages/wallet/index.html' + 'pages/wallet/index.html', + balance=balance ) + +@pages_wallet.route('/robokassa/', methods=['GET', 'POST']) +def robokassa(action): + if action == 'process': + if not g.user: + return redirect(url_for('pages_home.index')) + + user_id = session['user'] + amount = request.form.get('amount', 0) + + # create transaction data to database + transaction_id = controller_robokassa.transaction_create(user_id, amount, 'robokassa', 'process') + + payment_details = { + "payment_id": transaction_id, + "amount": amount, + "login": controller_robokassa.args['PAY_ROBOKASSA_LOGIN'], + "password": controller_robokassa.args['PAY_ROBOKASSA_PASSWORD1'], + "signature": '' + } + payment_details["signature"] = md5( + "%(login)s:%(amount)s:%(payment_id)s:%(password)s" % payment_details + ).hexdigest() + # print payment_details + return render_template('pages/payment/robokassa/process.html', payment=payment_details) + + if action == 'result': + if request.method == 'POST': + transaction_id = request.form['InvId'] + signature = request.form['SignatureValue'] + amount = request.form['OutSum'] + + transaction_hash = md5("%s:%s:%s" % (amount, transaction_id, controller_robokassa.args['PAY_ROBOKASSA_PASSWORD2'])).hexdigest() + # print transaction_hash + # print signature.lower() + if signature.lower() == transaction_hash.lower(): + # update transaction signature + controller_robokassa.transaction_set_notified(transaction_id, 1) + # update user balance + controller_robokassa.balance_update(transaction_id, amount) + + # update transaction signature + transaction = models.UsersBalanceTransactions.get(models.UsersBalanceTransactions.id == transaction_id) + transaction.status = 'success' + transaction.save() + else: + return jsonify(error="invalid signature") + return render_template('pages/payment/robokassa/result.html') + return redirect(url_for('account.billing')) + + + + if action == 'success': + # check session + if not ControllerUsers().check_session(): + return redirect(url_for("account.logout")) + # auth user + if not ControllerUsers().auth(session['email'], session['password']): + return redirect(url_for("account.logout")) + + if request.method == "POST": + # print request.form + # culture = request.form['Culture'] + # transaction_id = request.form.get('InvId') + + # TODO: если эта часть делается на шаге `results`, то можно убрать его + # update transaction signature + # transaction = models.UsersBalanceTransactions.get(models.UsersBalanceTransactions.id == transaction_id) + # transaction.status = 'success' + # transaction.save() + + return redirect(url_for('payments.success')) + return redirect(url_for('payments.success')) + + if action == 'fail': + # check session + if not ControllerUsers().check_session(): + return redirect(url_for("account.logout")) + + # auth user + if not ControllerUsers().auth(session['email'], session['password']): + return redirect(url_for("account.logout")) + + if request.method == "POST": + # print request.form + + transaction_id = request.form['InvId'] + + # update transaction signature + transaction = models.UsersBalanceTransactions.get(models.UsersBalanceTransactions.id == transaction_id) + transaction.status = 'fail' + transaction.save() + + return redirect(url_for('payments.fail'))