55: Method not allowed

This commit is contained in:
Vyacheslav Anzhiganov 2016-05-28 02:24:21 +03:00
parent d02814bf43
commit f4d40edf40
5 changed files with 84 additions and 40 deletions

View file

@ -0,0 +1,20 @@
<html>
<head></head>
<body>
<h1>Что-то пошло не так</h1>
<p>
Во время оплаты произошла ошибка, попробуйте ещё раз.
В случае повторения ошибки обратитесь в <a href="mailto:support@procdn.ru">поддержку</a>.
</p>
<ul>
<li><a href="{{ url_for('account.billing') }}">Биллинг</a></li>
{% if g.settings.get('SERVICE_CONTAINERS_ENABLE', "0") == "1" %}
<li><a href="{{ url_for('containers.index') }}">Контейнеры</a></li>
{% endif %}
{% if g.settings.get('SERVICE_VMS_ENABLE', '0') == '1' %}
<li><a href="{{ url_for('vms.index') }}">Виртуальные машины</a></li>
{% endif %}
</ul>
</body>
</html>

View file

@ -1,11 +0,0 @@
<html>
<head></head>
<body>
<h1>Что-то пошло не так</h1>
<p>
Во время оплаты произошла ошибка, попробуйте ещё раз.
В случае повторения ошибки обратитесь в <a href="mailto:support@procdn.ru">поддержку</a>.
</p>
<p><a href="{{ url_for("account.billing") }}">В личный кабинет</a></p>
</body>
</html>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Успешное пополнение счёта</title>
</head>
<body>
Спасибо!
Личный счёт успешно пополнен.
<ul>
<li><a href="{{ url_for('account.billing') }}">Биллинг</a></li>
{% if g.settings.get('SERVICE_CONTAINERS_ENABLE', "0") == "1" %}
<li><a href="{{ url_for('containers.index') }}">Контейнеры</a></li>
{% endif %}
{% if g.settings.get('SERVICE_VMS_ENABLE', '0') == '1' %}
<li><a href="{{ url_for('vms.index') }}">Виртуальные машины</a></li>
{% endif %}
</ul>
</body>
</html>

View file

@ -9,7 +9,7 @@ from flask import redirect
from flask import render_template from flask import render_template
from flask import request from flask import request
from flask import session from flask import session
from flask import url_for from flask import url_for, jsonify
from SWSCloudCore import models from SWSCloudCore import models
from SWSCloudCore.controllers.users import ControllerUsers from SWSCloudCore.controllers.users import ControllerUsers
@ -17,6 +17,16 @@ from SWSCloudCore.controllers.users import ControllerUsers
viewPayments = Blueprint('payments', __name__, url_prefix='/payments') 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/<action>', methods=['GET', 'POST']) @viewPayments.route('/robokassa/<action>', methods=['GET', 'POST'])
def robokassa(action): def robokassa(action):
controller_robokassa = ControllerPaymentsRobokassa( controller_robokassa = ControllerPaymentsRobokassa(
@ -51,25 +61,31 @@ def robokassa(action):
payment_details["signature"] = md5( payment_details["signature"] = md5(
"%(login)s:%(amount)s:%(payment_id)s:%(password)s" % payment_details "%(login)s:%(amount)s:%(payment_id)s:%(password)s" % payment_details
).hexdigest() ).hexdigest()
print payment_details # print payment_details
return render_template('default/payment/robokassa/process.html', payment=payment_details) return render_template('default/payment/robokassa/process.html', payment=payment_details)
if action == 'result': if action == 'result':
transaction_id = request.form['InvId'] if request.method == 'POST':
signature = request.form['SignatureValue'] transaction_id = request.form['InvId']
amount = request.form['OutSum'] signature = request.form['SignatureValue']
amount = request.form['OutSum']
transaction_hash = md5("%s:%s:%s" % (amount, transaction_id, controller_robokassa.args['PAY_ROBOKASSA_PASSWORD2'])).hexdigest() transaction_hash = md5("%s:%s:%s" % (amount, transaction_id, controller_robokassa.args['PAY_ROBOKASSA_PASSWORD2'])).hexdigest()
# print transaction_hash # print transaction_hash
# print signature.lower() # print signature.lower()
if signature.lower() == transaction_hash.lower(): if signature.lower() == transaction_hash.lower():
# update transaction signature # update transaction signature
controller_robokassa.transaction_set_notified(transaction_id, 1) controller_robokassa.transaction_set_notified(transaction_id, 1)
# update user balance # update user balance
controller_robokassa.balance_update(transaction_id, amount) controller_robokassa.balance_update(transaction_id, amount)
else:
print "ERR: invalid signature" # update transaction signature
return render_template('default/payment/robokassa/result.html') 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': if action == 'success':
# check session # check session
@ -80,19 +96,18 @@ def robokassa(action):
return redirect(url_for("account.logout")) return redirect(url_for("account.logout"))
if request.method == "POST": if request.method == "POST":
print request.form # print request.form
# culture = request.form['Culture'] # culture = request.form['Culture']
transaction_id = request.form['InvId'] # transaction_id = request.form.get('InvId')
# TODO: если эта часть делается на шаге `results`, то можно убрать его
# update transaction signature # update transaction signature
transaction = models.UsersBalanceTransactions.get(models.UsersBalanceTransactions.id == transaction_id) # transaction = models.UsersBalanceTransactions.get(models.UsersBalanceTransactions.id == transaction_id)
transaction.status = 'success' # transaction.status = 'success'
transaction.save() # transaction.save()
return redirect(url_for('payments.robokassa', action='success')) return redirect(url_for('payments.success'))
# else: return redirect(url_for('payments.success'))
# print "ERR: invalid signature"
return render_template('payment/robokassa/success.html')
if action == 'fail': if action == 'fail':
# check session # check session
@ -104,7 +119,7 @@ def robokassa(action):
return redirect(url_for("account.logout")) return redirect(url_for("account.logout"))
if request.method == "POST": if request.method == "POST":
print request.form # print request.form
transaction_id = request.form['InvId'] transaction_id = request.form['InvId']
@ -113,5 +128,4 @@ def robokassa(action):
transaction.status = 'fail' transaction.status = 'fail'
transaction.save() transaction.save()
return redirect(url_for('payments.robokassa', action='fail')) return redirect(url_for('payments.fail'))
return render_template('default/payment/robokassa/fail.html')

View file

@ -4,7 +4,7 @@ from setuptools import setup
setup( setup(
name='SWSCloudCore', name='SWSCloudCore',
version='2.4.5', version='2.4.6',
author='Vyacheslav Anzhiganov', author='Vyacheslav Anzhiganov',
author_email='hello@anzhiganov.com', author_email='hello@anzhiganov.com',
packages=[ packages=[