var comNpay = {}; // To replace with your identifiers var serialNumber = null; // To replace with the url of your website var origin = "platform.chiringo.co"; // Generic settings var homologation_url = "https://secure-homologation.comnpay.com:60000"; var production_url = "https://secure.comnpay.com:60000"; var api = "/rest/token/create"; var url = ""; //var cardType = ""; // Mask initialization for payment comNpay.initMask = function(){ // Card mask $('#card').mask('0000 0000 0000 0000 000'); // Date mask $('#date').mask('00/00'); // Cvv mask $('#cvv').mask('0000'); }; // Initialization of checks for input format checking comNpay.initCheck = function(){ // Card check $("#card").focusout(function() { comNpay.checkCard(); }); // Date check $("#date").focusout(function() { comNpay.checkDate(); }); // Cvv check $("#cvv").focusout(function() { comNpay.checkCvv(); }); }; // Card check comNpay.checkCard = function(){ var card = $("#card"); if(!isValidCard(card.val())){ card.addClass('errorForm'); return false; }else{ card.removeClass('errorForm'); return true; } }; // Date check comNpay.checkDate = function(){ var re = new RegExp("0[1-9]|10|11|12/[0-9][0-9]"); var date = $("#date"); if(!re.test(date.val())){ date.addClass('errorForm'); return false; }else{ date.removeClass('errorForm'); return true; } }; // Cvv check comNpay.checkCvv = function(){ var cvv = $("#cvv"); if(cvv.val().length > 4 || cvv.val().length < 3){ cvv.addClass('errorForm'); return false; }else{ cvv.removeClass('errorForm'); return true; } }; // Type check /* comNpay.checkType = function(){ var cvv = $("#cvv"); if(cardType === ''){ $(".imgToSelect").each(function () { $(this).addClass("errorFormCard"); }); return false; }else{ cvv.removeClass('errorForm'); return true; } }; */ function getCardType(number) { // visa var re = new RegExp("^4"); if (number.match(re) != null) return "Visa"; // Mastercard // Updated for Mastercard 2017 BINs expansion if (/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(number)) return "Mastercard"; // AMEX re = new RegExp("^3[47]"); if (number.match(re) != null) return "AMEX"; // Discover re = new RegExp("^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)"); if (number.match(re) != null) return "Discover"; // Diners re = new RegExp("^36"); if (number.match(re) != null) return "Diners"; // Diners - Carte Blanche re = new RegExp("^30[0-5]"); if (number.match(re) != null) return "Diners - Carte Blanche"; // JCB re = new RegExp("^35(2[89]|[3-8][0-9])"); if (number.match(re) != null) return "JCB"; // Visa Electron re = new RegExp("^(4026|417500|4508|4844|491(3|7))"); if (number.match(re) != null) return "Visa Electron"; return "CB"; } // Initializing ComNpay settings comNpay.init = function(plateform, canUseAmex, VADNumber){ console.log('Initializing COMNPay for serial number: ' + VADNumber); serialNumber = VADNumber; if(plateform === "HOMOLOGATION"){ url = homologation_url + api; }else{ url = production_url + api; } if (!canUseAmex){ $("#canUseAmex").remove(); } }; // Tokenization comNpay.tokenize = function(cardNumber, cardExpirationDate, cvv){ // $.ajax({ // type: "POST", // url: url, // data: { // serialNumber: serialNumber, // cardNumber: cardNumber.replace(/\s/g,''), // cardExpirationDate: cardExpirationDate, // cvv: cvv, // cardType: cardType, // origin: origin // }, // dataType: "json" // }) // .done(function (msg) { // console.log('tokenize(): the tokenization result is ' + JSON.stringify(msg, null, 2)); // return msg.token; // }); // If all fields are filled correctly: //var typeOk = true;//comNpay.checkType(); var cardOk = comNpay.checkCard(); var dateOk = comNpay.checkDate(); var cvvOk = comNpay.checkCvv(); if(cardOk && dateOk && cvvOk){ console.log('tokenize(): about to request with ' + serialNumber + ' - ' + origin); var sanitizedCardNumber = cardNumber.replace(/\s/g,''); var data = { serialNumber: serialNumber, cardNumber: sanitizedCardNumber, cardExpirationDate: cardExpirationDate, cvv: cvv, cardType: getCardType(sanitizedCardNumber), origin: origin }; return request .post(url) .type('form') .send(data); } console.log('tokenize(): could not request token, some check failed: cardOk ' + cardOk + ', dateOk: ' + dateOk + ', cvvOk: ' + cvvOk); return null; }; // Verification of the format of the card function isValidCard(identifier) { identifier = identifier.replace(/\s/g,''); var sum = 0, alt = false, i = identifier.length-1, num; if (identifier.length < 13 || identifier.length > 19){ return false; } while (i >= 0){ num = parseInt(identifier.charAt(i), 10); if (isNaN(num)){ return false; } if (alt) { num *= 2; if (num > 9){ num = (num % 10) + 1; } } alt = !alt; sum += num; i--; } return (sum % 10 == 0); } /* $(document).ready(function() { // Select good card $(".imgToSelect").click(function () { $(".imgToSelect").each(function () { $(this).removeClass("selectedCard"); $(this).removeClass("errorFormCard"); }); $(this).addClass("selectedCard"); cardType = $(this).data("id"); }); }); */