0001-expose-transaction-capabilities-32969.patch
eopayment/__init__.py | ||
---|---|---|
192 | 192 |
- bank_data -- the transaction dictionary received from the bank |
193 | 193 |
''' |
194 | 194 |
return self.backend.validate(amount, bank_data, **kwargs) |
195 | ||
196 |
def get_parameters(self, scope='global'): |
|
197 |
res = [] |
|
198 |
for param in self.backend.description.get('parameters', []): |
|
199 |
if param.get('scope', 'global') != scope: |
|
200 |
continue |
|
201 |
res.append(param) |
|
202 |
return res |
eopayment/paybox.py | ||
---|---|---|
247 | 247 |
'required': False, |
248 | 248 |
'choices': PAYMENT_MODES.keys() |
249 | 249 |
}, |
250 |
{ |
|
251 |
'name': 'manual_validation', |
|
252 |
'caption': 'Validation manuelle', |
|
253 |
'type': bool, |
|
254 |
'default': False, |
|
255 |
'scope': 'transaction' |
|
256 |
} |
|
250 | 257 |
] |
251 | 258 |
} |
252 | 259 | |
253 |
def request(self, amount, email, name=None, orderid=None, **kwargs): |
|
260 |
def request(self, amount, email, name=None, orderid=None, manual_validation=None, **kwargs):
|
|
254 | 261 |
d = OrderedDict() |
255 | 262 |
d['PBX_SITE'] = force_text(self.site) |
256 | 263 |
d['PBX_RANG'] = force_text(self.rang).strip()[-2:] |
... | ... | |
283 | 290 |
if capture_day: |
284 | 291 |
d['PBX_DIFF'] = capture_day.zfill(2) |
285 | 292 |
d['PBX_AUTOSEULE'] = PAYMENT_MODES[self.capture_mode] |
293 |
if manual_validation: |
|
294 |
d['PBX_AUTOSEULE'] = PAYMENT_MODES['AUTHOR_CAPTURE'] |
|
286 | 295 |
if automatic_return_url: |
287 | 296 |
d['PBX_REPONDRE_A'] = force_text(automatic_return_url) |
288 | 297 |
d = d.items() |
eopayment/systempayv2.py | ||
---|---|---|
246 | 246 |
{'name': 'secret_production', |
247 | 247 |
'caption': _(u'Secret pour la configuration de PRODUCTION'), |
248 | 248 |
'validation': lambda value: str.isdigit(value), }, |
249 |
{ |
|
250 |
'name': 'manual_validation', |
|
251 |
'caption': 'Validation manuelle', |
|
252 |
'type': bool, |
|
253 |
'default': False, |
|
254 |
'scope': 'transaction' |
|
255 |
} |
|
249 | 256 |
] |
250 | 257 |
} |
251 | 258 | |
... | ... | |
267 | 274 |
options = add_vads(options) |
268 | 275 |
self.options = options |
269 | 276 | |
277 | ||
270 | 278 |
def request(self, amount, name=None, first_name=None, last_name=None, |
271 | 279 |
address=None, email=None, phone=None, orderid=None, info1=None, |
272 |
info2=None, info3=None, next_url=None, **kwargs): |
|
280 |
info2=None, info3=None, next_url=None, manual_validation=None, **kwargs):
|
|
273 | 281 |
''' |
274 | 282 |
Create the URL string to send a request to SystemPay |
275 | 283 |
''' |
... | ... | |
338 | 346 |
capture_day = fields.pop('capture_day') |
339 | 347 |
if capture_day: |
340 | 348 |
fields['vads_capture_delay'] = capture_day |
349 |
if manual_validation: |
|
350 |
fields['vads_validation_mode'] = '1' |
|
341 | 351 |
check_vads(fields) |
342 | 352 |
fields[SIGNATURE] = force_text(self.signature(fields)) |
343 | 353 |
self.logger.debug('%s request contains fields: %s', __name__, fields) |
tests/test_base_payment.py | ||
---|---|---|
14 | 14 |
'parameters': [ |
15 | 15 |
{ |
16 | 16 |
'name': 'capture_day', |
17 |
} |
|
17 |
}, |
|
18 |
{ |
|
19 |
'name': 'manual_validation', |
|
20 |
'caption': 'Validation manuelle', |
|
21 |
'type': bool, |
|
22 |
'default': False, |
|
23 |
'scope': 'transaction' |
|
24 |
}, |
|
25 |
{ |
|
26 |
'name': 'global_param', |
|
27 |
'caption': 'Global Param', |
|
28 |
'type': bool, |
|
29 |
'default': False, |
|
30 |
'scope': 'global' |
|
31 |
}, |
|
32 | ||
18 | 33 |
] |
19 | 34 |
} |
20 | 35 | |
... | ... | |
64 | 79 |
# converted to Europe/Paris it is already 2018-10-03 |
65 | 80 |
# so 2018-10-03 for capture_date is invalid |
66 | 81 |
payment.request(amount=12.2, capture_date=capture_date) |
82 | ||
83 | ||
84 |
def test_get_parameters(monkeypatch): |
|
85 |
_, payment = do_mock_backend(monkeypatch) |
|
86 | ||
87 |
global_parameters = payment.get_parameters() |
|
88 |
assert len(global_parameters) == 2 |
|
89 |
assert global_parameters[0]['name'] == 'capture_day' |
|
90 |
assert global_parameters[1]['name'] == 'global_param' |
|
91 | ||
92 |
transaction_parameters = payment.get_parameters(scope='transaction') |
|
93 |
assert len(transaction_parameters) == 1 |
|
94 |
assert transaction_parameters[0]['name'] == 'manual_validation' |
tests/test_paybox.py | ||
---|---|---|
253 | 253 |
z0Dkz0NjxvU+5WzQZh9Uuxr/egRCwV4NMRWqu0zaVVioeBvl4/5CWm4f4/1L9+0m |
254 | 254 |
FBFKOZhgBJnkC+l6+XhT4aYWKaQ4ocmOMV92yjeXTE4=''' |
255 | 255 |
self.assertTrue(paybox.verify(data, base64.b64decode(sig64), key=pkey)) |
256 | ||
257 |
def test_request_manual_validation(self): |
|
258 |
params = BACKEND_PARAMS.copy() |
|
259 |
time = '2018-08-21T10:26:32+02:00' |
|
260 |
email = 'user@entrouvert.com' |
|
261 |
order_id = '20180821' |
|
262 |
transaction = '1234' |
|
263 |
amount = '42.99' |
|
264 | ||
265 |
backend = eopayment.Payment('paybox', params) |
|
266 | ||
267 |
transaction_id, kind, what = backend.request( |
|
268 |
Decimal(amount), email=email, orderid=order_id, |
|
269 |
transaction_id=transaction, time=time) |
|
270 |
root = ET.fromstring(str(what)) |
|
271 |
form_params = dict(( |
|
272 |
(node.attrib['name'], node.attrib['value']) for node in root |
|
273 |
if node.attrib['type'] == 'hidden')) |
|
274 |
self.assertIn('PBX_AUTOSEULE', form_params) |
|
275 |
self.assertEqual(form_params['PBX_AUTOSEULE'], 'N') |
|
276 | ||
277 |
transaction_id, kind, what = backend.request( |
|
278 |
Decimal(amount), email=email, orderid=order_id, |
|
279 |
transaction_id=transaction, time=time, manual_validation=True) |
|
280 |
root = ET.fromstring(str(what)) |
|
281 |
form_params = dict(( |
|
282 |
(node.attrib['name'], node.attrib['value']) for node in root |
|
283 |
if node.attrib['type'] == 'hidden')) |
|
284 |
self.assertIn('PBX_AUTOSEULE', form_params) |
|
285 |
self.assertEqual(form_params['PBX_AUTOSEULE'], 'O') |
tests/test_systempayv2.py | ||
---|---|---|
98 | 98 |
data['capture_date'] = (datetime.now().date() + timedelta(days=4)) |
99 | 99 |
transaction_id, f, form = p.request(**data) |
100 | 100 |
assert get_field(form, 'vads_capture_delay')['value'] == '4' |
101 | ||
102 | ||
103 |
def test_manual_validation(): |
|
104 |
params = { |
|
105 |
'secret_test': u'1122334455667788', |
|
106 |
'vads_site_id': u'12345678', |
|
107 |
'vads_ctx_mode': u'TEST', |
|
108 |
} |
|
109 |
data = { |
|
110 |
'amount': 15.24, 'orderid': '654321', 'first_name': u'John', |
|
111 |
'last_name': u'Doe' |
|
112 |
} |
|
113 | ||
114 |
backend = eopayment.Payment('systempayv2', params) |
|
115 |
transaction_id, f, form = backend.request(**data.copy()) |
|
116 |
assert get_field(form, 'vads_validation_mode')['value'] == '' |
|
117 | ||
118 |
data['manual_validation'] = True |
|
119 |
transaction_id, f, form = backend.request(**data.copy()) |
|
120 |
assert get_field(form, 'vads_validation_mode')['value'] == '1' |
|
101 |
- |