- ./exchanger-api/plugins - carpeta con los plug-ins para el cambiador
- ./exchanger-api/config - carpeta con configuraciones rest-api
- ./exchanger-admin-web/config - carpeta con configuraciones para la parte de los clientes del panel del administrador
- ./exchanger-client-web/config - carpeta con configuraciones para la parte de los clientes
Servicios
- nginx - Servicio para una emisión rápida y estable de la aplicación vue, así como para proxy rest api y ws
- mongodb - Servicio base de datos principal del proyecto
- redis - Servicio para datos operativos, así como para notificar otros micro servicios sobre un evento nuevo;
- nodejs - Servicio la plataforma principal
- (s) ex-api-http -Servicio proporciona REST-API (el servicio principal funciona en el modo de cluster);
- (s) ex-ws - Servicio proporciona la conexión WebSocket con los clientes y el panel del administrador que es responsable de las acciones en tiempo real;
- (s) ex-parser-rate - Servicio analiza el tipo de cambio en fuentes distintas, las procesa y actualiza en la base de datos;
- (s) ex-cron - Servicio revisa el estado del servidor, cuenta el número de visitas, realiza el borrado de datos innecesarios y crea una copia de reserva de la base de datos;
- (s) ex-payout-service - Servicio procesa las solicitudes marcadas como pagadas o listas para el pago (si está activado un cambio automático o semiautomático y está configurada la API de los sistemas de pagos);
- (s) ex-notification-service -Servicio envía notificaciones al cliente y al administrador a través del correo electrónico y mensajeros comunes;
- (s) ex-blacklist-bc - Servicio el servicio revisa y actualiza el estado de la lista negra del servicio bestchange.org
- (s) ex-migrate - Servicio comprueba la pertinencia de los datos en la base y los estandariza;
- (s) ex-seed - Servicio sube los datos principales al cambiador;
Módulo Pago
Estructura de ficheros:
plugins/payouts/__NAME_PAYOUT
- la carpeta con el módulo./icon.png
or./icon.jpg
- ícono del módulo 1:1 (recomendado 150px por 150px)./configure.js
- fichero de normas la configuración del módulo, así como la configuración de accesos./index.js
- Clase del módulo (punto de accesos al módulo)./template/admin.html
- Patrón el administrador de la página de las configuraciones del módulo (vue template)./template/admin.js
- fichero de exportación de lógica de los clientes js (vue js)
configure.js
:
Ejemplo de fichero y sus funciones
module.exports.type = 'payout'; // tipo del módulo (pago)
module.exports.title = 'Title of payout'; // el título del módulo para la visualización en el panel del administrador (hasta 200 símbolos)
module.exports.name = 'Name service'; // Nombre del módulo para la visualización en las monedas (hasta 50 símbolos)
module.exports.required_npm = []; //matriz con los módulos necesrios de npm
//matriz de xml de las monedas con las que funciona dicho módulo
module.exports.allow_XML = [
"CARDUSD",
"WMZ",
];
// objeto de configuración por defecto (será instalado en config/app_config.json)
module.exports.default_config = {
clientID: '',
clientSecret: '',
clientPassword: '',
};
// tipos de datos en la configuración donde 1 es clave pública, 2 es clave secreta (no se transferirá cada vez al administrador)
module.exports.required_config = {
clientID: 1,
clientSecret: 2, // ocultar
clientPassword: 2, // ocultar
};
index.js
:
Debe tener la clase de exportación
Cómo trabajar con la configuración:
const id_key = __dirname.split('/').slice(-1)[0];
const config = require('../main_config')(id_key);
const clientID = await config.get('clientID') //recibir la configuración de la llave clientID
Ejemplo del constructor
constructor(API) {
this.API = API;
this.allowIPs = [];
this.id_key = id_key;
this.web_domain = config.get('domain');
this.schema = config.get('schema');
}
getFields(lang,xml){}
Function
lang
has
Sting:
Param ru, en, etc...
- Clave breve del lenguaje
xml
has Sting:
Param Ejemplo del constructor
Should Return Array (when xml is support)
// example
return [{
_id: 'account_p',
name: 'Advanced account USD',
placeholder: 'U000000',
regexp: '^U+[0-9]{6,12}$',
regexp_error: "Account incorrect",
required: true,
}];
NULL
(when xml is not support)
Should Return transfer(order){}
Function
order
has object:
Param
key | Type | Required | Value |
---|---|---|---|
order.uid | Number | YES | order uid |
order.outAmount | Float | YES | order outAmount |
order.outXML | String | YES | XML of currency for withdrawal |
order.outValues | Object | YES | Order requisites |
//ejemplo de objeto order.outValues
order.outValues ={
account_p:'U000000'
}
// key its from getFields ._id
// value entered client
Should Return Promise -> resolve (when transfer success) {Object}
key | Type | Required | Value |
---|---|---|---|
ok | Number | YES | 1 - success |
transaction | String | YES | transaction id or transfer id |
to | String | YES | Wallet id or other requisites who received payment |
currency | String | YES | Currency ISO (example USD) |
amount | Float | YES | amount of transfer |
fee | Float | No | Fee of tx (will add comment for admin) |
note | String | No | Note for order (will show to user) |
Should Return Promise -> reject (when transfer fail) {String}
Message of fail