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, )
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')
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()
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()
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()
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')
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))