UNPKG

mangopay-cardregistration-js-kit

Version:

MANGOPAY Card Registration JavaScript Kit is a client library designed to take care of the card registration process.

1 lines 5.02 kB
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.mangoPay=b()}(this,function(){"use strict";var a={cardRegistration:{baseURL:"https://api.sandbox.mangopay.com",clientId:"",init:function(a){this._cardRegisterData=a},registerCard:function(b,c,d){if(!a.browser.corsSupport())return void d({ResultCode:"009999",ResultMessage:"Browser does not support making cross-origin Ajax calls"});var e=a.cardRegistration._validateCardData(b);return e!==!0?void d(e):void a.cardRegistration._tokenizeCard(b,a.cardRegistration._finishRegistration,c,d)},_validateCardData:function(b){var c=a._validation._cardNumberValidator._validate(b.cardNumber);if(c!==!0)return c;var d=a._validation._expirationDateValidator._validate(b.cardExpirationDate,new Date);if(d!==!0)return d;var e=a._validation._cvvValidator._validate(b.cardCvx,b.cardType);return e===!0||e},_tokenizeCard:function(b,c,d,e){a._networking._ajax({type:"post",url:this._cardRegisterData.cardRegistrationURL,crossDomain:!0,data:{data:this._cardRegisterData.preregistrationData,accessKeyRef:this._cardRegisterData.accessKey,cardNumber:b.cardNumber,cardExpirationDate:b.cardExpirationDate,cardCvx:b.cardCvx},success:function(b,f){var g="";return null!==b&&0===b.indexOf("errorCode=")?void e({xmlhttp:f,ResultCode:b.replace("errorCode=",""),ResultMessage:"Token processing error"}):null===b?void e({xmlhttp:f,ResultCode:"001599",ResultMessage:"Token processing error"}):(g={Id:a.cardRegistration._cardRegisterData.Id,RegistrationData:b},void c(g,d,e))},error:function(a,b){return b?e(b):"0"==a.status?void e({xmlhttp:a,ResultCode:"001596",ResultMessage:"An HTTP request was blocked by the User's computer (probably due to an antivirus)"}):void e({xmlhttp:a,ResultCode:"001599",ResultMessage:"Token processing error"})}})},_finishRegistration:function(b,c,d){a._networking._ajax({type:"post",crossDomain:!0,url:a.cardRegistration.baseURL+"/v2.01/"+a.cardRegistration.clientId+"/CardRegistrations/"+b.Id,data:b,success:function(a,b){try{a=JSON.parse(a)}catch(a){return void d({xmlhttp:b,ResultCode:"101699",ResultMessage:"CardRegistration should return a valid JSON response"})}"000000"===a.ResultCode?c(a):d(a)},error:function(a,b){if(b)return d(b);var c="CardRegistration error";if(a.response)try{var e=JSON.parse(a.response);e.Message&&(c=e.Message)}catch(a){}d({xmlhttp:a,ResultCode:"101699",ResultMessage:c})}})}},_validation:{_cvvValidator:{_validate:function(b,c){if("MAESTRO"===c||"BCMC"===c)return!0;if(b=b?b.trim():"",c=c?c.trim():"",a._validation._helpers._validateNumericOnly(b)===!0){if("AMEX"===c&&(3===b.length||4===b.length))return!0;if("CB_VISA_MASTERCARD"===c&&3===b.length)return!0}return{ResultCode:"105204",ResultMessage:"CVV_FORMAT_ERROR"}}},_expirationDateValidator:{_validate:function(a,b){if(a=a?a.trim():"",4===a.length){var c=parseInt(a.substr(2,2),10)+2e3,d=parseInt(a.substr(0,2),10);if(d>0&&d<=12){var e=b.getFullYear();if(e<c)return!0;if(e===c){var f=b.getMonth()+1;if(f<=d)return!0}return{ResultCode:"105203",ResultMessage:"PAST_EXPIRY_DATE_ERROR"}}}return{ResultCode:"105203",ResultMessage:"EXPIRY_DATE_FORMAT_ERROR"}}},_cardNumberValidator:{_validate:function(b){return b=b?b.trim():"",a._validation._helpers._validateNumericOnly(b)===!1?{ResultCode:"105202",ResultMessage:"CARD_NUMBER_FORMAT_ERROR"}:this._validateCheckDigit(b)!==!1||{ResultCode:"105202",ResultMessage:"CARD_NUMBER_FORMAT_ERROR"}},_validateCheckDigit:function(a){for(var b=0,c=0,d=!1,e=a.replace(/\D/g,""),f=e.length-1;f>=0;f--){var g=e.charAt(f),c=parseInt(g,10);d&&(c*=2)>9&&(c-=9),b+=c,d=!d}return b%10===0}},_helpers:{_validateNumericOnly:function(a){var b=/^[0-9]+$/;return!!a.match(b)}}},_networking:{_ajax:function(a){function f(b,c){var d,e;a.crossDomain?(d="001598",e="A cross-origin HTTP request failed"):(d="001597",e="An HTTP request failed"),c&&c.message.length&&(e=e+": "+c.message),a.error(b,{ResultCode:d,ResultMessage:e,xmlhttp:b})}var b=new XMLHttpRequest,c="";for(var d in a.data)c+=(c.length>0?"&":"")+d+"="+encodeURIComponent(a.data[d]);var e=a.url;if("get"===a.type&&(e=a.url+(a.url.indexOf("?")>-1?"&":"?")+c),!a.crossDomain||"withCredentials"in b||!window.XDomainRequest){b.onreadystatechange=function(){4==b.readyState&&(/^2[0-9][0-9]$/.test(b.status)?a.success(b.responseText,b):a.error(b,b.status,b.statusText))};try{b.open(a.type,e,!0)}catch(a){return f(b,a)}"post"===a.type&&b.setRequestHeader("Content-type","application/x-www-form-urlencoded");try{b.send("post"===a.type?c:null)}catch(a){return f(b,a)}}else{xdr=new XDomainRequest,xdr.onerror=function(){a.error(xdr)},xdr.onload=function(){a.success(xdr.responseText,xdr)};try{xdr.open(a.type,e),xdr.send("post"===a.type?c:null)}catch(a){return f(xdr,a)}}}},browser:{corsSupport:function(){return"ReactNative"===window.navigator.product||("withCredentials"in new XMLHttpRequest||!!window.XDomainRequest)}}};return String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),a});