From f4d40edf4012cf1527f3c8e4fd7eda6696263413 Mon Sep 17 00:00:00 2001 From: vanzhiganov Date: Sat, 28 May 2016 02:24:21 +0300 Subject: [PATCH] 55: Method not allowed --- .../templates/default/payment/fail.html | 20 ++++++ .../default/payment/robokassa/fail.html | 11 --- .../templates/default/payment/success.html | 21 ++++++ SWSCloudCore/views/payments/__init__.py | 70 +++++++++++-------- setup.py | 2 +- 5 files changed, 84 insertions(+), 40 deletions(-) create mode 100644 SWSCloudCore/templates/default/payment/fail.html delete mode 100644 SWSCloudCore/templates/default/payment/robokassa/fail.html create mode 100644 SWSCloudCore/templates/default/payment/success.html diff --git a/SWSCloudCore/templates/default/payment/fail.html b/SWSCloudCore/templates/default/payment/fail.html new file mode 100644 index 0000000..43d60c3 --- /dev/null +++ b/SWSCloudCore/templates/default/payment/fail.html @@ -0,0 +1,20 @@ + + + +

Что-то пошло не так

+

+Во время оплаты произошла ошибка, попробуйте ещё раз. +В случае повторения ошибки обратитесь в поддержку. +

+ + + + \ No newline at end of file diff --git a/SWSCloudCore/templates/default/payment/robokassa/fail.html b/SWSCloudCore/templates/default/payment/robokassa/fail.html deleted file mode 100644 index 0b09c4b..0000000 --- a/SWSCloudCore/templates/default/payment/robokassa/fail.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -

Что-то пошло не так

-

-Во время оплаты произошла ошибка, попробуйте ещё раз. -В случае повторения ошибки обратитесь в поддержку. -

-

В личный кабинет

- - \ No newline at end of file diff --git a/SWSCloudCore/templates/default/payment/success.html b/SWSCloudCore/templates/default/payment/success.html new file mode 100644 index 0000000..478d5c7 --- /dev/null +++ b/SWSCloudCore/templates/default/payment/success.html @@ -0,0 +1,21 @@ + + + + + Успешное пополнение счёта + + +Спасибо! + +Личный счёт успешно пополнен. + + + \ No newline at end of file diff --git a/SWSCloudCore/views/payments/__init__.py b/SWSCloudCore/views/payments/__init__.py index e515d70..ea8e5e1 100644 --- a/SWSCloudCore/views/payments/__init__.py +++ b/SWSCloudCore/views/payments/__init__.py @@ -9,7 +9,7 @@ from flask import redirect from flask import render_template from flask import request from flask import session -from flask import url_for +from flask import url_for, jsonify from SWSCloudCore import models from SWSCloudCore.controllers.users import ControllerUsers @@ -17,6 +17,16 @@ from SWSCloudCore.controllers.users import ControllerUsers viewPayments = Blueprint('payments', __name__, url_prefix='/payments') +@viewPayments.route('/fail.html') +def fail(): + return render_template('default/payment/fail.html') + + +@viewPayments.route('/success.html') +def success(): + return render_template('default/payment/success.html') + + @viewPayments.route('/robokassa/', methods=['GET', 'POST']) def robokassa(action): controller_robokassa = ControllerPaymentsRobokassa( @@ -51,25 +61,31 @@ def robokassa(action): payment_details["signature"] = md5( "%(login)s:%(amount)s:%(payment_id)s:%(password)s" % payment_details ).hexdigest() - print payment_details + # print payment_details return render_template('default/payment/robokassa/process.html', payment=payment_details) if action == 'result': - transaction_id = request.form['InvId'] - signature = request.form['SignatureValue'] - amount = request.form['OutSum'] + 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) - else: - print "ERR: invalid signature" - return render_template('default/payment/robokassa/result.html') + 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('default/payment/robokassa/result.html') if action == 'success': # check session @@ -80,19 +96,18 @@ def robokassa(action): return redirect(url_for("account.logout")) if request.method == "POST": - print request.form + # print request.form # culture = request.form['Culture'] - transaction_id = request.form['InvId'] + # 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() + # transaction = models.UsersBalanceTransactions.get(models.UsersBalanceTransactions.id == transaction_id) + # transaction.status = 'success' + # transaction.save() - return redirect(url_for('payments.robokassa', action='success')) - # else: - # print "ERR: invalid signature" - return render_template('payment/robokassa/success.html') + return redirect(url_for('payments.success')) + return redirect(url_for('payments.success')) if action == 'fail': # check session @@ -104,7 +119,7 @@ def robokassa(action): return redirect(url_for("account.logout")) if request.method == "POST": - print request.form + # print request.form transaction_id = request.form['InvId'] @@ -113,5 +128,4 @@ def robokassa(action): transaction.status = 'fail' transaction.save() - return redirect(url_for('payments.robokassa', action='fail')) - return render_template('default/payment/robokassa/fail.html') + return redirect(url_for('payments.fail')) diff --git a/setup.py b/setup.py index 0ea7180..9c274d2 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from setuptools import setup setup( name='SWSCloudCore', - version='2.4.5', + version='2.4.6', author='Vyacheslav Anzhiganov', author_email='hello@anzhiganov.com', packages=[