├── c2p
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── crypto.js
│ └── c2p.js
├── index.js
├── readme.md
└── views
│ └── index.ejs
├── scp
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── scp.js
│ └── crypto.js
├── index.js
├── views
│ └── index.ejs
└── readme.md
├── tdc
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── pay.js
│ └── crypto.js
├── index.js
├── readme.md
└── views
│ └── index.ejs
├── tdd
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── pay.js
│ └── crypto.js
├── index.js
├── readme.md
└── views
│ └── index.ejs
├── getauth
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── getauth.js
│ └── crypto.js
├── views
│ └── index.ejs
├── index.js
└── readme.md
├── td-search
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── search.js
│ └── crypto.js
├── index.js
├── readme.md
└── views
│ └── index.ejs
├── search-c2p
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── searchC2p.js
│ └── crypto.js
├── index.js
├── readme.md
└── views
│ └── index.ejs
├── transfer-search
├── img
│ ├── readme-img-1.png
│ ├── readme-img-2.png
│ ├── readme-img-3.png
│ ├── readme-img-4.png
│ ├── readme-img-5.png
│ ├── readme-img-6.png
│ └── readme-img-7.png
├── public
│ ├── images
│ │ ├── favicon.ico
│ │ └── mercantil-logo.png
│ ├── js
│ │ ├── main.js
│ │ └── interface.js
│ └── styles
│ │ └── styles.css
├── .env
├── config.js
├── package.json
├── modules
│ ├── search.js
│ └── crypto.js
├── index.js
├── views
│ └── index.ejs
└── readme.md
├── README.md
└── .gitignore
/c2p/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/img/readme-img-1.png
--------------------------------------------------------------------------------
/c2p/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/img/readme-img-2.png
--------------------------------------------------------------------------------
/c2p/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/img/readme-img-3.png
--------------------------------------------------------------------------------
/c2p/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/img/readme-img-4.png
--------------------------------------------------------------------------------
/c2p/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/img/readme-img-5.png
--------------------------------------------------------------------------------
/c2p/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/img/readme-img-6.png
--------------------------------------------------------------------------------
/c2p/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/img/readme-img-7.png
--------------------------------------------------------------------------------
/scp/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/img/readme-img-1.png
--------------------------------------------------------------------------------
/scp/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/img/readme-img-2.png
--------------------------------------------------------------------------------
/scp/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/img/readme-img-3.png
--------------------------------------------------------------------------------
/scp/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/img/readme-img-4.png
--------------------------------------------------------------------------------
/scp/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/img/readme-img-5.png
--------------------------------------------------------------------------------
/scp/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/img/readme-img-6.png
--------------------------------------------------------------------------------
/scp/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/img/readme-img-7.png
--------------------------------------------------------------------------------
/tdc/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/img/readme-img-1.png
--------------------------------------------------------------------------------
/tdc/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/img/readme-img-2.png
--------------------------------------------------------------------------------
/tdc/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/img/readme-img-3.png
--------------------------------------------------------------------------------
/tdc/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/img/readme-img-4.png
--------------------------------------------------------------------------------
/tdc/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/img/readme-img-5.png
--------------------------------------------------------------------------------
/tdc/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/img/readme-img-6.png
--------------------------------------------------------------------------------
/tdc/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/img/readme-img-7.png
--------------------------------------------------------------------------------
/tdd/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/img/readme-img-1.png
--------------------------------------------------------------------------------
/tdd/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/img/readme-img-2.png
--------------------------------------------------------------------------------
/tdd/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/img/readme-img-3.png
--------------------------------------------------------------------------------
/tdd/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/img/readme-img-4.png
--------------------------------------------------------------------------------
/tdd/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/img/readme-img-5.png
--------------------------------------------------------------------------------
/tdd/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/img/readme-img-6.png
--------------------------------------------------------------------------------
/tdd/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/img/readme-img-7.png
--------------------------------------------------------------------------------
/c2p/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/public/images/favicon.ico
--------------------------------------------------------------------------------
/getauth/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/img/readme-img-1.png
--------------------------------------------------------------------------------
/getauth/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/img/readme-img-2.png
--------------------------------------------------------------------------------
/getauth/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/img/readme-img-3.png
--------------------------------------------------------------------------------
/getauth/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/img/readme-img-4.png
--------------------------------------------------------------------------------
/getauth/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/img/readme-img-5.png
--------------------------------------------------------------------------------
/getauth/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/img/readme-img-6.png
--------------------------------------------------------------------------------
/getauth/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/img/readme-img-7.png
--------------------------------------------------------------------------------
/scp/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/public/images/favicon.ico
--------------------------------------------------------------------------------
/td-search/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/img/readme-img-1.png
--------------------------------------------------------------------------------
/td-search/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/img/readme-img-2.png
--------------------------------------------------------------------------------
/td-search/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/img/readme-img-3.png
--------------------------------------------------------------------------------
/td-search/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/img/readme-img-4.png
--------------------------------------------------------------------------------
/td-search/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/img/readme-img-5.png
--------------------------------------------------------------------------------
/td-search/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/img/readme-img-6.png
--------------------------------------------------------------------------------
/td-search/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/img/readme-img-7.png
--------------------------------------------------------------------------------
/tdc/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/public/images/favicon.ico
--------------------------------------------------------------------------------
/tdd/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/public/images/favicon.ico
--------------------------------------------------------------------------------
/search-c2p/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/img/readme-img-1.png
--------------------------------------------------------------------------------
/search-c2p/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/img/readme-img-2.png
--------------------------------------------------------------------------------
/search-c2p/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/img/readme-img-3.png
--------------------------------------------------------------------------------
/search-c2p/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/img/readme-img-4.png
--------------------------------------------------------------------------------
/search-c2p/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/img/readme-img-5.png
--------------------------------------------------------------------------------
/search-c2p/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/img/readme-img-6.png
--------------------------------------------------------------------------------
/search-c2p/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/img/readme-img-7.png
--------------------------------------------------------------------------------
/getauth/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/public/images/favicon.ico
--------------------------------------------------------------------------------
/td-search/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/public/images/favicon.ico
--------------------------------------------------------------------------------
/c2p/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/c2p/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/scp/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/scp/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/search-c2p/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/public/images/favicon.ico
--------------------------------------------------------------------------------
/tdc/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdc/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/tdd/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/tdd/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/transfer-search/img/readme-img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/img/readme-img-1.png
--------------------------------------------------------------------------------
/transfer-search/img/readme-img-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/img/readme-img-2.png
--------------------------------------------------------------------------------
/transfer-search/img/readme-img-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/img/readme-img-3.png
--------------------------------------------------------------------------------
/transfer-search/img/readme-img-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/img/readme-img-4.png
--------------------------------------------------------------------------------
/transfer-search/img/readme-img-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/img/readme-img-5.png
--------------------------------------------------------------------------------
/transfer-search/img/readme-img-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/img/readme-img-6.png
--------------------------------------------------------------------------------
/transfer-search/img/readme-img-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/img/readme-img-7.png
--------------------------------------------------------------------------------
/getauth/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/getauth/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/td-search/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/td-search/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/transfer-search/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/public/images/favicon.ico
--------------------------------------------------------------------------------
/search-c2p/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/search-c2p/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/tdc/.env:
--------------------------------------------------------------------------------
1 | PORT=3000
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
--------------------------------------------------------------------------------
/tdd/.env:
--------------------------------------------------------------------------------
1 | PORT=3001
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
--------------------------------------------------------------------------------
/getauth/.env:
--------------------------------------------------------------------------------
1 | PORT=3002
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
--------------------------------------------------------------------------------
/td-search/.env:
--------------------------------------------------------------------------------
1 | PORT=3003
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
--------------------------------------------------------------------------------
/transfer-search/public/images/mercantil-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apimercantil/api-playground/HEAD/transfer-search/public/images/mercantil-logo.png
--------------------------------------------------------------------------------
/transfer-search/.env:
--------------------------------------------------------------------------------
1 | PORT=3003
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
--------------------------------------------------------------------------------
/c2p/.env:
--------------------------------------------------------------------------------
1 | PORT=3001
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
8 | PHONE_NUMBER="changeme"
--------------------------------------------------------------------------------
/scp/.env:
--------------------------------------------------------------------------------
1 | PORT=3003
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
8 | PHONE_NUMBER="changeme"
--------------------------------------------------------------------------------
/search-c2p/.env:
--------------------------------------------------------------------------------
1 | PORT=3000
2 | HOST="127.0.0.1"
3 | MERCHANTID=123456
4 | CLIENTID='changeme'
5 | SECRETKEY="changeme"
6 | INTEGRATORID=31
7 | TERMINALID="abcde"
8 | PHONE_NUMBER="changeme"
--------------------------------------------------------------------------------
/getauth/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID
11 | }
--------------------------------------------------------------------------------
/scp/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID
11 | }
--------------------------------------------------------------------------------
/tdc/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID
11 | }
--------------------------------------------------------------------------------
/tdd/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID
11 | }
--------------------------------------------------------------------------------
/td-search/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID
11 | }
--------------------------------------------------------------------------------
/transfer-search/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID
11 | }
--------------------------------------------------------------------------------
/c2p/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID,
11 | PHONE_NUMBER: process.env.PHONE_NUMBER
12 | }
--------------------------------------------------------------------------------
/search-c2p/config.js:
--------------------------------------------------------------------------------
1 | const dotenv = require('dotenv').config();
2 |
3 | module.exports = {
4 | HOST: process.env.HOST || '127.0.0.1',
5 | PORT: process.env.PORT || 3000,
6 | MERCHANTID: process.env.MERCHANTID,
7 | CLIENTID: process.env.CLIENTID,
8 | SECRETKEY: process.env.SECRETKEY,
9 | INTEGRATORID: process.env.INTEGRATORID,
10 | TERMINALID: process.env.TERMINALID,
11 | PHONE_NUMBER: process.env.PHONE_NUMBER
12 | }
--------------------------------------------------------------------------------
/getauth/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "create-installment",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "colors": "^1.4.0",
13 | "dotenv": "^16.4.5",
14 | "ejs": "^3.1.10",
15 | "express": "^4.19.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/scp/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "create-installment",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "colors": "^1.4.0",
13 | "dotenv": "^16.4.5",
14 | "ejs": "^3.1.10",
15 | "express": "^4.19.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/tdc/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "create-installment",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "colors": "^1.4.0",
13 | "dotenv": "^16.4.5",
14 | "ejs": "^3.1.10",
15 | "express": "^4.19.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/tdd/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "create-installment",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "colors": "^1.4.0",
13 | "dotenv": "^16.4.5",
14 | "ejs": "^3.1.10",
15 | "express": "^4.19.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/td-search/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "create-installment",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "colors": "^1.4.0",
13 | "dotenv": "^16.4.5",
14 | "ejs": "^3.1.10",
15 | "express": "^4.19.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/c2p/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "c2p",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "c2p": "file:",
13 | "colors": "^1.4.0",
14 | "dotenv": "^16.4.5",
15 | "ejs": "^3.1.10",
16 | "express": "^4.19.2"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/transfer-search/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "create-installment",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "colors": "^1.4.0",
13 | "dotenv": "^16.4.5",
14 | "ejs": "^3.1.10",
15 | "express": "^4.19.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/search-c2p/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "search-c2p",
3 | "version": "1.0.0",
4 | "description": "Ejemplo sencillo de cómo hacer consultas a las API de Mercantil Banco.",
5 | "main": "index.js",
6 | "scripts": {
7 | "play": "node index.js"
8 | },
9 | "author": "mercantilbanco",
10 | "license": "GPL-3.0-or-later",
11 | "dependencies": {
12 | "colors": "^1.4.0",
13 | "dotenv": "^16.4.5",
14 | "ejs": "^3.1.10",
15 | "express": "^4.19.2",
16 | "search-c2p": "file:"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # API Playground
2 | ### Índice
3 | 1. Botón de pagos con tarjetas
4 | 1.1 [Get Auth (Autenticación para pagos con tarjetas)](./getauth/)
5 | 1.2 [Botón de pagos con tarjetas de débito](./tdd)
6 | 1.3 [Botón de pagos con tarjetas de crédito](./tdc)
7 | 1.4 [Búsqueda de pagos con tarjetas](./td-search)
8 | 2. C2P
9 | 2.1 [Solicitud de clave de pago](./scp/)
10 | 2.2 [Botón de pagos móviles (C2P, vuelto y anulación)](./c2p)
11 | 2.3 [Búsqueda de C2P](./search-c2p/)
12 | 3. Transferencias
13 | 3.1 [Búsqueda de transferencias](./transfer-search/)
14 |
--------------------------------------------------------------------------------
/td-search/modules/search.js:
--------------------------------------------------------------------------------
1 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
2 | const body = {
3 | merchant_identify: {
4 | integratorId,
5 | merchantId,
6 | terminalId
7 | },
8 | client_identify: {
9 | ipaddress: '127.0.0.1',
10 | browser_agent: 'Chrome 18.1.3',
11 | mobile: {
12 | manufacturer: 'Samsung',
13 | }
14 | },
15 | search_by: {
16 | "search_criteria": data.searchCriteria,
17 | "procesing_date": data.procesingDate,
18 | "invoice_number": data.invoiceNumber,
19 | "payment_reference": data.paymentReference
20 | }
21 | }
22 |
23 | console.log(body);
24 |
25 | const requestOptions = {
26 | method: "POST",
27 | headers: {
28 | 'Content-Type': 'application/json',
29 | 'X-IBM-Client-ID': clientId
30 | },
31 | body: JSON.stringify(body)
32 | }
33 |
34 |
35 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/payment/search', requestOptions)
36 | return res.json();
37 | }
--------------------------------------------------------------------------------
/getauth/modules/getauth.js:
--------------------------------------------------------------------------------
1 | const crypto = require('./crypto');
2 | const config = require('../config');
3 |
4 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
5 | const body = {
6 | merchant_identify: {
7 | integratorId,
8 | merchantId,
9 | terminalId
10 | },
11 | client_identify: {
12 | ipaddress: '127.0.0.1',
13 | browser_agent: 'Chrome 18.1.3',
14 | mobile: {
15 | manufacturer: 'Samsung',
16 | }
17 | },
18 | transaction_authInfo: {
19 | 'trx_type': 'solaut',
20 | 'payment_method': 'tdd',
21 | 'customer_id': data.customerId,
22 | 'card_number': data.cardNumber
23 | }
24 | }
25 |
26 | console.log(body.transaction)
27 |
28 | const requestOptions = {
29 | method: "POST",
30 | headers: {
31 | 'Content-Type': 'application/json',
32 | 'X-IBM-Client-ID': clientId
33 | },
34 | body: JSON.stringify(body)
35 | }
36 |
37 |
38 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/payment/getauth', requestOptions)
39 | return res.json();
40 | }
--------------------------------------------------------------------------------
/scp/modules/scp.js:
--------------------------------------------------------------------------------
1 | const config = require("../../c2p/config");
2 | const { encrypt } = require("../../c2p/modules/crypto");
3 |
4 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
5 | const body = {
6 | merchant_identify: {
7 | integratorId,
8 | merchantId,
9 | terminalId
10 | },
11 | client_identify: {
12 | ipaddress: '127.0.0.1',
13 | browser_agent: 'Chrome 18.1.3',
14 | mobile: {
15 | manufacturer: 'Samsung',
16 | }
17 | },
18 | transaction_scpInfo: {
19 | destination_id: encrypt(data.customerId, config.SECRETKEY),
20 | destination_mobile_number: encrypt(data.customerPhoneNumber, config.SECRETKEY)
21 | }
22 | }
23 |
24 | console.log(body);
25 |
26 | const requestOptions = {
27 | method: "POST",
28 | headers: {
29 | 'Content-Type': 'application/json',
30 | 'X-IBM-Client-ID': clientId
31 | },
32 | body: JSON.stringify(body)
33 | }
34 |
35 |
36 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/mobile-payment/scp', requestOptions)
37 | return res.json();
38 | }
--------------------------------------------------------------------------------
/tdc/modules/pay.js:
--------------------------------------------------------------------------------
1 | const crypto = require('./crypto');
2 | const config = require('../config');
3 |
4 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
5 | const body = {
6 | merchant_identify: {
7 | integratorId,
8 | merchantId,
9 | terminalId
10 | },
11 | client_identify: {
12 | ipaddress: '127.0.0.1',
13 | browser_agent: 'Chrome 18.1.3',
14 | mobile: {
15 | manufacturer: 'Samsung',
16 | }
17 | },
18 | transaction: {
19 | 'trx_type': 'compra',
20 | 'payment_method': 'tdc',
21 | 'customer_id': data.customerId,
22 | 'card_number': data.cardNumber,
23 | 'expiration_date': data.expirationDate,
24 | 'cvv': crypto.encrypt(data.cvv, config.SECRETKEY),
25 | 'currency': 'ves',
26 | 'amount': data.amount,
27 | 'invoice_number': data.invoiceNumber
28 | }
29 | }
30 |
31 | const requestOptions = {
32 | method: "POST",
33 | headers: {
34 | 'Content-Type': 'application/json',
35 | 'X-IBM-Client-ID': clientId
36 | },
37 | body: JSON.stringify(body)
38 | }
39 |
40 |
41 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/payment/pay', requestOptions)
42 | return res.json();
43 | }
--------------------------------------------------------------------------------
/transfer-search/modules/search.js:
--------------------------------------------------------------------------------
1 | const { encrypt } = require("./crypto");
2 | const config = require("../config");
3 |
4 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
5 | const body = {
6 | merchantIdentify: {
7 | integratorId,
8 | merchantId,
9 | terminalId
10 | },
11 | clientIdentify: {
12 | ipAddress: "10.0.0.1",
13 | browserAgent: "Chrome 18.1.3",
14 | mobile: {
15 | manufacturer: "Samsung"
16 | }
17 | },
18 | transferSearchBy: {
19 | "account": encrypt(data.accountNumber, config.SECRETKEY),
20 | "issuerCustomerId": encrypt(data.customerId, config.SECRETKEY),
21 | "trxDate": data.transactionDate,
22 | "issuerBankId": data.bankId,
23 | "transactionType": 1,
24 | "paymentReference": data.paymentReference,
25 | "amount": data.amount
26 | }
27 | }
28 |
29 | console.log(body);
30 |
31 | const requestOptions = {
32 | method: "POST",
33 | headers: {
34 | 'Content-Type': 'application/json',
35 | 'X-IBM-Client-ID': clientId
36 | },
37 | body: JSON.stringify(body)
38 | }
39 |
40 |
41 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/payment/transfer-search', requestOptions)
42 | return res.json();
43 | }
--------------------------------------------------------------------------------
/search-c2p/modules/searchC2p.js:
--------------------------------------------------------------------------------
1 | const config = require("../config");
2 | const crypto = require("./crypto");
3 |
4 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
5 | console.log(data);
6 |
7 | const body = {
8 | merchant_identify: {
9 | integratorId,
10 | merchantId,
11 | terminalId
12 | },
13 | client_identify: {
14 | ipaddress: '127.0.0.1',
15 | browser_agent: 'Chrome 18.1.3',
16 | mobile: {
17 | manufacturer: 'Samsung',
18 | }
19 | },
20 | search_by: {
21 | amount: data.amount, // Monto de la transacción.
22 | currency: 'ves', // Moneda utilizada en la transacción.
23 | destination_mobile_number: crypto.encrypt(data.customerPhoneNumber, config.SECRETKEY), // Número telefónico del destinatario.
24 | origin_mobile_number: crypto.encrypt(config.PHONE_NUMBER, config.SECRETKEY), // Número telefónico del remitente.
25 | payment_reference: data.refNumber,
26 | trx_date: data.transactionDate
27 | }
28 | }
29 |
30 | console.log(body);
31 |
32 | const requestOptions = {
33 | method: "POST",
34 | headers: {
35 | 'Content-Type': 'application/json',
36 | 'X-IBM-Client-ID': clientId
37 | },
38 | body: JSON.stringify(body)
39 | }
40 |
41 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/mobile-payment/search', requestOptions);
42 | return res.json();
43 | }
--------------------------------------------------------------------------------
/getauth/public/js/main.js:
--------------------------------------------------------------------------------
1 | import { displayResponse, displayBack } from "./interface.js";
2 |
3 | // BOTONES
4 | const sendButton = document.querySelector("#send-button");
5 | const retry = document.querySelector(".retry");
6 |
7 | //CAMPOS DE PAYMENT
8 | const customerIdPrefix = document.querySelector("#customerid-prefix");
9 | const customerId = document.querySelector("#customerid");
10 | const cardNumber = document.querySelector("#card-number");
11 |
12 | // URLS y ENDPOINTS
13 | const URL = "http://127.0.0.1:3002";
14 | const AUTH_ENDPOINT = "/getauth";
15 |
16 | // FUNCIÓN PARA ENVIAR EL REQUEST CON LOS DATOS CORRECTOS
17 | const sendData = async (endpoint, body) => {
18 | const res = await fetch(`${URL}${endpoint}`, {
19 | method: "POST",
20 | headers: {
21 | "Content-Type": "application/json",
22 | },
23 | body,
24 | });
25 |
26 | return await res.json();
27 | };
28 |
29 | // FUNCIÓN PARA ENVIAR LA INFORMACIÓN AL ENDPOINT
30 |
31 | sendButton.addEventListener("click", async () => {
32 | const body = JSON.stringify({
33 | customerId: customerIdPrefix.value + customerId.value,
34 | cardNumber: cardNumber.value
35 | })
36 |
37 | document.querySelector(".loader").classList.remove("hide");
38 | document.querySelector(".main-container").classList.add("hide");
39 |
40 | const res = await sendData(AUTH_ENDPOINT, body);
41 |
42 | document.querySelector(".loader").classList.add("hide");
43 | document.querySelector(".main-container").classList.remove("hide");
44 |
45 | displayResponse(res.request, res.response);
46 | });
47 |
48 | retry.addEventListener("click", displayBack);
49 |
--------------------------------------------------------------------------------
/tdd/modules/pay.js:
--------------------------------------------------------------------------------
1 | const crypto = require('./crypto');
2 | const config = require('../config');
3 |
4 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
5 | const body = {
6 | merchant_identify: {
7 | integratorId,
8 | merchantId,
9 | terminalId
10 | },
11 | client_identify: {
12 | ipaddress: '127.0.0.1',
13 | browser_agent: 'Chrome 18.1.3',
14 | mobile: {
15 | manufacturer: 'Samsung',
16 | }
17 | },
18 | transaction: {
19 | 'trx_type': 'compra',
20 | 'payment_method': 'tdd',
21 | 'card_number': data.cardNumber,
22 | 'customer_id': data.customerId,
23 | 'account_type': data.accountType,
24 | 'invoice_number': data.invoiceNumber,
25 | 'twofactor_auth': crypto.encrypt(data.twoFactorAuth, config.SECRETKEY),
26 | 'expiration_date': data.expirationDate,
27 | 'cvv': crypto.encrypt(data.cvv, config.SECRETKEY),
28 | 'currency': 'ves',
29 | 'amount': data.amount,
30 | }
31 | }
32 |
33 | console.log(body.transaction)
34 |
35 | const requestOptions = {
36 | method: "POST",
37 | headers: {
38 | 'Content-Type': 'application/json',
39 | 'X-IBM-Client-ID': clientId
40 | },
41 | body: JSON.stringify(body)
42 | }
43 |
44 |
45 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/payment/pay', requestOptions)
46 | return res.json();
47 | }
--------------------------------------------------------------------------------
/scp/public/js/main.js:
--------------------------------------------------------------------------------
1 | import { displayResponse, displayBack, displayForm } from "./interface.js";
2 |
3 | // BOTONES
4 | const sendButton = document.querySelector("#send-button");
5 | const retry = document.querySelector(".retry");
6 |
7 | //CAMPOS DE PAYMENT
8 | const customerIdPrefix = document.querySelector("#customerid-prefix");
9 | const customerId = document.querySelector("#customerid");
10 | const customerPhoneNumberPrefix = document.querySelector("#customer-phone-number-prefix");
11 | const customerPhoneNumber = document.querySelector("#customer-phone-number");
12 |
13 | // URLS y ENDPOINTS
14 | const URL = "http://127.0.0.1:3003";
15 | const PAY_ENDPOINT = "/scp";
16 |
17 | // FUNCIÓN PARA ENVIAR EL REQUEST CON LOS DATOS CORRECTOS
18 | const sendData = async (endpoint, body) => {
19 | const res = await fetch(`${URL}${endpoint}`, {
20 | method: "POST",
21 | headers: {
22 | "Content-Type": "application/json",
23 | },
24 | body,
25 | });
26 |
27 | return await res.json();
28 | };
29 |
30 | // FUNCIÓN PARA ENVIAR LA INFORMACIÓN AL ENDPOINT
31 |
32 | sendButton.addEventListener("click", async () => {
33 | const body = JSON.stringify({
34 | customerId: `${customerIdPrefix.value}${customerId.value}`,
35 | customerPhoneNumber: `58${customerPhoneNumberPrefix.value}${customerPhoneNumber.value}`
36 | });
37 |
38 | document.querySelector(".loader").classList.remove("hide");
39 | document.querySelector(".main-container").classList.add("hide");
40 |
41 | const res = await sendData(PAY_ENDPOINT, body);
42 |
43 | document.querySelector(".loader").classList.add("hide");
44 | document.querySelector(".main-container").classList.remove("hide");
45 |
46 | displayResponse(res.request, res.response);
47 | });
48 |
49 | retry.addEventListener("click", displayBack);
50 |
--------------------------------------------------------------------------------
/td-search/public/js/main.js:
--------------------------------------------------------------------------------
1 | import { displayResponse, displayBack, displayForm } from "./interface.js";
2 |
3 | // BOTONES
4 | const sendButton = document.querySelector("#send-button");
5 | const retry = document.querySelector(".retry");
6 |
7 | //CAMPOS DE PAYMENT
8 | const searchCriteria = document.querySelector("#search-criteria");
9 | const procesingDate = document.querySelector("#procesing-date");
10 | const paymentReference = document.querySelector("#payment-reference");
11 | const invoiceNumber = document.querySelector("#invoice-number");
12 |
13 | // URLS y ENDPOINTS
14 | const URL = "http://127.0.0.1:3003";
15 | const PAY_ENDPOINT = "/search";
16 |
17 | // FUNCIÓN PARA ENVIAR EL REQUEST CON LOS DATOS CORRECTOS
18 | const sendData = async (endpoint, body) => {
19 | const res = await fetch(`${URL}${endpoint}`, {
20 | method: "POST",
21 | headers: {
22 | "Content-Type": "application/json",
23 | },
24 | body,
25 | });
26 |
27 | return await res.json();
28 | };
29 |
30 | // FUNCIÓN PARA ENVIAR LA INFORMACIÓN AL ENDPOINT
31 |
32 | sendButton.addEventListener("click", async () => {
33 | const body = JSON.stringify({
34 | searchCriteria: searchCriteria.value,
35 | procesingDate: procesingDate.value.replaceAll("-", "/"),
36 | paymentReference: paymentReference.value,
37 | invoiceNumber: invoiceNumber.value
38 | });
39 |
40 | document.querySelector(".loader").classList.remove("hide");
41 | document.querySelector(".main-container").classList.add("hide");
42 |
43 | const res = await sendData(PAY_ENDPOINT, body);
44 |
45 | document.querySelector(".loader").classList.add("hide");
46 | document.querySelector(".main-container").classList.remove("hide");
47 |
48 | displayResponse(res.request, res.response);
49 | });
50 |
51 | retry.addEventListener("click", displayBack);
52 |
--------------------------------------------------------------------------------
/c2p/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/scp/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/tdc/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/tdd/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/getauth/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/search-c2p/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/td-search/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/tdc/public/js/main.js:
--------------------------------------------------------------------------------
1 | import { displayResponse, displayBack } from "./interface.js";
2 |
3 | // BOTONES
4 | const sendButton = document.querySelector("#send-button");
5 | const retry = document.querySelector(".retry");
6 |
7 | //CAMPOS DE PAYMENT
8 | const expirationDate = document.querySelector("#expiration-date");
9 | const customerIdPrefix = document.querySelector("#customerid-prefix");
10 | const customerId = document.querySelector("#customerid");
11 | const cardNumber = document.querySelector("#card-number");
12 | const amount = document.querySelector("#amount");
13 | const cvv = document.querySelector("#cvv");
14 | const invoiceNumber = document.querySelector("#invoice-number");
15 |
16 | // URLS y ENDPOINTS
17 | const URL = "http://127.0.0.1:3000";
18 | const PAY_ENDPOINT = "/pay";
19 |
20 | // FUNCIÓN PARA ENVIAR EL REQUEST CON LOS DATOS CORRECTOS
21 | const sendData = async (endpoint, body) => {
22 | const res = await fetch(`${URL}${endpoint}`, {
23 | method: "POST",
24 | headers: {
25 | "Content-Type": "application/json",
26 | },
27 | body,
28 | });
29 |
30 | return await res.json();
31 | };
32 |
33 | // FUNCIÓN PARA ENVIAR LA INFORMACIÓN AL ENDPOINT
34 |
35 | sendButton.addEventListener("click", async () => {
36 | const body = JSON.stringify({
37 | customerId: customerIdPrefix.value + customerId.value,
38 | cardNumber: cardNumber.value,
39 | expirationDate: expirationDate.value,
40 | amount: amount.value,
41 | cvv: cvv.value,
42 | invoiceNumber: invoiceNumber.value,
43 | })
44 |
45 | document.querySelector(".loader").classList.remove("hide");
46 | document.querySelector(".main-container").classList.add("hide");
47 |
48 | const res = await sendData(PAY_ENDPOINT, body);
49 |
50 | document.querySelector(".loader").classList.add("hide");
51 | document.querySelector(".main-container").classList.remove("hide");
52 |
53 | displayResponse(res.request, res.response);
54 | });
55 |
56 | retry.addEventListener("click", displayBack);
57 |
--------------------------------------------------------------------------------
/transfer-search/modules/crypto.js:
--------------------------------------------------------------------------------
1 | const Crypto = require('crypto');
2 |
3 | /*
4 | * ======================================
5 | * Funcion para cifrar los campos con AES
6 | * ======================================
7 | */
8 |
9 | const encrypt = (message, key) => {
10 | const algorythm = "aes-128-ecb";
11 | // Convertir la llave secreta en un hash SHA256
12 | const hash = Crypto.createHash('sha256')
13 | hash.update(key)
14 |
15 | // Obtener los primeros 16 bytes del hash
16 | const keyString = hash.copy().digest("hex")
17 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
18 | const keyHex = Buffer.from(firstHalf, 'hex');
19 |
20 | // Encriptacion del mensaje usando la clave nueva
21 | const cipher = Crypto.createCipheriv(algorythm, keyHex, null);
22 |
23 | let ciphertext = cipher.update(message, 'utf8', 'base64');
24 | ciphertext += cipher.final('base64');
25 |
26 | return ciphertext; // Valor devuelto en base64
27 | };
28 |
29 | /*
30 | * =========================================
31 | * Funcion para descifrar los campos con AES
32 | * =========================================
33 | */
34 |
35 | const decrypt = (message, key) => {
36 | const algorythm = "aes-128-ecb";
37 | // Convertir la llave secreta en un hash SHA256
38 | const hash = Crypto.createHash('sha256')
39 | hash.update(key)
40 |
41 | // Obtener los primeros 16 bytes del hash
42 | const keyString = hash.copy().digest("hex")
43 | const firstHalf = keyString.toString().slice(0, keyString.length / 2);
44 | const keyHex = Buffer.from(firstHalf, 'hex');
45 |
46 | // Encriptacion del mensaje usando la clave nueva
47 | const decipher = Crypto.createDecipheriv(algorythm, keyHex, null);
48 |
49 | let deciphertext = decipher.update(message, 'base64', 'utf8');
50 | deciphertext += decipher.final('utf8');
51 |
52 | return deciphertext; // Valor devuelto en utf8
53 | };
54 |
55 | module.exports = {
56 | encrypt, decrypt
57 | };
--------------------------------------------------------------------------------
/transfer-search/public/js/main.js:
--------------------------------------------------------------------------------
1 | import { displayResponse, displayBack } from "./interface.js";
2 |
3 | // BOTONES
4 | const sendButton = document.querySelector("#send-button");
5 | const retry = document.querySelector(".retry");
6 |
7 | //CAMPOS DE PAYMENT
8 | const accountNumber= document.querySelector("#account-number");
9 | const amount = document.querySelector("#amount");
10 | const paymentReference = document.querySelector("#payment-reference");
11 | const transactionDate = document.querySelector("#transaction-date");
12 | const customerIdPrefix = document.querySelector("#customerid-prefix");
13 | const customerId = document.querySelector("#customerid");
14 | const bankId = document.querySelector("#bank-id");
15 |
16 | // URLS y ENDPOINTS
17 | const URL = "http://127.0.0.1:3003";
18 |
19 | const PAY_ENDPOINT = "/search";
20 |
21 | // FUNCIÓN PARA ENVIAR EL REQUEST CON LOS DATOS CORRECTOS
22 | const sendData = async (endpoint, body) => {
23 | const res = await fetch(`${URL}${endpoint}`, {
24 | method: "POST",
25 | headers: {
26 | "Content-Type": "application/json",
27 | },
28 | body,
29 | });
30 |
31 | return await res.json();
32 | };
33 |
34 | // FUNCIÓN PARA ENVIAR LA INFORMACIÓN AL ENDPOINT
35 |
36 | sendButton.addEventListener("click", async () => {
37 | const body = JSON.stringify({
38 | accountNumber: accountNumber.value,
39 | customerId: customerIdPrefix.value + customerId.value,
40 | transactionDate: transactionDate.value,
41 | paymentReference: paymentReference.value,
42 | amount: amount.value,
43 | bankId: bankId.value
44 | });
45 |
46 | document.querySelector(".loader").classList.remove("hide");
47 | document.querySelector(".main-container").classList.add("hide");
48 |
49 | const res = await sendData(PAY_ENDPOINT, body);
50 |
51 | document.querySelector(".loader").classList.add("hide");
52 | document.querySelector(".main-container").classList.remove("hide");
53 |
54 | displayResponse(res.request, res.response);
55 | });
56 |
57 | retry.addEventListener("click", displayBack);
58 |
--------------------------------------------------------------------------------
/search-c2p/public/js/main.js:
--------------------------------------------------------------------------------
1 | import { displayResponse, displayBack, formDisplayHandler } from "./interface.js";
2 |
3 | // BOTONES
4 | const sendButton = document.querySelector("#send-button");
5 | const retry = document.querySelector(".retry");
6 |
7 | //CAMPOS DE PAYMENT
8 | const amount = document.querySelector("#amount");
9 | const customerIdPrefix = document.querySelector("#customerid-prefix");
10 | const customerId = document.querySelector("#customerid");
11 | const customerPhoneNumberPrefix = document.querySelector("#customer-phone-number-prefix");
12 | const customerPhoneNumber = document.querySelector("#customer-phone-number");
13 | const refNumber = document.querySelector("#payment-reference");
14 | const transactionDate = document.querySelector("#transaction-date");
15 | // URLS y ENDPOINTS
16 | const URL = "http://127.0.0.1:3000";
17 | const PAY_ENDPOINT = "/searchC2p";
18 |
19 | // FUNCIÓN PARA ENVIAR EL REQUEST CON LOS DATOS CORRECTOS
20 | const sendData = async (endpoint, body) => {
21 | const res = await fetch(`${URL}${endpoint}`, {
22 | method: "POST",
23 | headers: {
24 | "Content-Type": "application/json",
25 | },
26 | body,
27 | });
28 |
29 | return await res.json();
30 | };
31 |
32 | // FUNCIÓN PARA ENVIAR LA INFORMACIÓN AL ENDPOINT
33 |
34 | sendButton.addEventListener("click", async () => {
35 | const body = JSON.stringify({
36 | amount: amount.value,
37 | customerId: `${customerIdPrefix.value}${customerId.value}`,
38 | customerPhoneNumber: `58${customerPhoneNumberPrefix.value}${customerPhoneNumber.value}`,
39 | refNumber: refNumber.value,
40 | transactionDate: transactionDate.value
41 | });
42 |
43 | console.log(body)
44 |
45 | document.querySelector(".loader").classList.remove("hide");
46 | document.querySelector(".main-container").classList.add("hide");
47 |
48 | const res = await sendData(PAY_ENDPOINT, body);
49 |
50 | document.querySelector(".loader").classList.add("hide");
51 | document.querySelector(".main-container").classList.remove("hide");
52 |
53 | displayResponse(res.request, res.response);
54 | });
55 |
56 | retry.addEventListener("click", displayBack);
57 |
--------------------------------------------------------------------------------
/tdd/public/js/main.js:
--------------------------------------------------------------------------------
1 | import { displayResponse, displayBack, displayForm } from "./interface.js";
2 |
3 | // BOTONES
4 | const sendButton = document.querySelector("#send-button");
5 | const retry = document.querySelector(".retry");
6 |
7 | //CAMPOS DE PAYMENT
8 | const expirationDate = document.querySelector("#expiration-date");
9 | const customerIdPrefix = document.querySelector("#customerid-prefix");
10 | const customerId = document.querySelector("#customerid");
11 | const cardNumber = document.querySelector("#card-number");
12 | const amount = document.querySelector("#amount");
13 | const cvv = document.querySelector("#cvv");
14 | const invoiceNumber = document.querySelector("#invoice-number");
15 | const accountType = document.querySelector("#account-type");
16 | const twoFactor = document.querySelector("#twofactor");
17 |
18 | // URLS y ENDPOINTS
19 | const URL = "http://127.0.0.1:3001";
20 | const PAY_ENDPOINT = "/pay";
21 |
22 | // FUNCIÓN PARA ENVIAR EL REQUEST CON LOS DATOS CORRECTOS
23 | const sendData = async (endpoint, body) => {
24 | const res = await fetch(`${URL}${endpoint}`, {
25 | method: "POST",
26 | headers: {
27 | "Content-Type": "application/json",
28 | },
29 | body,
30 | });
31 |
32 | return await res.json();
33 | };
34 |
35 | // FUNCIÓN PARA ENVIAR LA INFORMACIÓN AL ENDPOINT
36 |
37 | sendButton.addEventListener("click", async () => {
38 | const body = JSON.stringify({
39 | customerId: customerIdPrefix.value + customerId.value,
40 | cardNumber: cardNumber.value,
41 | expirationDate: expirationDate.value,
42 | amount: amount.value,
43 | cvv: cvv.value,
44 | invoiceNumber: invoiceNumber.value,
45 | accountType: accountType.value,
46 | twoFactorAuth: twoFactor.value
47 | })
48 |
49 | document.querySelector(".loader").classList.remove("hide");
50 | document.querySelector(".main-container").classList.add("hide");
51 |
52 | const res = await sendData(PAY_ENDPOINT, body);
53 |
54 | document.querySelector(".loader").classList.add("hide");
55 | document.querySelector(".main-container").classList.remove("hide");
56 |
57 | displayResponse(res.request, res.response);
58 | });
59 |
60 | retry.addEventListener("click", displayBack);
61 |
--------------------------------------------------------------------------------
/c2p/modules/c2p.js:
--------------------------------------------------------------------------------
1 | const config = require("../config");
2 | const crypto = require("./crypto");
3 |
4 | module.exports = async (data, merchantId, integratorId, terminalId, clientId) => {
5 | console.log(data);
6 |
7 | const body = {
8 | merchant_identify: {
9 | integratorId,
10 | merchantId,
11 | terminalId
12 | },
13 | client_identify: {
14 | ipaddress: '127.0.0.1',
15 | browser_agent: 'Chrome 18.1.3',
16 | mobile: {
17 | manufacturer: 'Samsung',
18 | }
19 | },
20 | transaction_c2p: {
21 | amount: data.amount, // Monto de la transacción.
22 | currency: 'ves', // Moneda utilizada en la transacción.
23 | destination_bank_id: 105, // ID del banco destinatario.
24 | destination_id: crypto.encrypt(data.customerId, config.SECRETKEY), // Documento de identidad del destinatario.
25 | destination_mobile_number: crypto.encrypt(data.customerPhoneNumber, config.SECRETKEY), // Número telefónico del destinatario.
26 | origin_mobile_number: crypto.encrypt(config.PHONE_NUMBER, config.SECRETKEY), // Número telefónico del remitente.
27 | payment_reference: data.trxType == "anulacion" ? data.refNumber : "", // Referencia de la transacción(Solo para anulación).
28 | trx_type: data.trxType, // Tipo de transacción(compra / anulacion / vuelto).
29 | payment_method: data.trxType == 'vuelto' ? "p2p" : "c2p", // Método de pago(P2P / C2P).
30 | invoice_number: data.invoiceNumber, // Número de factura(Generado aleatoriamente para el ejemplo).
31 | twofactor_auth: data.trxType == 'compra' ? crypto.encrypt(data.twofactor, config.SECRETKEY) : '' // Clave de pago(Solo para compra / 00001111 para fines del ejemplo).
32 | }
33 | }
34 |
35 | console.log(body);
36 |
37 | const requestOptions = {
38 | method: "POST",
39 | headers: {
40 | 'Content-Type': 'application/json',
41 | 'X-IBM-Client-ID': clientId
42 | },
43 | body: JSON.stringify(body)
44 | }
45 |
46 |
47 | const res = await fetch('https://apimbu.mercantilbanco.com/mercantil-banco/sandbox/v1/payment/c2p', requestOptions)
48 | return res.json();
49 | }
--------------------------------------------------------------------------------
/c2p/index.js:
--------------------------------------------------------------------------------
1 | const colors = require("colors");
2 | const bodyParser = require("body-parser");
3 | const config = require("./config.js");
4 |
5 | const express = require("express");
6 | const c2p = require('./modules/c2p.js');
7 | const app = express();
8 |
9 | app.use(bodyParser.json());
10 |
11 | app.use(express.static(__dirname + "/public"));
12 | app.set("view engine", "ejs");
13 |
14 | /*
15 | * ===========================
16 | * ENDPOINT PARA ENTRAR AL APP
17 | * ===========================
18 | */
19 |
20 | app.get("/", (req, res) => {
21 | res.render("index");
22 | });
23 |
24 | /*
25 | * ===========================
26 | * ENDPOINT PARA REALIZAR PAGO
27 | * ===========================
28 | */
29 |
30 | app.post("/c2p", async (req, res) => {
31 | try {
32 | const response = await c2p(
33 | req.body,
34 | config.MERCHANTID,
35 | config.INTEGRATORID,
36 | config.TERMINALID,
37 | config.CLIENTID
38 | );
39 |
40 | const request = {
41 | merchantIdentify: response.merchantIdentify,
42 | clientIdentify: {
43 | ipAddress: "127.0.0.1",
44 | browserAgent: "",
45 | mobile: {
46 | manufacturer: "Samsung",
47 | model: "",
48 | osVersion: "",
49 | },
50 | },
51 | };
52 |
53 | res.json({
54 | request: { ...request, ...req.body },
55 | response: response,
56 | });
57 | } catch(e) {
58 | console.error(e);
59 | }
60 |
61 | });
62 |
63 | app.listen(config.PORT, config.HOST, () => {
64 | const errors = [];
65 | Object.keys(config).forEach((key) => {
66 | if (!config[key] || config[key] === "" || config[key] === 0)
67 | errors.push(key);
68 | });
69 | if (errors.length > 0)
70 | console.warn(
71 | `[WARN] No se encuentran las siguientes variables de entorno: ${errors.join(
72 | ", "
73 | )}. Es muy probable que no pueda continuar con la ejecución`.yellow
74 | );
75 |
76 | console.log(`Aplicación de ejemplo escuchando el puerto: ${config.PORT}`);
77 |
78 | console.log(
79 | `Asegurate de haber creado el archivo .env y configurar las variables de entorno para la ejecución del ejemplo. `
80 | );
81 | console.log(
82 | `Por favor ingresa al siguiente enlace para poder utilizar el ejemplo: http://${config.HOST}:${config.PORT}`
83 | );
84 | });
85 |
--------------------------------------------------------------------------------
/tdc/index.js:
--------------------------------------------------------------------------------
1 | const pay = require('./modules/pay.js')
2 |
3 | const colors = require("colors");
4 | const bodyParser = require("body-parser");
5 | const config = require("./config.js");
6 |
7 | const express = require("express");
8 | const app = express();
9 |
10 | app.use(bodyParser.json());
11 |
12 | app.use(express.static(__dirname + "/public"));
13 | app.set("view engine", "ejs");
14 |
15 | /*
16 | * ===========================
17 | * ENDPOINT PARA ENTRAR AL APP
18 | * ===========================
19 | */
20 |
21 | app.get("/", (req, res) => {
22 | res.render("index");
23 | });
24 |
25 | /*
26 | * ===========================
27 | * ENDPOINT PARA REALIZAR PAGO
28 | * ===========================
29 | */
30 |
31 | app.post("/pay", async (req, res) => {
32 | try {
33 | const response = await pay(
34 | req.body,
35 | config.MERCHANTID,
36 | config.INTEGRATORID,
37 | config.TERMINALID,
38 | config.CLIENTID
39 | );
40 |
41 | const request = {
42 | merchantIdentify: response.merchantIdentify,
43 | clientIdentify: {
44 | ipAddress: "127.0.0.1",
45 | browserAgent: "",
46 | mobile: {
47 | manufacturer: "Samsung",
48 | model: "",
49 | osVersion: "",
50 | },
51 | },
52 | };
53 |
54 | res.json({
55 | request: { ...request, ...req.body },
56 | response: response,
57 | });
58 | } catch(e) {
59 | console.error(e);
60 | }
61 |
62 | });
63 |
64 | app.listen(config.PORT, config.HOST, () => {
65 | const errors = [];
66 | Object.keys(config).forEach((key) => {
67 | if (!config[key] || config[key] === "" || config[key] === 0)
68 | errors.push(key);
69 | });
70 | if (errors.length > 0)
71 | console.warn(
72 | `[WARN] No se encuentran las siguientes variables de entorno: ${errors.join(
73 | ", "
74 | )}. Es muy probable que no pueda continuar con la ejecución`.yellow
75 | );
76 |
77 | console.log(`Aplicación de ejemplo escuchando el puerto: ${config.PORT}`);
78 |
79 | console.log(
80 | `Asegurate de haber creado el archivo .env y configurar las variables de entorno para la ejecución del ejemplo. `
81 | );
82 | console.log(
83 | `Por favor ingresa al siguiente enlace para poder utilizar el ejemplo: http://${config.HOST}:${config.PORT}`
84 | );
85 | });
86 |
--------------------------------------------------------------------------------
/tdd/index.js:
--------------------------------------------------------------------------------
1 | const pay = require('./modules/pay.js')
2 |
3 | const colors = require("colors");
4 | const bodyParser = require("body-parser");
5 | const config = require("./config.js");
6 |
7 | const express = require("express");
8 | const app = express();
9 |
10 | app.use(bodyParser.json());
11 |
12 | app.use(express.static(__dirname + "/public"));
13 | app.set("view engine", "ejs");
14 |
15 | /*
16 | * ===========================
17 | * ENDPOINT PARA ENTRAR AL APP
18 | * ===========================
19 | */
20 |
21 | app.get("/", (req, res) => {
22 | res.render("index");
23 | });
24 |
25 | /*
26 | * ===========================
27 | * ENDPOINT PARA REALIZAR PAGO
28 | * ===========================
29 | */
30 |
31 | app.post("/pay", async (req, res) => {
32 | try {
33 | const response = await pay(
34 | req.body,
35 | config.MERCHANTID,
36 | config.INTEGRATORID,
37 | config.TERMINALID,
38 | config.CLIENTID
39 | );
40 |
41 | const request = {
42 | merchantIdentify: response.merchantIdentify,
43 | clientIdentify: {
44 | ipAddress: "127.0.0.1",
45 | browserAgent: "",
46 | mobile: {
47 | manufacturer: "Samsung",
48 | model: "",
49 | osVersion: "",
50 | },
51 | },
52 | };
53 |
54 | res.json({
55 | request: { ...request, ...req.body },
56 | response: response,
57 | });
58 | } catch(e) {
59 | console.error(e);
60 | }
61 |
62 | });
63 |
64 | app.listen(config.PORT, config.HOST, () => {
65 | const errors = [];
66 | Object.keys(config).forEach((key) => {
67 | if (!config[key] || config[key] === "" || config[key] === 0)
68 | errors.push(key);
69 | });
70 | if (errors.length > 0)
71 | console.warn(
72 | `[WARN] No se encuentran las siguientes variables de entorno: ${errors.join(
73 | ", "
74 | )}. Es muy probable que no pueda continuar con la ejecución`.yellow
75 | );
76 |
77 | console.log(`Aplicación de ejemplo escuchando el puerto: ${config.PORT}`);
78 |
79 | console.log(
80 | `Asegurate de haber creado el archivo .env y configurar las variables de entorno para la ejecución del ejemplo. `
81 | );
82 | console.log(
83 | `Por favor ingresa al siguiente enlace para poder utilizar el ejemplo: http://${config.HOST}:${config.PORT}`
84 | );
85 | });
86 |
--------------------------------------------------------------------------------
/getauth/views/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
`;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | /*
59 | * =========================================
60 | * Funcion para cambiar de formulario activo
61 | * =========================================
62 | */
63 |
64 | const displayForm = () => {
65 | document.querySelector('form').classList.add('hide');
66 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
67 | document.querySelector(".next").classList.add('hide');
68 | document.querySelector('.transaction-response').classList.add('hide');
69 | document.querySelector('.json-container').classList.add('hide');
70 | document.querySelector("button").classList.remove("hide");
71 | };
72 |
73 | /*
74 | * ==============================================
75 | * Funcion para mostrar nuevamente el formmulario
76 | * ==============================================
77 | */
78 |
79 | function displayBack() {
80 | document.querySelector(".json-container").classList.add("hide");
81 | document.querySelector(".loader").classList.add("hide");
82 | document.querySelector(".transaction-response").classList.add("hide");
83 | document.querySelector('form').classList.remove('hide');
84 | document.querySelector("button").classList.remove("hide");
85 | }
86 |
87 | function displayResponse(rq, rs) {
88 | document.querySelector(".transaction-response").classList.remove("hide");
89 | document.querySelector("form").classList.add("hide");
90 | document.querySelector("button").classList.add("hide");
91 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
92 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
93 | document.querySelector(".transaction-response h2").classList.add('error');
94 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
95 | }
96 | else {
97 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
98 | document.querySelector(".transaction-response h2").classList.remove('error')
99 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
100 | }
101 | displayJsonInfo(rq, rs);
102 | }
103 |
104 | export { displayBack, displayJsonInfo, displayResponse, displayForm };
--------------------------------------------------------------------------------
/tdc/public/js/interface.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ======================================
3 | * Funcion para mostrar el response y request
4 | * ======================================
5 | */
6 |
7 | function renderSpaces(amount) {
8 | let string = '';
9 | for(let i = 0; i < amount; i++) {
10 | string += ' ';
11 | }
12 | return string;
13 | }
14 |
15 | function renderObject(object, spaces, element) {
16 | element.innerHTML += `{\n`;
17 | Object.keys(object).forEach( (key, index) => {
18 | element.innerHTML += `${renderSpaces(spaces)}${key}: `;
19 | if(typeof object[key] == "object") {
20 | spaces += 2
21 | renderObject(object[key], spaces, element)
22 | spaces -= 2
23 | element.innerHTML += `${renderSpaces(spaces)}}`;
24 | } else {
25 | element.innerHTML += `${typeof object[key] == "string" ? `"${object[key]}"` : object[key]} index) element.innerHTML += `,`;
28 | element.innerHTML += `\n`;
29 | });
30 | }
31 |
32 | /*
33 | * ============================================
34 | * Funcion para mostrar la información del JSON
35 | * ============================================
36 | */
37 |
38 | function displayJsonInfo(rq, rs) {
39 |
40 | document.querySelector('.response div').innerHTML = ``;
41 | document.querySelector('.request div').innerHTML = ``;
42 | document.querySelector(".json-container").classList.remove("hide");
43 |
44 |
45 | document.querySelector(".request div").innerHTML += ``;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | /*
59 | * =========================================
60 | * Funcion para cambiar de formulario activo
61 | * =========================================
62 | */
63 |
64 | const displayForm = () => {
65 | document.querySelector('form').classList.add('hide');
66 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
67 | document.querySelector(".next").classList.add('hide');
68 | document.querySelector('.transaction-response').classList.add('hide');
69 | document.querySelector('.json-container').classList.add('hide');
70 | document.querySelector("button").classList.remove("hide");
71 | };
72 |
73 | /*
74 | * ==============================================
75 | * Funcion para mostrar nuevamente el formmulario
76 | * ==============================================
77 | */
78 |
79 | function displayBack() {
80 | document.querySelector(".json-container").classList.add("hide");
81 | document.querySelector(".loader").classList.add("hide");
82 | document.querySelector(".transaction-response").classList.add("hide");
83 | document.querySelector('form').classList.remove('hide');
84 | document.querySelector("button").classList.remove("hide");
85 | }
86 |
87 | function displayResponse(rq, rs) {
88 | document.querySelector(".transaction-response").classList.remove("hide");
89 | document.querySelector("form").classList.add("hide");
90 | document.querySelector("button").classList.add("hide");
91 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
92 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
93 | document.querySelector(".transaction-response h2").classList.add('error');
94 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
95 | }
96 | else {
97 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
98 | document.querySelector(".transaction-response h2").classList.remove('error')
99 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
100 | }
101 | displayJsonInfo(rq, rs);
102 | }
103 |
104 | export { displayBack, displayJsonInfo, displayResponse, displayForm };
--------------------------------------------------------------------------------
/tdd/public/js/interface.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ======================================
3 | * Funcion para mostrar el response y request
4 | * ======================================
5 | */
6 |
7 | function renderSpaces(amount) {
8 | let string = '';
9 | for(let i = 0; i < amount; i++) {
10 | string += ' ';
11 | }
12 | return string;
13 | }
14 |
15 | function renderObject(object, spaces, element) {
16 | element.innerHTML += `{\n`;
17 | Object.keys(object).forEach( (key, index) => {
18 | element.innerHTML += `${renderSpaces(spaces)}${key}: `;
19 | if(typeof object[key] == "object") {
20 | spaces += 2
21 | renderObject(object[key], spaces, element)
22 | spaces -= 2
23 | element.innerHTML += `${renderSpaces(spaces)}}`;
24 | } else {
25 | element.innerHTML += `${typeof object[key] == "string" ? `"${object[key]}"` : object[key]} index) element.innerHTML += `,`;
28 | element.innerHTML += `\n`;
29 | });
30 | }
31 |
32 | /*
33 | * ============================================
34 | * Funcion para mostrar la información del JSON
35 | * ============================================
36 | */
37 |
38 | function displayJsonInfo(rq, rs) {
39 |
40 | document.querySelector('.response div').innerHTML = ``;
41 | document.querySelector('.request div').innerHTML = ``;
42 | document.querySelector(".json-container").classList.remove("hide");
43 |
44 |
45 | document.querySelector(".request div").innerHTML += ``;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | /*
59 | * =========================================
60 | * Funcion para cambiar de formulario activo
61 | * =========================================
62 | */
63 |
64 | const displayForm = () => {
65 | document.querySelector('form').classList.add('hide');
66 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
67 | document.querySelector(".next").classList.add('hide');
68 | document.querySelector('.transaction-response').classList.add('hide');
69 | document.querySelector('.json-container').classList.add('hide');
70 | document.querySelector("button").classList.remove("hide");
71 | };
72 |
73 | /*
74 | * ==============================================
75 | * Funcion para mostrar nuevamente el formmulario
76 | * ==============================================
77 | */
78 |
79 | function displayBack() {
80 | document.querySelector(".json-container").classList.add("hide");
81 | document.querySelector(".loader").classList.add("hide");
82 | document.querySelector(".transaction-response").classList.add("hide");
83 | document.querySelector('form').classList.remove('hide');
84 | document.querySelector("button").classList.remove("hide");
85 | }
86 |
87 | function displayResponse(rq, rs) {
88 | document.querySelector(".transaction-response").classList.remove("hide");
89 | document.querySelector("form").classList.add("hide");
90 | document.querySelector("button").classList.add("hide");
91 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
92 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
93 | document.querySelector(".transaction-response h2").classList.add('error');
94 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
95 | }
96 | else {
97 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
98 | document.querySelector(".transaction-response h2").classList.remove('error')
99 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
100 | }
101 | displayJsonInfo(rq, rs);
102 | }
103 |
104 | export { displayBack, displayJsonInfo, displayResponse, displayForm };
--------------------------------------------------------------------------------
/getauth/public/js/interface.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ======================================
3 | * Funcion para mostrar el response y request
4 | * ======================================
5 | */
6 |
7 | function renderSpaces(amount) {
8 | let string = '';
9 | for(let i = 0; i < amount; i++) {
10 | string += ' ';
11 | }
12 | return string;
13 | }
14 |
15 | function renderObject(object, spaces, element) {
16 | element.innerHTML += `{\n`;
17 | Object.keys(object).forEach( (key, index) => {
18 | element.innerHTML += `${renderSpaces(spaces)}${key}: `;
19 | if(typeof object[key] == "object") {
20 | spaces += 2
21 | renderObject(object[key], spaces, element)
22 | spaces -= 2
23 | element.innerHTML += `${renderSpaces(spaces)}}`;
24 | } else {
25 | element.innerHTML += `${typeof object[key] == "string" ? `"${object[key]}"` : object[key]} index) element.innerHTML += `,`;
28 | element.innerHTML += `\n`;
29 | });
30 | }
31 |
32 | /*
33 | * ============================================
34 | * Funcion para mostrar la información del JSON
35 | * ============================================
36 | */
37 |
38 | function displayJsonInfo(rq, rs) {
39 |
40 | document.querySelector('.response div').innerHTML = ``;
41 | document.querySelector('.request div').innerHTML = ``;
42 | document.querySelector(".json-container").classList.remove("hide");
43 |
44 |
45 | document.querySelector(".request div").innerHTML += ``;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | /*
59 | * =========================================
60 | * Funcion para cambiar de formulario activo
61 | * =========================================
62 | */
63 |
64 | const displayForm = () => {
65 | document.querySelector('form').classList.add('hide');
66 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
67 | document.querySelector(".next").classList.add('hide');
68 | document.querySelector('.transaction-response').classList.add('hide');
69 | document.querySelector('.json-container').classList.add('hide');
70 | document.querySelector("button").classList.remove("hide");
71 | };
72 |
73 | /*
74 | * ==============================================
75 | * Funcion para mostrar nuevamente el formmulario
76 | * ==============================================
77 | */
78 |
79 | function displayBack() {
80 | document.querySelector(".json-container").classList.add("hide");
81 | document.querySelector(".loader").classList.add("hide");
82 | document.querySelector(".transaction-response").classList.add("hide");
83 | document.querySelector('form').classList.remove('hide');
84 | document.querySelector("button").classList.remove("hide");
85 | }
86 |
87 | function displayResponse(rq, rs) {
88 | document.querySelector(".transaction-response").classList.remove("hide");
89 | document.querySelector("form").classList.add("hide");
90 | document.querySelector("button").classList.add("hide");
91 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
92 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
93 | document.querySelector(".transaction-response h2").classList.add('error');
94 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
95 | }
96 | else {
97 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
98 | document.querySelector(".transaction-response h2").classList.remove('error')
99 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
100 | }
101 | displayJsonInfo(rq, rs);
102 | }
103 |
104 | export { displayBack, displayJsonInfo, displayResponse, displayForm };
--------------------------------------------------------------------------------
/td-search/public/js/interface.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ======================================
3 | * Funcion para mostrar el response y request
4 | * ======================================
5 | */
6 |
7 | function renderSpaces(amount) {
8 | let string = '';
9 | for(let i = 0; i < amount; i++) {
10 | string += ' ';
11 | }
12 | return string;
13 | }
14 |
15 | function renderObject(object, spaces, element) {
16 | element.innerHTML += `{\n`;
17 | Object.keys(object).forEach( (key, index) => {
18 | element.innerHTML += `${renderSpaces(spaces)}${key}: `;
19 | if(typeof object[key] == "object") {
20 | spaces += 2
21 | renderObject(object[key], spaces, element)
22 | spaces -= 2
23 | element.innerHTML += `${renderSpaces(spaces)}}`;
24 | } else {
25 | element.innerHTML += `${typeof object[key] == "string" ? `"${object[key]}"` : object[key]} index) element.innerHTML += `,`;
28 | element.innerHTML += `\n`;
29 | });
30 | }
31 |
32 | /*
33 | * ============================================
34 | * Funcion para mostrar la información del JSON
35 | * ============================================
36 | */
37 |
38 | function displayJsonInfo(rq, rs) {
39 |
40 | document.querySelector('.response div').innerHTML = ``;
41 | document.querySelector('.request div').innerHTML = ``;
42 | document.querySelector(".json-container").classList.remove("hide");
43 |
44 |
45 | document.querySelector(".request div").innerHTML += ``;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | /*
59 | * =========================================
60 | * Funcion para cambiar de formulario activo
61 | * =========================================
62 | */
63 |
64 | const displayForm = () => {
65 | document.querySelector('form').classList.add('hide');
66 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
67 | document.querySelector(".next").classList.add('hide');
68 | document.querySelector('.transaction-response').classList.add('hide');
69 | document.querySelector('.json-container').classList.add('hide');
70 | document.querySelector("button").classList.remove("hide");
71 | };
72 |
73 | /*
74 | * ==============================================
75 | * Funcion para mostrar nuevamente el formmulario
76 | * ==============================================
77 | */
78 |
79 | function displayBack() {
80 | document.querySelector(".json-container").classList.add("hide");
81 | document.querySelector(".loader").classList.add("hide");
82 | document.querySelector(".transaction-response").classList.add("hide");
83 | document.querySelector('form').classList.remove('hide');
84 | document.querySelector("button").classList.remove("hide");
85 | }
86 |
87 | function displayResponse(rq, rs) {
88 | document.querySelector(".transaction-response").classList.remove("hide");
89 | document.querySelector("form").classList.add("hide");
90 | document.querySelector("button").classList.add("hide");
91 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
92 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
93 | document.querySelector(".transaction-response h2").classList.add('error');
94 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
95 | }
96 | else {
97 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
98 | document.querySelector(".transaction-response h2").classList.remove('error')
99 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
100 | }
101 | displayJsonInfo(rq, rs);
102 | }
103 |
104 | export { displayBack, displayJsonInfo, displayResponse, displayForm };
--------------------------------------------------------------------------------
/transfer-search/public/js/interface.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ======================================
3 | * Funcion para mostrar el response y request
4 | * ======================================
5 | */
6 |
7 | function renderSpaces(amount) {
8 | let string = '';
9 | for(let i = 0; i < amount; i++) {
10 | string += ' ';
11 | }
12 | return string;
13 | }
14 |
15 | function renderObject(object, spaces, element) {
16 | element.innerHTML += `{\n`;
17 | Object.keys(object).forEach( (key, index) => {
18 | element.innerHTML += `${renderSpaces(spaces)}${key}: `;
19 | if(typeof object[key] == "object") {
20 | spaces += 2
21 | renderObject(object[key], spaces, element)
22 | spaces -= 2
23 | element.innerHTML += `${renderSpaces(spaces)}}`;
24 | } else {
25 | element.innerHTML += `${typeof object[key] == "string" ? `"${object[key]}"` : object[key]} index) element.innerHTML += `,`;
28 | element.innerHTML += `\n`;
29 | });
30 | }
31 |
32 | /*
33 | * ============================================
34 | * Funcion para mostrar la información del JSON
35 | * ============================================
36 | */
37 |
38 | function displayJsonInfo(rq, rs) {
39 |
40 | document.querySelector('.response div').innerHTML = ``;
41 | document.querySelector('.request div').innerHTML = ``;
42 | document.querySelector(".json-container").classList.remove("hide");
43 |
44 |
45 | document.querySelector(".request div").innerHTML += ``;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | /*
59 | * =========================================
60 | * Funcion para cambiar de formulario activo
61 | * =========================================
62 | */
63 |
64 | const displayForm = () => {
65 | document.querySelector('form').classList.add('hide');
66 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
67 | document.querySelector(".next").classList.add('hide');
68 | document.querySelector('.transaction-response').classList.add('hide');
69 | document.querySelector('.json-container').classList.add('hide');
70 | document.querySelector("button").classList.remove("hide");
71 | };
72 |
73 | /*
74 | * ==============================================
75 | * Funcion para mostrar nuevamente el formmulario
76 | * ==============================================
77 | */
78 |
79 | function displayBack() {
80 | document.querySelector(".json-container").classList.add("hide");
81 | document.querySelector(".loader").classList.add("hide");
82 | document.querySelector(".transaction-response").classList.add("hide");
83 | document.querySelector('form').classList.remove('hide');
84 | document.querySelector("button").classList.remove("hide");
85 | }
86 |
87 | function displayResponse(rq, rs) {
88 | document.querySelector(".transaction-response").classList.remove("hide");
89 | document.querySelector("form").classList.add("hide");
90 | document.querySelector("button").classList.add("hide");
91 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
92 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
93 | document.querySelector(".transaction-response h2").classList.add('error');
94 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
95 | }
96 | else {
97 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
98 | document.querySelector(".transaction-response h2").classList.remove('error')
99 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
100 | }
101 | displayJsonInfo(rq, rs);
102 | }
103 |
104 | export { displayBack, displayJsonInfo, displayResponse, displayForm };
--------------------------------------------------------------------------------
/c2p/public/js/interface.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ======================================
3 | * Funcion para mostrar el response y request
4 | * ======================================
5 | */
6 |
7 | function renderSpaces(amount) {
8 | let string = '';
9 | for(let i = 0; i < amount; i++) {
10 | string += ' ';
11 | }
12 | return string;
13 | }
14 |
15 | function renderObject(object, spaces, element) {
16 | element.innerHTML += `{\n`;
17 | Object.keys(object).forEach( (key, index) => {
18 | element.innerHTML += `${renderSpaces(spaces)}${key}: `;
19 | if(typeof object[key] == "object") {
20 | spaces += 2
21 | renderObject(object[key], spaces, element)
22 | spaces -= 2
23 | element.innerHTML += `${renderSpaces(spaces)}}`;
24 | } else {
25 | element.innerHTML += `${typeof object[key] == "string" ? `"${object[key]}"` : object[key]} index) element.innerHTML += `,`;
28 | element.innerHTML += `\n`;
29 | });
30 | }
31 |
32 | /*
33 | * ============================================
34 | * Funcion para mostrar la información del JSON
35 | * ============================================
36 | */
37 |
38 | function displayJsonInfo(rq, rs) {
39 |
40 | document.querySelector('.response div').innerHTML = ``;
41 | document.querySelector('.request div').innerHTML = ``;
42 | document.querySelector(".json-container").classList.remove("hide");
43 |
44 |
45 | document.querySelector(".request div").innerHTML += ``;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | function formDisplayHandler(e) {
59 | if(e.target.value == "anulacion") {
60 | document.querySelector(".payment-reference").classList.remove("hide");
61 | document.querySelector(".twofactor").classList.add("hide");
62 | }
63 | else if(e.target.value == "compra") {
64 | document.querySelector(".twofactor").classList.remove("hide");
65 | document.querySelector(".payment-reference").classList.add("hide");
66 | }
67 | else {
68 | document.querySelector(".payment-reference").classList.add("hide");
69 | document.querySelector(".twofactor").classList.add("hide");
70 | }
71 | }
72 |
73 | /*
74 | * =========================================
75 | * Funcion para cambiar de formulario activo
76 | * =========================================
77 | */
78 |
79 | const displayForm = () => {
80 | document.querySelector('form').classList.add('hide');
81 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
82 | document.querySelector(".next").classList.add('hide');
83 | document.querySelector('.transaction-response').classList.add('hide');
84 | document.querySelector('.json-container').classList.add('hide');
85 | document.querySelector("button").classList.remove("hide");
86 | };
87 |
88 | /*
89 | * ==============================================
90 | * Funcion para mostrar nuevamente el formmulario
91 | * ==============================================
92 | */
93 |
94 | function displayBack() {
95 | document.querySelector(".json-container").classList.add("hide");
96 | document.querySelector(".loader").classList.add("hide");
97 | document.querySelector(".transaction-response").classList.add("hide");
98 | document.querySelector('form').classList.remove('hide');
99 | document.querySelector("button").classList.remove("hide");
100 | }
101 |
102 | function displayResponse(rq, rs) {
103 | document.querySelector(".transaction-response").classList.remove("hide");
104 | document.querySelector("form").classList.add("hide");
105 | document.querySelector("button").classList.add("hide");
106 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
107 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
108 | document.querySelector(".transaction-response h2").classList.add('error');
109 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
110 | }
111 | else {
112 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
113 | document.querySelector(".transaction-response h2").classList.remove('error')
114 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
115 | }
116 | displayJsonInfo(rq, rs);
117 | }
118 |
119 | export { displayBack, displayJsonInfo, displayResponse, displayForm, formDisplayHandler };
--------------------------------------------------------------------------------
/search-c2p/public/js/interface.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ======================================
3 | * Funcion para mostrar el response y request
4 | * ======================================
5 | */
6 |
7 | function renderSpaces(amount) {
8 | let string = '';
9 | for(let i = 0; i < amount; i++) {
10 | string += ' ';
11 | }
12 | return string;
13 | }
14 |
15 | function renderObject(object, spaces, element) {
16 | element.innerHTML += `{\n`;
17 | Object.keys(object).forEach( (key, index) => {
18 | element.innerHTML += `${renderSpaces(spaces)}${key}: `;
19 | if(typeof object[key] == "object") {
20 | spaces += 2
21 | renderObject(object[key], spaces, element)
22 | spaces -= 2
23 | element.innerHTML += `${renderSpaces(spaces)}}`;
24 | } else {
25 | element.innerHTML += `${typeof object[key] == "string" ? `"${object[key]}"` : object[key]} index) element.innerHTML += `,`;
28 | element.innerHTML += `\n`;
29 | });
30 | }
31 |
32 | /*
33 | * ============================================
34 | * Funcion para mostrar la información del JSON
35 | * ============================================
36 | */
37 |
38 | function displayJsonInfo(rq, rs) {
39 |
40 | document.querySelector('.response div').innerHTML = ``;
41 | document.querySelector('.request div').innerHTML = ``;
42 | document.querySelector(".json-container").classList.remove("hide");
43 |
44 |
45 | document.querySelector(".request div").innerHTML += ``;
46 | const rqElem = document.querySelector(".request div pre");
47 | renderObject(rq, 2, rqElem);
48 | document.querySelector('.request div pre').innerHTML += `}`;
49 |
50 |
51 |
52 | document.querySelector('.response div').innerHTML += ``;
53 | const rsElem = document.querySelector(".response div pre");
54 | renderObject(rs, 2, rsElem);
55 | document.querySelector('.response div pre').innerHTML += `}`;
56 | }
57 |
58 | function formDisplayHandler(e) {
59 | if(e.target.value == "anulacion") {
60 | document.querySelector(".payment-reference").classList.remove("hide");
61 | document.querySelector(".twofactor").classList.add("hide");
62 | }
63 | else if(e.target.value == "compra") {
64 | document.querySelector(".twofactor").classList.remove("hide");
65 | document.querySelector(".payment-reference").classList.add("hide");
66 | }
67 | else {
68 | document.querySelector(".payment-reference").classList.add("hide");
69 | document.querySelector(".twofactor").classList.add("hide");
70 | }
71 | }
72 |
73 | /*
74 | * =========================================
75 | * Funcion para cambiar de formulario activo
76 | * =========================================
77 | */
78 |
79 | const displayForm = () => {
80 | document.querySelector('form').classList.add('hide');
81 | document.querySelector('.payment-title').innerText = 'Crear agendamiento';
82 | document.querySelector(".next").classList.add('hide');
83 | document.querySelector('.transaction-response').classList.add('hide');
84 | document.querySelector('.json-container').classList.add('hide');
85 | document.querySelector("button").classList.remove("hide");
86 | };
87 |
88 | /*
89 | * ==============================================
90 | * Funcion para mostrar nuevamente el formmulario
91 | * ==============================================
92 | */
93 |
94 | function displayBack() {
95 | document.querySelector(".json-container").classList.add("hide");
96 | document.querySelector(".loader").classList.add("hide");
97 | document.querySelector(".transaction-response").classList.add("hide");
98 | document.querySelector('form').classList.remove('hide');
99 | document.querySelector("button").classList.remove("hide");
100 | }
101 |
102 | function displayResponse(rq, rs) {
103 | document.querySelector(".transaction-response").classList.remove("hide");
104 | document.querySelector("form").classList.add("hide");
105 | document.querySelector("button").classList.add("hide");
106 | if(rs.hasOwnProperty("errorList") || rs.hasOwnProperty("error_list") || rs.hasOwnProperty("code") || rs.hasOwnProperty("httpCode") || rs.hasOwnProperty("http_code")) {
107 | document.querySelector(".transaction-response h2").innerText = "Error al procesar la solicitud";
108 | document.querySelector(".transaction-response h2").classList.add('error');
109 | document.querySelector(".transaction-response p").innerText = "Se ha generado un error al procesar la solicitud";
110 | }
111 | else {
112 | document.querySelector(".transaction-response h2").innerText = "Solicitud procesada exitosamente";
113 | document.querySelector(".transaction-response h2").classList.remove('error')
114 | document.querySelector(".transaction-response p").innerText = "Su solicitud se ha procesado exitosamente";
115 | }
116 | displayJsonInfo(rq, rs);
117 | }
118 |
119 | export { displayBack, displayJsonInfo, displayResponse, displayForm, formDisplayHandler };
--------------------------------------------------------------------------------
/tdc/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | select {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------
/getauth/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | select {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------
/tdd/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | #customerid-prefix {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------
/td-search/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | #customerid-prefix {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------
/transfer-search/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | #customerid-prefix {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------
/c2p/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | #customerid-prefix, #customer-phone-number-prefix {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------
/scp/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | #customerid-prefix, #customer-phone-number-prefix {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------
/search-c2p/public/styles/styles.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --azul-mercantil: #004E9B;
3 | --azul-claro: #009FDA;
4 | --naranja: #FF5800;
5 | --texto-primario: #666666;
6 | --error: #FF3333;
7 | }
8 |
9 | body,
10 | html {
11 | margin: 0;
12 | padding: 0;
13 | font-family: Arial, Helvetica, sans-serif;
14 | }
15 |
16 | .nav-bar {
17 | width: 100%;
18 | height: 60px;
19 | gap: 0px;
20 | opacity: 0px;
21 | background: linear-gradient(90deg, var(--azul-mercantil) 0.96%, var(--azul-claro) 14.75%, var(--azul-mercantil) 37.06%);
22 | display: flex;
23 | align-items: center;
24 |
25 | .nav-logo {
26 | height: 80px;
27 | margin-left: 10%;
28 | }
29 | }
30 |
31 | .main-container {
32 | width: 700px;
33 | margin: 0 auto;
34 | padding: 12px;
35 | display: flex;
36 | flex-direction: column;
37 | align-items: center;
38 | gap: 12px;
39 | }
40 |
41 | h3 {
42 | text-align: center;
43 | color: var(--azul-claro);
44 | width: 100%;
45 | }
46 |
47 | form {
48 | box-shadow: 0px 4px 4px 0px #DDDCD8;
49 | padding: 12px 0;
50 | border: 1px solid #DFDFDF;
51 | display: flex;
52 | flex-direction: column;
53 | border-radius: 8px;
54 | width: 70%;
55 | }
56 |
57 | .transaction-response {
58 | box-shadow: 0px 4px 4px 0px #DDDCD8;
59 | border: 1px solid #DFDFDF;
60 | display: flex;
61 | flex-direction: column;
62 | align-items: center;
63 | border-radius: 8px;
64 | max-width: 700px;
65 | padding: 12px;
66 | h2 {
67 | color: var(--naranja);
68 | padding: 0;
69 | margin: 0;
70 | }
71 | p {
72 | margin: 0;
73 | margin-top: 12px;
74 | padding: 0;
75 | color: var(--azul-claro);
76 | font-weight: bold;
77 | }
78 | a {
79 | text-decoration: underline;
80 | color: var(--azul-claro);
81 | margin-top: 12px;
82 | cursor: pointer;
83 | }
84 | }
85 |
86 | fieldset {
87 | border: none;
88 |
89 | label {
90 | display: inline-block;
91 | color: var(--azul-mercantil);
92 | font-weight: bold;
93 | }
94 |
95 | input, select {
96 | display: block;
97 | border: 2px solid transparent;
98 | border-bottom-color: var(--azul-mercantil);
99 | outline: none;
100 | transition: .2s ease all;
101 | font-size: 16px;
102 | color: var(--texto-primario);
103 | padding-bottom: 4px;
104 | margin-top: 12px;
105 | width: 100%;
106 |
107 | &:focus {
108 | border-bottom-color: var(--azul-claro);
109 | }
110 | }
111 |
112 | #customerid-prefix, #customer-phone-number-prefix {
113 | width: 20%;
114 | margin-right: 12px;
115 | }
116 |
117 | div {
118 | display: flex;
119 | }
120 | }
121 |
122 | button {
123 | background-image: linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%),
124 | linear-gradient(180deg, var(--azul-claro) 0%, var(--azul-mercantil) 100%);
125 | padding: 8px 32px;
126 | border-radius: 32px;
127 | border: 2px solid transparent;
128 | color: #Fff;
129 | font-size: 18px;
130 | box-sizing: border-box;
131 | background-origin: border-box;
132 | background-clip: padding-box, border-box;
133 | cursor: pointer;
134 | }
135 |
136 | .json-container {
137 | max-width: 1200px;
138 | margin: 12px auto;
139 | display: flex;
140 | justify-content: center;
141 | gap: 24px;
142 | flex-wrap: wrap;
143 | padding: 24px;
144 | }
145 |
146 | .json-container div {
147 | display: flex;
148 | flex-direction: column;
149 | align-items: flex-start;
150 | width: 400px;
151 | }
152 |
153 | .json-container div div {
154 | background-color: #212121;
155 | color: rgb(255, 255, 255);
156 | padding: 4px;
157 | border-radius: 8px;
158 | overflow: scroll;
159 | }
160 |
161 | .json-container div div::-webkit-scrollbar {
162 | -webkit-appearance: none;
163 | }
164 |
165 | .json-container div div::-webkit-scrollbar-thumb {
166 | background-color: #585858;
167 | border-radius: 8px;
168 | }
169 |
170 | .json-container div div::-webkit-scrollbar {
171 | height: 10px;
172 | }
173 |
174 | .json-container div div::-webkit-scrollbar-corner {
175 | background-color: transparent;
176 | }
177 |
178 | .json-container h3 {
179 | display: inline-block;
180 | padding: 4px 8px;
181 | border-radius: 4px;
182 | color: var(--azul-claro);
183 | }
184 |
185 | .hide {
186 | display: none;
187 | }
188 |
189 | .key {
190 | color: #9cdcfe;
191 | }
192 |
193 | .value {
194 | color: #c3835c;
195 | }
196 |
197 | .number {
198 | color: #b5cea8;
199 | }
200 |
201 | .error {
202 | color: var(--error);
203 | }
204 |
205 | .loader {
206 | border: 8px solid #fff;
207 | /* Light grey */
208 | border-top: 8px solid var(--azul-claro);
209 | /* Blue */
210 | border-radius: 50%;
211 | width: 120px;
212 | height: 120px;
213 | animation: spin 1s linear infinite;
214 | margin: 12px auto;
215 | }
216 |
217 | @keyframes spin {
218 | 0% {
219 | transform: rotate(0deg);
220 | }
221 |
222 | 100% {
223 | transform: rotate(360deg);
224 | }
225 | }
--------------------------------------------------------------------------------