add a message in ResponseErrors (#25773)

This commit is contained in:
Thomas NOËL 2018-08-22 23:14:53 +02:00
parent cdd3295e39
commit e8f12c5d1f
15 changed files with 38 additions and 10 deletions

View File

@ -120,7 +120,7 @@ class Payment(PaymentCommon):
def response(self, query_string, logger=LOGGER, **kwargs):
form = parse_qs(force_text(query_string))
if not 'transaction_id' in form:
raise ResponseError()
raise ResponseError('missing transaction_id')
transaction_id = form.get('transaction_id',[''])[0]
form[self.BANK_ID] = transaction_id

View File

@ -540,7 +540,7 @@ class Payment(PaymentCommon):
params = urlparse.parse_qs(query_string, True)
params = dict((key.upper(), params[key][0]) for key in params)
if not set(params) >= set(['ORDERID', 'PAYID', 'STATUS', 'NCERROR']):
raise ResponseError()
raise ResponseError('missing ORDERID, PAYID, STATUS or NCERROR')
# uniformize iso-8859-1 encoded values
for key in params:

View File

@ -264,7 +264,7 @@ class Payment(PaymentCommon):
def response(self, query_string, callback=False, **kwargs):
d = urlparse.parse_qs(query_string, True, False)
if not set(d) >= set(['erreur', 'reference']):
raise ResponseError()
raise ResponseError('missing erreur or reference')
signed = False
if 'signature' in d:
sig = d['signature'][0]

View File

@ -160,7 +160,7 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
form = urlparse.parse_qs(query_string)
if not DATA in form:
raise ResponseError()
raise ResponseError('missing %s' % DATA)
params = {'message': form[DATA][0]}
result = self.execute('response', params)
d = dict(zip(RESPONSE_PARAMS, result))

View File

@ -229,7 +229,7 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
form = urlparse.parse_qs(query_string)
if not set(form) >= set(['Data', 'Seal', 'InterfaceVersion']):
raise ResponseError()
raise ResponseError('missing Data, Seal or InterfaceVersion')
self.logger.debug('received query string %r', form)
data = self.decode_data(form['Data'][0])
seal = form['Seal'][0]

View File

@ -177,7 +177,7 @@ class Payment(PaymentCommon):
def response(self, query_string, logger=LOGGER, **kwargs):
form = urlparse.parse_qs(query_string)
if not set(form) >= set([REFERENCE, ETAT, REFSFP]):
raise ResponseError()
raise ResponseError('missing %s, %s or %s' % (REFERENCE, ETAT, REFSFP))
for key, value in form.items():
form[key] = value[0]
logger.debug('received query_string %s' % query_string)

View File

@ -352,7 +352,8 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
fields = urlparse.parse_qs(query_string, True)
if not set(fields) >= set([SIGNATURE, VADS_CTX_MODE, VADS_AUTH_RESULT]):
raise ResponseError()
raise ResponseError('missing %s, %s or %s' % (SIGNATURE, VADS_CTX_MODE,
VADS_AUTH_RESULT))
for key, value in fields.items():
fields[key] = value[0]
copy = fields.copy()

View File

@ -145,12 +145,12 @@ class Payment(PaymentCommon):
def response(self, query_string, **kwargs):
fields = parse_qs(query_string, True)
if not set(fields) >= set(['refdet', 'resultrans']):
raise ResponseError()
raise ResponseError('missing refdet or resultrans')
for key, value in fields.items():
fields[key] = value[0]
refdet = fields.get('refdet')
if refdet is None:
raise ValueError('refdet is missing')
raise ResponseError('refdet is missing')
if 'objet' in fields:
iso_now = fields['objet']
else:

View File

@ -1,4 +1,5 @@
import eopayment
import pytest
def test_dummy():
options = {
@ -17,3 +18,7 @@ def test_dummy():
assert r.signed
assert r.transaction_id == '6Tfw2e1bPyYnz7CedZqvdHt7T9XX6T'
assert r.return_content == 'signature ok'
data = {'foo': 'bar'}
with pytest.raises(eopayment.ResponseError, match='missing transaction_id'):
p.response('foo=bar')

View File

@ -76,7 +76,7 @@ class OgoneTests(TestCase):
ogone_backend = eopayment.Payment('ogone', BACKEND_PARAMS)
order_id = 'myorder'
data = {'payid': '32100123', 'status': 9, 'ncerror': 0}
with self.assertRaises(ResponseError):
with self.assertRaisesRegexp(ResponseError, 'missing ORDERID, PAYID, STATUS or NCERROR'):
response = ogone_backend.response(urllib.urlencode(data))
def test_bank_transfer_response(self):

View File

@ -92,6 +92,9 @@ class PayboxTests(TestCase):
response = backend.response(urllib.urlencode(data))
self.assertEqual(response.order_id, order_id)
with self.assertRaisesRegexp(eopayment.ResponseError, 'missing erreur or reference'):
backend.response('foo=bar')
def test_rsa_signature_validation(self):
pkey = '''-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUgYufHuheMztK1LhQSG6xsOzb

View File

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
import eopayment
import pytest
def test_build_request():
backend = eopayment.Payment('sips2', {})
@ -31,3 +33,6 @@ def test_parse_response():
qs = '''Data=captureDay%3D0%7CcaptureMode%3DAUTHOR_CAPTURE%7CcurrencyCode%3D978%7CmerchantId%3D002001000000001%7CorderChannel%3DINTERNET%7CresponseCode%3D00%7CtransactionDateTime%3D2016-02-01T17%3A44%3A20%2B01%3A00%7CtransactionReference%3D668930%7CkeyVersion%3D1%7CacquirerResponseCode%3D00%7Camount%3D1200%7CauthorisationId%3D12345%7CcardCSCResultCode%3D4E%7CpanExpiryDate%3D201605%7CpaymentMeanBrand%3DMASTERCARD%7CpaymentMeanType%3DCARD%7CcustomerIpAddress%3D82.244.203.243%7CmaskedPan%3D5100%23%23%23%23%23%23%23%23%23%23%23%2300%7CorderId%3Dd4903de7027f4d56ac01634fd7ab9526%7CholderAuthentRelegation%3DN%7CholderAuthentStatus%3D3D_ERROR%7CtransactionOrigin%3DINTERNET%7CpaymentPattern%3DONE_SHOT&Seal=6ca3247765a19b45d25ad54ef4076483e7d55583166bd5ac9c64357aac097602&InterfaceVersion=HP_2.0&Encode='''
backend = eopayment.Payment('sips2', {})
assert backend.response(qs)
with pytest.raises(eopayment.ResponseError, match='missing Data, Seal or InterfaceVersion'):
backend.response('foo=bar')

View File

@ -1,5 +1,6 @@
from unittest import TestCase
import eopayment.spplus as spplus
from eopayment import ResponseError
class SPPlustTest(TestCase):
ntkey = b'58 6d fc 9c 34 91 9b 86 3f ' \
@ -14,3 +15,6 @@ class SPPlustTest(TestCase):
for query, result in self.tests:
self.assertEqual(spplus.sign_ntkey_query(self.ntkey, query).lower(), result)
with self.assertRaisesRegexp(ResponseError, 'missing reference, etat or refsfp'):
payment.response('foo=bar')

View File

@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
import pytest
from six.moves.urllib import parse as urlparse
from eopayment.systempayv2 import Payment, VADS_CUST_FIRST_NAME, \
VADS_CUST_LAST_NAME, PAID
from eopayment import ResponseError
PARAMS = {
'secret_test': u'1122334455667788',
@ -43,3 +45,7 @@ def test_systempayv2():
'&signature=62a4fb6738ebadebf9cc720164bc70e47282d36e'
response = p.response(response_qs)
assert response.result == PAID
# bad response
with pytest.raises(ResponseError, match='missing signature, vads_ctx_mode or vads_auth_result'):
p.response('foo=bar')

View File

@ -1,6 +1,7 @@
from decimal import Decimal
from six.moves.urllib.parse import urlparse, parse_qs
import eopayment
import pytest
def test_tipi():
p = eopayment.Payment('tipi', {'numcli': '12345'})
@ -23,3 +24,6 @@ def test_tipi():
response = p.response('objet=tout+a+fait&montant=12312&saisie=T&mel=info%40entrouvert.com&numcli=12345&exer=9999&refdet=999900000000999999&resultrans=P')
assert response.signed # ...
assert response.result == eopayment.PAID
with pytest.raises(eopayment.ResponseError, match='missing refdet or resultrans'):
p.response('foo=bar')