Exemple #1
0
 def get_signature(self):
     return sig(
         self.pos_id,
         self.session_id,
         self.order_id,
         self.status,
         self.amount,
         self.desc,
         self.ts,
         conf.KEY2,
         )
Exemple #2
0
 def get_signature(self):
     return sig(
         self.pos_id,
         self.session_id,
         self.order_id,
         self.status,
         self.amount,
         self.desc,
         self.ts,
         conf.KEY2,
     )
Exemple #3
0
def notification_handler(request):
    if request.method <> 'POST':
        return HttpResponseForbidden()

    # FIXME: do something sensible
    assert int(request.POST['pos_id']) == int(conf.POS_ID)
    assert request.POST['sig'] == sig(conf.POS_ID, request.POST['session_id'],
                                      request.POST['ts'], conf.KEY2)

    new_payment, old_payment = \
                 models.Payment.objects.reload(request.POST['session_id'])

    signals.payment_status_notification.send(new_payment, previous=old_payment)

    return HttpResponse('OK')
Exemple #4
0
    def rpc(self, session_id, method):
        ts = gen_ts()
        data = {
            'pos_id': str(conf.POS_ID),
            'session_id': session_id,
            'ts': ts,
        }
        data['sig'] = sig(
            data['pos_id'],
            data['session_id'],
            data['ts'],
            conf.KEY1,
        )

        return urllib2.urlopen('%sPayment/%s/xml' % (conf.ENDPOINT, method),
                               urllib.urlencode(data)).read()
Exemple #5
0
    def _confirm_or_cancel(self, method, reload):
        assert self.status == constants.STATUS_PENDING

        et = ET.fromstring(self.rpc('confirm'))
        assert et[0].text == 'OK'  # FIXME: handle errors

        assert int(et[1].find('pos_id').text) == int(self.pos_id)
        assert et[1].find('session_id').text == self.session_id
        assert sig(
            self.pos_id,
            self.session_id,
            et[1].find('ts').text,
            conf.KEY2,
        ) == et[1].find('sig').text

        if reload:
            return self.reload()
Exemple #6
0
    def rpc(self, session_id, method):
        ts = gen_ts()
        data = {
            'pos_id': str(conf.POS_ID),
            'session_id': session_id,
            'ts': ts,
            }
        data['sig'] = sig(
            data['pos_id'],
            data['session_id'],
            data['ts'],
            conf.KEY1,
            )

        return urllib2.urlopen(
            '%sPayment/%s/xml' % (conf.ENDPOINT, method),
            urllib.urlencode(data)).read()
Exemple #7
0
    def _confirm_or_cancel(self, method, reload):
        assert self.status == constants.STATUS_PENDING

        et = ET.fromstring(self.rpc('confirm'))
        assert et[0].text == 'OK'       # FIXME: handle errors

        assert int(et[1].find('pos_id').text) == int(self.pos_id)
        assert et[1].find('session_id').text == self.session_id
        assert sig(
            self.pos_id,
            self.session_id,
            et[1].find('ts').text,
            conf.KEY2,
            ) == et[1].find('sig').text

        if reload:
            return self.reload()
Exemple #8
0
def notification_handler(request):
    if request.method <> 'POST':
        return HttpResponseForbidden()

    # FIXME: do something sensible
    assert int(request.POST['pos_id']) == int(conf.POS_ID)
    assert request.POST['sig'] == sig(
        conf.POS_ID,
        request.POST['session_id'],
        request.POST['ts'],
        conf.KEY2)

    new_payment, old_payment = \
                 models.Payment.objects.reload(request.POST['session_id'])

    signals.payment_status_notification.send(new_payment, previous=old_payment)

    return HttpResponse('OK')
Exemple #9
0
    def __init__(self, kwargs={}, request=None, **initial):

        # calculate integer gr from decimal pln
        if 'amount' in initial and isinstance(initial['amount'], Decimal):
            initial['amount'] = int(initial['amount']*100)

        if 'initial' in kwargs:
            kwargs['initial'].update(initial)
        else:
            kwargs['initial'] = initial

        super(PlatnosciPlForm, self).__init__(**kwargs)

        # figure out client ip if request is supplied
        if request is not None \
               and 'client_ip' not in self.initial \
               and 'REMOTE_ADDR' in request.META:
            self.initial['client_ip'] = request.META['REMOTE_ADDR']

        # use random session id if not supplied
        if uuid is not None and 'session_id' not in self.initial:
            self.initial['session_id'] = int(uuid.uuid4())

        # format session id as 16 dash-delimited digits if received as
        # number or generated
        if isinstance(self.initial['session_id'], (int, long)):
            _sid = str(self.initial['session_id'])
            self.initial['session_id'] = '%s-%s-%s-%s' % (
                _sid[0:4], _sid[4:8], _sid[8:12], _sid[12:16], )

        def _parm(name):
            return self.initial.get(name, '')

        self.initial['ts'] = gen_ts()

        self.initial['sig'] = sig(
            conf.POS_ID,
            _parm('pay_type'),
            _parm('session_id'),
            conf.POS_AUTH_KEY,
            _parm('amount'),
            _parm('desc'),
            _parm('desc2'),
            _parm('trsDesc'),
            _parm('order_id'),
            _parm('first_name'),
            _parm('last_name'),
            _parm('payback_login'),
            _parm('street'),
            _parm('street_hn'),
            _parm('street_an'),
            _parm('city'),
            _parm('post_code'),
            _parm('country'),
            _parm('email'),
            _parm('phone'),
            _parm('language'),
            _parm('client_ip'),
            _parm('ts'),
            conf.KEY1,
            )

        missing = []
        for name, field in self.fields.items():
            if field.required and not field.initial \
                   and name not in self.initial:
                missing.append(name)
        if missing:
            raise ValueError(
                _("Following fields are required: %s.") % ', '.join(missing))