Skip to content
Browse files

Merge branch 'split_gateway'

  • Loading branch information...
2 parents bef2b23 + f272f15 commit 6f30ce10b1f1e79ed6cbc665eb07adf69745cd38 @Akuryou Akuryou committed Dec 15, 2012
Showing with 274 additions and 68 deletions.
  1. +1 −0 requirements.txt
  2. +1 −0 setup.py
  3. +149 −0 skrill/migrations/0002_auto__add_field_paymentrequest_payment_methods.py
  4. +9 −2 skrill/models.py
  5. +114 −66 skrill/settings.py
View
1 requirements.txt
@@ -3,3 +3,4 @@ django-nose
coverage
django-coverage
factory_boy
+django-multiselectfield
View
1 setup.py
@@ -19,6 +19,7 @@ def read(fname):
packages=find_packages(),
install_requires=[
'django',
+ 'django-multiselectfield',
],
tests_require=[
'django-nose',
View
149 skrill/migrations/0002_auto__add_field_paymentrequest_payment_methods.py
@@ -0,0 +1,149 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'PaymentRequest.payment_methods'
+ db.add_column('skrill_paymentrequest', 'payment_methods',
+ self.gf('multiselectfield.db.fields.MultiSelectField')(max_length=100, null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'PaymentRequest.payment_methods'
+ db.delete_column('skrill_paymentrequest', 'payment_methods')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'skrill.paymentrequest': {
+ 'Meta': {'ordering': "['time']", 'object_name': 'PaymentRequest'},
+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'address2': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '18', 'decimal_places': '2'}),
+ 'amount2': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '18', 'decimal_places': '2', 'blank': 'True'}),
+ 'amount2_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'amount3': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '18', 'decimal_places': '2', 'blank': 'True'}),
+ 'amount3_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'amount4': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '18', 'decimal_places': '2', 'blank': 'True'}),
+ 'amount4_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'cancel_url': ('django.db.models.fields.URLField', [], {'default': "u'http://example.com/skrill/cancel/'", 'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'cancel_url_target': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'confirmation_note': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}),
+ 'currency': ('django.db.models.fields.CharField', [], {'default': "'EUR'", 'max_length': '3'}),
+ 'custom_field_1': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_2': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_3': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_4': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_5': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'detail1_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail1_text': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail2_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail2_text': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail3_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail3_text': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail4_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail4_text': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail5_description': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'detail5_text': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'ext_ref_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'hide_login': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'language': ('django.db.models.fields.CharField', [], {'default': "'EN'", 'max_length': '2'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'logo_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'new_window_redirect': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'pay_from_email': ('django.db.models.fields.EmailField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'pay_to_email': ('django.db.models.fields.EmailField', [], {'default': "'help@bbg-entertainment.com'", 'max_length': '50'}),
+ 'payment_methods': ('multiselectfield.db.fields.MultiSelectField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'phone_number': ('django.db.models.fields.PositiveIntegerField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '9', 'null': 'True', 'blank': 'True'}),
+ 'prepare_only': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'recipient_description': ('django.db.models.fields.CharField', [], {'default': "'myBrainTraining.com'", 'max_length': '30', 'null': 'True', 'blank': 'True'}),
+ 'return_url': ('django.db.models.fields.URLField', [], {'default': "u'http://example.com/skrill/return/'", 'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'return_url_target': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'return_url_text': ('django.db.models.fields.CharField', [], {'default': "'Back to myBrainTraining.com'", 'max_length': '35', 'null': 'True', 'blank': 'True'}),
+ 'rid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'status_url': ('django.db.models.fields.CharField', [], {'default': "u'http://example.com/skrill/status_report/'", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'status_url2': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'submitted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'test': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'blank': 'True'}),
+ 'transaction_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'skrill.statusreport': {
+ 'Meta': {'ordering': "['time']", 'object_name': 'StatusReport'},
+ 'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '18', 'decimal_places': '2'}),
+ 'currency': ('django.db.models.fields.CharField', [], {'max_length': '3'}),
+ 'custom_field_1': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_2': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_3': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_4': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'custom_field_5': ('django.db.models.fields.CharField', [], {'max_length': '240', 'null': 'True', 'blank': 'True'}),
+ 'customer_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'failed_reason_code': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mb_amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '18', 'decimal_places': '2'}),
+ 'mb_currency': ('django.db.models.fields.CharField', [], {'max_length': '3'}),
+ 'mb_transaction_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'md5sig': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'merchant_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'pay_from_email': ('django.db.models.fields.EmailField', [], {'max_length': '50'}),
+ 'pay_to_email': ('django.db.models.fields.EmailField', [], {'default': "'help@bbg-entertainment.com'", 'max_length': '50'}),
+ 'payment_request': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['skrill.PaymentRequest']"}),
+ 'payment_type': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'sha2sig': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
+ 'signal_sent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {}),
+ 'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'valid': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ }
+ }
+
+ complete_apps = ['skrill']
View
11 skrill/models.py
@@ -6,7 +6,8 @@
from django.db import models
import django.dispatch
-from skrill.settings import get_secret_word_as_md5
+from multiselectfield import MultiSelectField
+
from skrill.settings import *
@@ -132,6 +133,10 @@ class PaymentRequest(models.Model):
detail5_text = models.CharField("Detail 5 text", max_length=240, blank=True, null=True,
help_text="The detail5_text is shown next to the detail5_description. The detail5_text is also shown to the client in his history at Skrill (Moneybookers)' website.")
+ # other features
+ payment_methods = MultiSelectField("Payment methods", max_length=100, choices=GATEWAY_PAYMENT_CODES, blank=True, null=True,
+ help_text="If no payment method is selected all will be available")
+
class Meta:
verbose_name = "Payment request"
verbose_name_plural = "Payment requests"
@@ -149,7 +154,9 @@ def _format_boolean(self, value):
def _get_formatted_field_value(self, field):
field_class = self._meta.get_field(field).__class__
field_value = getattr(self, field)
- if field_class == models.BooleanField:
+ if field == "payment_methods":
+ return ",".join(field_value)
+ elif field_class == models.BooleanField:
return self._format_boolean(field_value)
elif field_class == models.DateField:
return field_value.strftime("%d%m%Y")
View
180 skrill/settings.py
@@ -122,6 +122,54 @@ def get_secret_word_as_md5():
('TND', 'Tunisian Dinar'),
)
+GATEWAY_PAYMENT_CODES = (
+ ('', 'Moneybookers Wallet'), # ALL
+ ('ACC', 'All Card Types'), # ALL
+ ('VSA', 'Visa'), # ALL
+ ('MSC', 'MasterCard'), # ALL
+ ('VSD', 'Visa Delta/Debit'), # United Kingdom
+ ('VSE', 'Visa Electron'), # ALL
+ ('MAE', 'Maestro'), # United Kingdom, Spain & Austria
+ ('SLO', 'Solo'), # United Kingdom
+ ('AMX', 'American Express'), # ALL
+ ('DIN', 'Diners'), # ALL
+ ('JCB', 'JCB'), # ALL
+ ('LSR', 'Laser'), # Rep. of Ireland
+ ('GCB', 'Carte Bleue'), # France
+ ('DNK', 'Dankort'), # Denmark
+ ('PSP', 'PostePay'), # Italy
+ ('CSI', 'CartaSi'), # Italy
+ ('OBT', 'Online Bank Transfer'), # Germany, United Kingdom, Denmark, Finland, Sweden, Poland, Estonia, Latvia, Lithuania
+ ('GIR', 'Giropay'), # Germany
+ ('DID', 'Direct Debit / ELV'), # Germany
+ ('SFT', 'Sofortueberweisung'), # Germany, Austria, Belgium, Netherlands, Switzerland & United Kingdom
+ ('ENT', 'eNETS'), # Singapore
+ ('EBT', 'Nordea Solo'), # Sweden
+ ('SO2', 'Nordea Solo'), # Finland
+ ('IDL', 'iDEAL'), # Netherlands
+ ('NPY', 'EPS (Netpay)'), # Austria
+ ('PLI', 'POLi'), # Australia
+ ('PWY', 'All Polish Banks'), # Poland
+ ('PWY5', 'ING Bank Śląski'), # Poland
+ ('PWY6', 'PKO BP (PKO Inteligo)'), # Poland
+ ('PWY7', 'Multibank (Multitransfer)'), # Poland
+ ('PWY14', 'Lukas Bank'), # Poland
+ ('PWY15', 'Bank BPH'), # Poland
+ ('PWY17', 'InvestBank'), # Poland
+ ('PWY18', 'PeKaO S.A.'), # Poland
+ ('PWY19', 'Citibank handlowy'), # Poland
+ ('PWY20', 'Bank Zachodni WBK (Przelew24)'), # Poland
+ ('PWY21', 'BGŻ'), # Poland
+ ('PWY22', 'Millenium'), # Poland
+ ('PWY25', 'mBank (mTransfer)'), # Poland
+ ('PWY26', 'Płacę z Inteligo'), # Poland
+ ('PWY28', 'Bank Ochrony Środowiska'), # Poland
+ ('PWY32', 'Nordea'), # Poland
+ ('PWY33', 'Fortis Bank'), # Poland
+ ('PWY36', 'Deutsche Bank PBC S.A.'), # Poland
+ ('EPY', 'ePay.bg'), # Bulgaria
+)
+
ISO3166_A3 = (
('AFG', 'Afghanistan'),
('ALA', 'Åland Islands'),
@@ -373,71 +421,71 @@ def get_secret_word_as_md5():
)
FAILED_REASON_CODES = (
- ('01', '01 - Referred'),
- ('02', '02 - Invalid Merchant Number'),
- ('03', '03 - Pick-up card'),
- ('04', '04 - Authorisation Declined'),
- ('05', '05 - Other Error'),
- ('06', '06 - CVV is mandatory, but not set or invalid'),
- ('07', '07 - Approved authorisation, honour with identification'),
- ('08', '08 - Delayed Processing'),
- ('09', '09 - Invalid Transaction'),
- ('10', '10 - Invalid Currency'),
- ('11', '11 - Invalid Amount/Available Limit Exceeded/Amount too high'),
- ('12', '12 - Invalid credit card or bank account'),
- ('13', '13 - Invalid Card Issuer'),
- ('14', '14 - Annulation by client'),
- ('15', '15 - Duplicate transaction'),
- ('16', '16 - Acquirer Error'),
- ('17', '17 - Reversal not processed, matching authorisation not found'),
- ('18', '18 - File Transfer not available/unsuccessful'),
- ('19', '19 - Reference number error'),
- ('20', '20 - Access Denied'),
- ('21', '21 - File Transfer failed'),
- ('22', '22 - Format Error'),
- ('23', '23 - Unknown Acquirer'),
- ('24', '24 - Card expired'),
- ('25', '25 - Fraud Suspicion'),
- ('26', '26 - Security code expired'),
- ('27', '27 - Requested function not available'),
- ('28', '28 - Lost/Stolen card'),
- ('29', '29 - Stolen card, Pick up'),
- ('30', '30 - Duplicate Authorisation'),
- ('31', '31 - Limit Exceeded'),
- ('32', '32 - Invalid Security Code'),
- ('33', '33 - Unknown or Invalid Card/Bank account'),
- ('34', '34 - Illegal Transaction'),
- ('35', '35 - Transaction Not Permitted'),
- ('36', '36 - Card blocked in local blacklist'),
- ('37', '37 - Restricted card/bank account'),
- ('38', '38 - Security Rules Violation'),
- ('39', '39 - The transaction amount of the referencing transaction is higher than the transaction amount of the original transaction'),
- ('40', '40 - Transaction frequency limit exceeded, override is possible'),
- ('41', '41 - Incorrect usage count in the Authorisation System exceeded'),
- ('42', '42 - Card blocked'),
- ('43', '43 - Rejected by Credit Card Issuer'),
- ('44', '44 - Card Issuing Bank or Network is not available'),
- ('45', '45 - The card type is not processed by the authorisation centre / Authorisation System has determined incorrect Routing'),
- ('47', '47 - Processing temporarily not possible'),
- ('48', '48 - Security Breach'),
- ('49', '49 - Date / time not plausible, trace-no. not increasing'),
- ('50', '50 - Error in PAC encryption detected'),
- ('51', '51 - System Error'),
- ('52', '52 - MB Denied - potential fraud'),
- ('53', '53 - Mobile verification failed'),
- ('54', '54 - Failed due to internal security restrictions'),
- ('55', '55 - Communication or verification problem'),
- ('56', '56 - 3D verification failed'),
- ('57', '57 - AVS check failed'),
- ('58', '58 - Invalid bank code'),
- ('59', '59 - Invalid account code'),
- ('60', '60 - Card not authorised'),
- ('61', '61 - No credit worthiness'),
- ('62', '62 - Communication error'),
- ('63', '63 - Transaction not allowed for cardholder'),
- ('64', '64 - Invalid Data in Request'),
- ('65', '65 - Blocked bank code'),
- ('66', '66 - CVV2/CVC2 Failure'),
- ('99', '99 - General error'),
+ ('01', '01 - Referred'),
+ ('02', '02 - Invalid Merchant Number'),
+ ('03', '03 - Pick-up card'),
+ ('04', '04 - Authorisation Declined'),
+ ('05', '05 - Other Error'),
+ ('06', '06 - CVV is mandatory, but not set or invalid'),
+ ('07', '07 - Approved authorisation, honour with identification'),
+ ('08', '08 - Delayed Processing'),
+ ('09', '09 - Invalid Transaction'),
+ ('10', '10 - Invalid Currency'),
+ ('11', '11 - Invalid Amount/Available Limit Exceeded/Amount too high'),
+ ('12', '12 - Invalid credit card or bank account'),
+ ('13', '13 - Invalid Card Issuer'),
+ ('14', '14 - Annulation by client'),
+ ('15', '15 - Duplicate transaction'),
+ ('16', '16 - Acquirer Error'),
+ ('17', '17 - Reversal not processed, matching authorisation not found'),
+ ('18', '18 - File Transfer not available/unsuccessful'),
+ ('19', '19 - Reference number error'),
+ ('20', '20 - Access Denied'),
+ ('21', '21 - File Transfer failed'),
+ ('22', '22 - Format Error'),
+ ('23', '23 - Unknown Acquirer'),
+ ('24', '24 - Card expired'),
+ ('25', '25 - Fraud Suspicion'),
+ ('26', '26 - Security code expired'),
+ ('27', '27 - Requested function not available'),
+ ('28', '28 - Lost/Stolen card'),
+ ('29', '29 - Stolen card, Pick up'),
+ ('30', '30 - Duplicate Authorisation'),
+ ('31', '31 - Limit Exceeded'),
+ ('32', '32 - Invalid Security Code'),
+ ('33', '33 - Unknown or Invalid Card/Bank account'),
+ ('34', '34 - Illegal Transaction'),
+ ('35', '35 - Transaction Not Permitted'),
+ ('36', '36 - Card blocked in local blacklist'),
+ ('37', '37 - Restricted card/bank account'),
+ ('38', '38 - Security Rules Violation'),
+ ('39', '39 - The transaction amount of the referencing transaction is higher than the transaction amount of the original transaction'),
+ ('40', '40 - Transaction frequency limit exceeded, override is possible'),
+ ('41', '41 - Incorrect usage count in the Authorisation System exceeded'),
+ ('42', '42 - Card blocked'),
+ ('43', '43 - Rejected by Credit Card Issuer'),
+ ('44', '44 - Card Issuing Bank or Network is not available'),
+ ('45', '45 - The card type is not processed by the authorisation centre / Authorisation System has determined incorrect Routing'),
+ ('47', '47 - Processing temporarily not possible'),
+ ('48', '48 - Security Breach'),
+ ('49', '49 - Date / time not plausible, trace-no. not increasing'),
+ ('50', '50 - Error in PAC encryption detected'),
+ ('51', '51 - System Error'),
+ ('52', '52 - MB Denied - potential fraud'),
+ ('53', '53 - Mobile verification failed'),
+ ('54', '54 - Failed due to internal security restrictions'),
+ ('55', '55 - Communication or verification problem'),
+ ('56', '56 - 3D verification failed'),
+ ('57', '57 - AVS check failed'),
+ ('58', '58 - Invalid bank code'),
+ ('59', '59 - Invalid account code'),
+ ('60', '60 - Card not authorised'),
+ ('61', '61 - No credit worthiness'),
+ ('62', '62 - Communication error'),
+ ('63', '63 - Transaction not allowed for cardholder'),
+ ('64', '64 - Invalid Data in Request'),
+ ('65', '65 - Blocked bank code'),
+ ('66', '66 - CVV2/CVC2 Failure'),
+ ('99', '99 - General error'),
)

0 comments on commit 6f30ce1

Please sign in to comment.
Something went wrong with that request. Please try again.