Example #1
0
def onpay_pay(request):
    if get_constant("debug"):
        mail_admins(subject=u"Pay query", message=unicode(dict(request.POST)))
    form = onpay.forms.OnpayPayForm(request.POST)
    if not form.is_valid():
        return HttpResponse(answerpay_dict(request.POST, 12,
            u'Error in parameters data: %s' % form.errors))

    try:
        onpay.models.data_get_created_operation(form.cleaned_data['pay_for'])
    except onpay.models.Operation.DoesNotExist:
        return HttpResponse(answerpay_dict(request.POST, 10,
        'Cannot find any pay rows acording to this parameters: wrong payment'))

    if not form.check_md5():
        return HttpResponse(answerpay_dict(request.POST, 8,
            'Md5 signature is wrong.'))
    else:
        rezult_balance = onpay.models.data_update_user_balance(
            form.cleaned_data['pay_for'], form.cleaned_data['order_amount']
            ) if get_constant('use_balance_table', True) else True
        # устанавливаем статус операции как оплаченную
        rezult_operation = onpay.models.Operation.objects.filter(
                id=form.cleaned_data['pay_for']).update(status=1, sum=form.cleaned_data['order_amount'])
        # если оба запроса прошли успешно выдаем ответ об удаче,
        # если нет, то о том что операция не произошла
        if rezult_operation and rezult_balance:
            return HttpResponse(answerpay_dict(request.POST, 0, 'OK'))
        else:
            print rezult_operation, rezult_balance
            return HttpResponse(answerpay_dict(request.POST, 9,
                'Error in mechant database queries: operation or balance '
                'tables error'))
Example #2
0
class Operation(models.Model):
    sum = models.DecimalField(verbose_name=u"сумма",
                              max_digits=8,
                              decimal_places=2)
    user = models.ForeignKey(
        User,
        verbose_name=u"пользователь",
    )
    status = models.BooleanField(verbose_name=u"оплачено",
                                 default=get_constant('new_operation_status'))
    type = models.CharField(max_length=64,
                            verbose_name=u"тип",
                            default=u"внешняя")
    comment = models.CharField(max_length=255,
                               verbose_name=u"комментарий",
                               default=u"Пополнение счета")
    description = models.CharField(max_length=255,
                                   verbose_name=u"описание",
                                   default=u"через систему Onpay")
    date = models.DateTimeField(verbose_name=u"дата", auto_now_add=True)

    class Meta:
        verbose_name = u"операция"
        verbose_name_plural = u"операции"

    def __unicode__(self):
        return u"id %d, sum %s, st %s" % (self.id, self.sum, self.status)
Example #3
0
 def check_md5(self):
     u"Check hash strings"
     array = (self.cleaned_data['type'], self.cleaned_data['pay_for'],
         self.cleaned_data['onpay_id'], self.cleaned_data['order_amount'],
         self.cleaned_data['order_currency'], get_constant('private_code'))
     md5fb = md5(";".join(str(o_0) for o_0 in array)).hexdigest().upper()
     return self.cleaned_data["md5"] == md5fb
Example #4
0
 def __init__(self):
     self.pay_mode = get_constant("pay_mode", "fix")
     self.currency = get_constant("currency", "RUR")
     self.convert  = get_constant("convert", "yes")
     self.url_success = get_constant("url_success")
     self.private_code = get_constant("private_code")
     self.onpay_login = get_constant("onpay_login")
     self.set_f(get_constant("f"))
Example #5
0
def onpay_pay(request):
    if get_constant("debug"):
        mail_admins(subject=u"Pay query", message=unicode(dict(request.POST)))
    form = onpay.forms.OnpayPayForm(request.POST)
    if not form.is_valid():
        return HttpResponse(
            answerpay_dict(request.POST, 12,
                           u'Error in parameters data: %s' % form.errors))

    try:
        onpay.models.data_get_created_operation(form.cleaned_data['pay_for'])
    except onpay.models.Operation.DoesNotExist:
        return HttpResponse(
            answerpay_dict(
                request.POST, 10,
                'Cannot find any pay rows acording to this parameters: wrong payment'
            ))

    if not form.check_md5():
        return HttpResponse(
            answerpay_dict(request.POST, 8, 'Md5 signature is wrong.'))
    else:
        rezult_balance = onpay.models.data_update_user_balance(
            form.cleaned_data['pay_for'],
            form.cleaned_data['order_amount']) if get_constant(
                'use_balance_table', True) else True
        # устанавливаем статус операции как оплаченную
        rezult_operation = onpay.models.Operation.objects.filter(
            id=form.cleaned_data['pay_for']).update(
                status=1, sum=form.cleaned_data['order_amount'])
        # если оба запроса прошли успешно выдаем ответ об удаче,
        # если нет, то о том что операция не произошла
        if rezult_operation and rezult_balance:
            return HttpResponse(answerpay_dict(request.POST, 0, 'OK'))
        else:
            print rezult_operation, rezult_balance
            return HttpResponse(
                answerpay_dict(
                    request.POST, 9,
                    'Error in mechant database queries: operation or balance '
                    'tables error'))
Example #6
0
def answer(type, code, pay_for, order_amount, order_currency, text):
    "функция выдает ответ для сервиса onpay в формате XML на чек запрос"
    array_for_md5 = (type, pay_for, order_amount, order_currency, str(code),
                     get_constant('private_code'))
    result_md5 = md5(";".join(array_for_md5)).hexdigest().upper()

    root = etree.Element("result")
    etree.SubElement(root, "code").text = str(code)
    etree.SubElement(root, "pay_for").text = pay_for
    etree.SubElement(root, "comment").text = text
    etree.SubElement(root, "md5").text = result_md5
    return etree.tostring(root, pretty_print=True,
                            xml_declaration=True, encoding='UTF-8')
Example #7
0
#coding: utf-8
from django.dispatch import Signal
from django.core.mail import mail_admins, mail_managers

from onpay.conf import get_constant

refilled_balance = Signal(providing_args=["user", "sum"])

def update_balance(sender, **kw):
    "Пример пополнения баланса"
    kw['user'].footman_profile.money += kw['sum']
    kw['user'].footman_profile.save()

def email_notification(sender, **kw):
    mail_managers(
        subject=u"Money from %s" % kw['user'].username,
        message=u"Balance refilled for %s RUR" % kw['sum'],
    )

if get_constant("enable_footman_update_balance"):
    refilled_balance.connect(update_balance)

if get_constant("enable_email_notify"):
    refilled_balance.connect(email_notification)
Example #8
0
def data_get_created_operation(id):
    "функция выборки неоплаченной операции по ID"
    return Operation.objects.get(id=id,
                                 status=get_constant('new_operation_status'))
Example #9
0
#coding: utf-8
from django.dispatch import Signal
from django.core.mail import mail_admins, mail_managers

from onpay.conf import get_constant

refilled_balance = Signal(providing_args=["user", "sum"])


def update_balance(sender, **kw):
    "Пример пополнения баланса"
    kw['user'].footman_profile.money += kw['sum']
    kw['user'].footman_profile.save()


def email_notification(sender, **kw):
    mail_managers(
        subject=u"Money from %s" % kw['user'].username,
        message=u"Balance refilled for %s RUR" % kw['sum'],
    )


if get_constant("enable_footman_update_balance"):
    refilled_balance.connect(update_balance)

if get_constant("enable_email_notify"):
    refilled_balance.connect(email_notification)
Example #10
0
def data_get_created_operation(id):
    "функция выборки неоплаченной операции по ID"
    return Operation.objects.get(id=id, status=get_constant('new_operation_status'))