UNPKG

payway-sdk

Version:

Payway SDK NODEJS ===============

504 lines (408 loc) 17.1 kB
var express = require('express'); var http = require('http'); const sqlite3 = require('sqlite3').verbose(); var app = express(); var path = require('path'); var Client = require('node-rest-client').Client; var Promise = require('promise'); var TokenDataModulo = require('../lib/token_data.js'); var PaymentDataModulo = require('../lib/payment_data.js'); var paymentInfoMod = require('../lib/payment_info'); var querystring = require('querystring'); var sdkModulo = require('../lib/sdk'); var bsa = require('./SDK-Nodejs-BilleteraVirtualGateway-master/lib/BSA/bsa.js'); // Obtengo las funciones discover y transaction const { PUBLIC_API_KEY, PRIVATE_API_KEY } = require('./constants.js'); var sdk = new sdkModulo.sdk('developer', PUBLIC_API_KEY, PRIVATE_API_KEY); app.set('view engine', 'ejs'); app.use(express.static(__dirname)); let db = new sqlite3.Database('./ejemplobvg.db', (err) => { if (err) { console.error(err.message); } console.log('Connected to the database.'); }); app.get('/data', function(req, res) { res.render('./ejemplo_bvg.ejs', { seccion: "data", }); }); app.post('/data_db', function(req, res) { req.on('data', function(datosparciales) { var stringDatos; stringDatos += datosparciales; //console.log(stringDatos); var data = querystring.parse(stringDatos); console.log(JSON.stringify(data)); db.all(`INSERT INTO transaccion (data) VALUES ('`+ JSON.stringify(data) +`')`, (err, rows) => { if (err) { console.error(err.message); } }); res.render('./success.ejs'); }); }); app.get('/transaction', function(req, res) { console.log('transaction'); console.log(req.query.ord); db.get(`SELECT * FROM transaccion WHERE id=`+req.query.ord, (err, rows) => { if (err) { console.error(err.message); } console.log(rows); var data=JSON.parse(rows.data); console.log(data); console.log('mercant: ' + data.merchant); //Convierte a int todos los elementos de Availablepaymentmethods var arrAvailablepaymentmethods=[]; arrAvailablepaymentmethods = data.availablepaymentmethods.split(','); var availablepaymentmethodsInt = arrAvailablepaymentmethods.map(function(x) { return parseInt(x); }); //Convierte a int todos los elementos de AvailableBanks var arrAvailableBanks=[]; arrAvailableBanks = data.availablebanks.split(','); var availableBanksInt=arrAvailableBanks.map(function(x) { return parseInt(x); }); generalData = { "merchant": data.merchant, "security": data.security, "operationDatetime": "20170302155613", "remoteIpAddress": "192.168.11.87", "channel": data.channel }; operationData = { "operationType": data.operationtype, "operationID": req.query.ord, "currencyCode": data.currency, "concept": data.concept, "amount": data.amount, "availablePaymentMethods": availablepaymentmethodsInt, "availableBanks": availableBanksInt, "buyerPreselection": { "paymentMethodId": parseInt(data.buyerpreselectionmp), "bankId": parseInt(data.buyerpreselectionbank) } }; technicalData = { "sdk": "NodeJS", 'sdkversion': '1.3.1', 'lenguageversion': '1.8', 'pluginversion': '2.1', 'ecommercename': 'DH-gate', 'ecommerceversion': '3.1', 'cmsversion': '2.4' }; bsa.getTransaction(generalData, operationData, technicalData, function(result, err) { console.log("-------------------***-------------------"); console.log("getTransaction:"); console.log(result); db.all(`UPDATE transaccion SET transactionresponse='`+ JSON.stringify(result) +`' WHERE id='`+ req.query.ord +`'`, (err, rows) => { if (err) { console.error(err.message); } res.render('./success.ejs'); }); console.log('error: '); console.log(err.toString('utf8')); console.log("-------------------***-------------------"); }); }); }); app.get('/pago_tp', function(req, res) { console.log('transaction'); console.log(req.query.ord); db.get(`SELECT * FROM transaccion WHERE id=`+req.query.ord, (err, row) => { if (err) { console.error(err.message); } var dataTransaction=JSON.parse(row.transactionresponse); console.log(dataTransaction); console.log(dataTransaction.transactionresponse); var dataGeneral = JSON.parse(row.data); if(row.ambiente=="dev"){ var endpoint="https://portalqa.visa2.com.ar/resources/TPBSAForm.min.js"; }else{ var endpoint="https://forms.todopago.com.ar/resources/TPBSAForm.min.js"; } res.render('./pago_tp.ejs', { endpoint: endpoint, operationid: req.query.ord, publicKey: dataTransaction.publicRequestKey, merchant: dataGeneral.merchant, }); }); }); app.get('/pago_tp_action', function(req, res) { if(req.query.success){ var status = "ACEPTADO"; }else{ var status = "RECHAZADO"; } db.all(`UPDATE transaccion SET pagotpstatus='`+ status +`', pagotpresponse='`+ req.query.formresponse +`' WHERE id='`+ req.query.ord +`'`, (err, rows) => { if (err) { console.error(err.message); } res.render('./success.ejs'); }); }); app.get('/pago_decidir', function(req, res) { db.get(`SELECT * FROM transaccion WHERE id=`+req.query.ord, (err, row) => { if (err) { console.error(err.message); } var dataTransaction=JSON.parse(row.transactionresponse); var dataGeneral = JSON.parse(row.data); var dataTpResponse = JSON.parse(row.pagotpresponse); if(dataTpResponse.TokenizationFlag == "true"){ var flag_token = "1"; }else{ var flag_token = "0"; } if(dataTpResponse.SecurityCodeCheck == "true"){ var flag_code_check = "1"; }else{ var flag_code_check = "0"; } var args = { data: { "public_token":dataTpResponse.Token, "volatile_encrypted_data":dataTpResponse.VOLATILE_ENCRYPTED_DATA, "public_request_key":dataTransaction.publicRequestKey, "issue_date":dataTpResponse.TokenDate, "flag_security_code":flag_code_check, "flag_tokenization":flag_token, "flag_selector_key":dataTpResponse.SelectorClaveFlag, "flag_pei":"1", "card_holder_name":dataTpResponse.DatosAdicionales.nombre, "card_number":"4507990000004905", "card_expiration_month":"08", "card_expiration_year":"19", "card_holder_identification":{ "type": dataTpResponse.DatosAdicionales.tipoDocumento, "number": dataTpResponse.DatosAdicionales.numeroDocumento }, "fraud_detection":{ "device_unique_identifier":"12345" } }, headers: { apikey: dataGeneral.key_public, 'Content-Type': 'application/json' } }; /* var args = { data: { "public_token":96291105, "volatile_encrypted_data":"YRfrWggICAggsF0nR6ViuAgWsPr5ouR5knIbPtkN+yntd7G6FzN/Xb8zt6+QHnoxmpTraKphZVHvxA==", "public_request_key":"5516e585-c0b6-447c-bbb0-8ee1fa75d8ca", "issue_date":"20190108", "flag_security_code":"0", "flag_tokenization":"0", "flag_selector_key":"1", "flag_pei":"1", "card_holder_name":"Comprador", "card_number":"4507990000004905", "card_expiration_month":"08", "card_expiration_year":"19", "card_holder_identification":{ "type":"DNI", "number":"33222444" }, "fraud_detection":{ "device_unique_identifier":"12345" } }, headers: { apikey: PUBLIC_API_KEY, 'Content-Type': 'application/json' } }; */ var client = new Client(); client.post(ENDPOINT_DEVELOPER + "/tokens", args, function(data, response) { console.log(data); //var dataResponse = JSON.parse(data); dataPago = { "site_transaction_id": req.query.ord, "payment_mode": "bsa", "token": data.id, "customer": {"id": dataGeneral.user_id, "email": dataGeneral.user_mail}, "payment_method_id": dataGeneral.decpaymentmethod, //"amount": str_replace(",",".",dataGeneral.amount), "amount": dataGeneral.amount.replace(",", "."), "bin": dataGeneral.bin, "currency": dataGeneral.currencydec, "installments": dataGeneral.cuotas, "description": "prueba", "payment_type": "single", "establishment_name": dataGeneral.establishment, "sub_payments": [] } client.post(ENDPOINT_DEVELOPER + "/payments", args, function(data, response) { //resolve(data.id); console.log('data de pago::::'); console.log(data); var execresponse; if(data.status=="approved" || 1==1){ var statusPago = "ACEPTADO"; var execresponse = `{ "id": `+ data.id + `, "status":`+ data.status + `, "ticket":`+ data.status_details.ticket + `, "authorization":`+ data.status_details.card_authorization_code + `, "amount":`+ data.currency + `, "date":`+ data.date + ` }`; } else{ var statusPago="RECHAZADO"; } db.all(`UPDATE transaccion SET pagodecresponse='`+ execresponse +`', pagodecstatus='`+ statusPago +`' WHERE id='`+ req.query.ord +`'`, (err, rows) => { if (err) { console.error(err.message); } res.render('./success.ejs'); }); }); }); }); res.render('./success.ejs'); }); app.get('/push_notification', function(req, res) { db.get(`SELECT * FROM transaccion WHERE id=`+req.query.ord, (err, row) => { if (err) { console.error(err.message); } var args = { data: { }, headers: { "apikey": PRIVATE_API_KEY, "Content-Type": "application/json", "Cache-Control": "no-cache" } }; var dataTransaction=JSON.parse(row.transactionresponse); var dataGeneral = JSON.parse(row.data); var dataTpResponse = JSON.parse(row.pagotpresponse); var dataPagoDecidirResponse = JSON.parse(row.pagodecresponse); setTimeout(function() { var query = "?expand=card_data"; var paymentInfo = new paymentInfoMod.paymentInfo(sdk, dataPagoDecidirResponse.id + query, args).then(function(resp) { var today = new Date(); var minutes = today.getMinutes(); var seconds = today.getSeconds(); var hours = today.getHours(); var mm = today.getMonth()+1; var yyyy = today.getFullYear(); var dd = today.getDate(); if(dd<10) { dd='0'+dd; } if(mm<10) { mm='0'+mm; } if(minutes<10) { minutes='0'+minutes; } if(seconds<10) { seconds='0'+seconds; } if(hours<10) { hours='0'+hours; } console.log('año: ' + yyyy); var fulldate=""+yyyy+mm+dd+hours+minutes+seconds; console.log("fulldate: " + fulldate); //varfulldate="20190101010101"; var ip = req.ip.split(':').pop(); console.log(ip); var generalData = { "merchant": parseInt(dataGeneral.merchant), "security": dataGeneral.security, "operationName": "Compra", "publicRequestKey": dataTransaction.publicRequestKey, "remoteIpAddress": ip }; var operationData = { "resultCodeMedioPago": -1, "resultCodeGateway": -1, "idGateway": 8, "resultMessage": dataPagoDecidirResponse.status, "operationDatetime": fulldate, //fecha de operacion del transaction "ticketNumber": dataPagoDecidirResponse.status_details.ticket, "codigoAutorizacion": dataPagoDecidirResponse.status_details.card_authorization_code, "currencyCode": dataGeneral.currency, "operationID": dataGeneral.operacion, "concept": "compra", "amount": dataGeneral.amount, "facilitiesPayment": "03" }; var tokenizationData = { "publicTokenizationField": dataTpResponse.Token, "credentialMask": resp.card_data.card_number }; console.log('antes de push notification'); //pushNotification: function(generalData, operationData, tokenizationData, callback bsa.pushNotification(generalData, operationData, tokenizationData, function(result, err) { console.log("-------------------***-------------------"); console.log(result); if(result.statusCode=="-1"){ var pushstatus = "ACEPTADO"; }else{ var pushstatus = "RECHAZADO"; } db.all(`UPDATE transaccion SET pushresponse='`+ result +`', pushstatus='`+ pushstatus +`' WHERE id='`+ req.query.ord +`'`, (err, rows) => { if (err) { console.error(err.message); } res.render('./success.ejs'); }); console.log("-------------------***-------------------"); }); }); }, 2000); }); }); app.get('/', function(req, res) { db.all(`SELECT * FROM transaccion`, (err, rows) => { if (err) { console.error(err.message); } res.render('./ejemplo_bvg.ejs', { rows: rows, seccion: "main" }); }); }); app.use(function(req, res, next) { res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4000'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); res.setHeader('Access-Control-Allow-Credentials', true); next(); }); http.createServer(app).listen('4000', function() { //Creacion del servidor web console.log('Express server listening on port ' + '4000'); });