paybox: handle CANCELLED and DENIED situations (#47582)
This commit is contained in:
parent
274c716eec
commit
3ecce46175
|
@ -21,6 +21,7 @@ import datetime
|
|||
import logging
|
||||
import hashlib
|
||||
import hmac
|
||||
import re
|
||||
import requests
|
||||
import uuid
|
||||
|
||||
|
@ -36,12 +37,12 @@ from six.moves.urllib import parse as urllib
|
|||
|
||||
import base64
|
||||
from gettext import gettext as _
|
||||
import string
|
||||
import warnings
|
||||
|
||||
from .common import (PaymentCommon, PaymentResponse, FORM, PAID, ERROR, Form,
|
||||
ORDERID_TRANSACTION_SEPARATOR, ResponseError, force_text,
|
||||
from .common import (PaymentCommon, PaymentResponse, FORM, PAID, CANCELLED,
|
||||
DENIED, ERROR, Form, ResponseError, force_text,
|
||||
force_byte)
|
||||
from . import cb
|
||||
|
||||
__all__ = ['sign', 'Payment']
|
||||
|
||||
|
@ -67,40 +68,54 @@ VARS = {
|
|||
}
|
||||
|
||||
PAYBOX_ERROR_CODES = {
|
||||
'00000': 'Opération réussie.',
|
||||
'00001': 'La connexion au centre d’autorisation a échoué ou une '
|
||||
'erreur interne est survenue. Dans ce cas, il est souhaitable de faire '
|
||||
'une tentative sur le site secondaire : tpeweb1.paybox.com.',
|
||||
'001xx': 'Paiement refusé par le centre d’autorisation [voir '
|
||||
'§12.112.1 Codes réponses du centre d’autorisationCodes réponses du '
|
||||
'centre d’autorisation]. En cas d’autorisation de la transaction par '
|
||||
'le centre d’autorisation de la banque ou de l’établissement financier '
|
||||
'privatif, le code erreur “00100” sera en fait remplacé directement '
|
||||
'par “00000”.',
|
||||
'00003': 'Erreur Paybox. Dans ce cas, il est souhaitable de faire une '
|
||||
'tentative sur le site secondaire FQDN tpeweb1.paybox.com.',
|
||||
'00004': 'Numéro de porteur ou cryptogramme visuel invalide.',
|
||||
'00006': 'Accès refusé ou site/rang/identifiant incorrect.',
|
||||
'00008': 'Date de fin de validité incorrecte.',
|
||||
'00009': 'Erreur de création d’un abonnement.',
|
||||
'00010': 'Devise inconnue.',
|
||||
'00011': 'Montant incorrect.',
|
||||
'00015': 'Paiement déjà effectué.',
|
||||
'00016': 'Abonné déjà existant (inscription nouvel abonné). Valeur '
|
||||
'‘U’ de la variable PBX_RETOUR.',
|
||||
'00021': 'Carte non autorisée.',
|
||||
'00029': 'Carte non conforme. Code erreur renvoyé lors de la '
|
||||
'documentation de la variable « PBX_EMPREINTE ».',
|
||||
'00030': 'Temps d’attente > 15 mn par l’internaute/acheteur au niveau '
|
||||
'de la page de paiements.',
|
||||
'00031': 'Réservé',
|
||||
'00032': 'Réservé',
|
||||
'00033': 'Code pays de l’adresse IP du navigateur de l’acheteur non '
|
||||
'autorisé.',
|
||||
'00040': 'Opération sans authentification 3-DSecure, bloquée par le '
|
||||
'filtre.',
|
||||
'99999': 'Opération en attente de validation par l’émetteur du moyen '
|
||||
'de paiement.',
|
||||
'00000': {'message': 'Paiement réalisé avec succés.', 'result': PAID},
|
||||
'00001': {
|
||||
'message': 'Demande annulée par l\'usager.',
|
||||
'result': CANCELLED,
|
||||
},
|
||||
'001xx': {
|
||||
'message': 'Paiement refusé par le centre d’autorisation [voir '
|
||||
'§12.112.1 Codes réponses du centre d’autorisationCodes réponses du '
|
||||
'centre d’autorisation]. En cas d’autorisation de la transaction par '
|
||||
'le centre d’autorisation de la banque ou de l’établissement financier '
|
||||
'privatif, le code erreur “00100” sera en fait remplacé directement '
|
||||
'par “00000”.'
|
||||
},
|
||||
'00003': {
|
||||
'message': 'Erreur Paybox. Dans ce cas, il est souhaitable de faire une '
|
||||
'tentative sur le site secondaire FQDN tpeweb1.paybox.com.'
|
||||
},
|
||||
'00004': {'message': 'Numéro de porteur ou cryptogramme visuel invalide.'},
|
||||
'00006': {'message': 'Accès refusé ou site/rang/identifiant incorrect.'},
|
||||
'00008': {'message': 'Date de fin de validité incorrecte.'},
|
||||
'00009': {'message': 'Erreur de création d’un abonnement.'},
|
||||
'00010': {'message': 'Devise inconnue.'},
|
||||
'00011': {'message': 'Montant incorrect.'},
|
||||
'00015': {'message': 'Paiement déjà effectué.'},
|
||||
'00016': {
|
||||
'message': 'Abonné déjà existant (inscription nouvel abonné). Valeur '
|
||||
'‘U’ de la variable PBX_RETOUR.'
|
||||
},
|
||||
'00021': {'message': 'Carte non autorisée.', 'result': DENIED},
|
||||
'00029': {
|
||||
'message': 'Carte non conforme. Code erreur renvoyé lors de la documentation de la variable « PBX_EMPREINTE ».'
|
||||
},
|
||||
'00030': {
|
||||
'message': 'Temps d’attente > 15 mn par l’internaute/acheteur au niveau de la page de paiements.'
|
||||
},
|
||||
'00031': {'message': 'Réservé'},
|
||||
'00032': {'message': 'Réservé'},
|
||||
'00033': {
|
||||
'message': 'Code pays de l’adresse IP du navigateur de l’acheteur non autorisé.',
|
||||
'result': DENIED,
|
||||
},
|
||||
'00040': {
|
||||
'message': 'Opération sans authentification 3-DSecure, bloquée par le filtre.',
|
||||
'result': DENIED,
|
||||
},
|
||||
'99999': {
|
||||
'message': 'Opération en attente de validation par l’émetteur du moyen de paiement.'
|
||||
},
|
||||
}
|
||||
|
||||
ALGOS = {
|
||||
|
@ -375,16 +390,16 @@ class Payment(PaymentCommon):
|
|||
data.append('%s=%s' % (key, urllib.quote(value)))
|
||||
data = '&'.join(data)
|
||||
signed = verify(data, sig)
|
||||
if d['erreur'][0] == '00000':
|
||||
result = PAID
|
||||
erreur = d['erreur'][0]
|
||||
if re.match(r'^001[0-9][0-9]$', erreur):
|
||||
cb_error_code = erreur[3:5]
|
||||
message, result = cb.translate_cb_error_code(cb_error_code)
|
||||
elif erreur in PAYBOX_ERROR_CODES:
|
||||
message = PAYBOX_ERROR_CODES[erreur]['message']
|
||||
result = PAYBOX_ERROR_CODES[erreur].get('result', ERROR)
|
||||
else:
|
||||
message = 'Code erreur inconnu %s' % erreur
|
||||
result = ERROR
|
||||
for l in (5, 3):
|
||||
prefix = d['erreur'][0][:l]
|
||||
suffix = 'x' * (5 - l)
|
||||
bank_status = PAYBOX_ERROR_CODES.get(prefix + suffix)
|
||||
if bank_status is not None:
|
||||
break
|
||||
pbx_cmd = d['reference'][0]
|
||||
transaction_date = None
|
||||
if 'date_transaction' in d and 'heure_transaction' in d:
|
||||
|
@ -403,7 +418,7 @@ class Payment(PaymentCommon):
|
|||
signed=signed,
|
||||
bank_data=d,
|
||||
result=result,
|
||||
bank_status=bank_status,
|
||||
bank_status=message,
|
||||
transaction_date=transaction_date)
|
||||
|
||||
def perform(self, amount, bank_data, operation):
|
||||
|
|
Loading…
Reference in New Issue