mirror of
https://github.com/janishutz/libreevent.git
synced 2025-11-25 05:14:23 +00:00
bug fixes for payrexx integration (still no good)
This commit is contained in:
@@ -16,6 +16,10 @@ const hmacSHA256 = require( 'crypto-js/hmac-sha256' );
|
|||||||
const payrexxConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/config.payments.secret.json' ) ) );
|
const payrexxConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/config.payments.secret.json' ) ) );
|
||||||
|
|
||||||
const baseUrl = 'https://api.payrexx.com/v1.0/';
|
const baseUrl = 'https://api.payrexx.com/v1.0/';
|
||||||
|
|
||||||
|
if ( !payrexxConfig.APISecret || !payrexxConfig.instance ) {
|
||||||
|
throw new Error( '[ Payrexx ] No API secret or instance name configured!' );
|
||||||
|
}
|
||||||
const instance = payrexxConfig.instance;
|
const instance = payrexxConfig.instance;
|
||||||
const secret = payrexxConfig.APISecret;
|
const secret = payrexxConfig.APISecret;
|
||||||
|
|
||||||
@@ -32,10 +36,12 @@ exports.init = function () {
|
|||||||
getGateway: function ( id ) {
|
getGateway: function ( id ) {
|
||||||
const baseUrl = buildBaseUrl( 'Gateway/' + id + '/' );
|
const baseUrl = buildBaseUrl( 'Gateway/' + id + '/' );
|
||||||
const url = baseUrl + '&ApiSignature=' + buildSignature();
|
const url = baseUrl + '&ApiSignature=' + buildSignature();
|
||||||
|
console.error( url );
|
||||||
return axios.get( url );
|
return axios.get( url );
|
||||||
},
|
},
|
||||||
createGateway: function ( params ) {
|
createGateway: function ( params ) {
|
||||||
if ( !params.amount ) {
|
if ( !params.amount ) {
|
||||||
|
// TODO: Think if we really have to throw here
|
||||||
throw new Error( 'Amount required!' );
|
throw new Error( 'Amount required!' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ const TicketGenerator = new ticket();
|
|||||||
let sessionReference = {};
|
let sessionReference = {};
|
||||||
let waitingClients = {};
|
let waitingClients = {};
|
||||||
let pendingPayments = {};
|
let pendingPayments = {};
|
||||||
|
let gatewayReference = {};
|
||||||
let paymentOk = {};
|
let paymentOk = {};
|
||||||
|
|
||||||
module.exports = ( app, settings ) => {
|
module.exports = ( app, settings ) => {
|
||||||
@@ -33,6 +34,7 @@ module.exports = ( app, settings ) => {
|
|||||||
'currency': settings.currency,
|
'currency': settings.currency,
|
||||||
'basket': [],
|
'basket': [],
|
||||||
'amount': 0,
|
'amount': 0,
|
||||||
|
'referenceId': req.session.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
db.getDataSimple( 'temp', 'user_id', req.session.id ).then( dat => {
|
db.getDataSimple( 'temp', 'user_id', req.session.id ).then( dat => {
|
||||||
@@ -55,6 +57,7 @@ module.exports = ( app, settings ) => {
|
|||||||
const session = response.data.data[ 0 ];
|
const session = response.data.data[ 0 ];
|
||||||
sessionReference[ session.id ] = { 'tok': req.session.id, 'email': req.session.username };
|
sessionReference[ session.id ] = { 'tok': req.session.id, 'email': req.session.username };
|
||||||
pendingPayments[ req.session.id ] = true;
|
pendingPayments[ req.session.id ] = true;
|
||||||
|
gatewayReference[ req.session.id ] = session.id;
|
||||||
res.send( session.link );
|
res.send( session.link );
|
||||||
} else {
|
} else {
|
||||||
res.status( 500 ).send( 'ERR_PAYMENT' );
|
res.status( 500 ).send( 'ERR_PAYMENT' );
|
||||||
@@ -130,54 +133,59 @@ module.exports = ( app, settings ) => {
|
|||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
app.post( '/payments/webhook', bodyParser.raw( { type: 'application/json' } ), async ( req, res ) => {
|
app.post( '/payments/webhook', bodyParser.json(), async ( req, res ) => {
|
||||||
console.error( req.body );
|
if ( req.body.transaction.status === 'confirmed' ) {
|
||||||
const response = await payrexx.getGateway( req.body.id );
|
const response = await payrexx.getGateway( gatewayReference[ req.body.transaction.referenceId ] );
|
||||||
|
|
||||||
if ( response.status === 200 ) {
|
if ( response.status === 200 ) {
|
||||||
const gateway = response.data.data[ 0 ];
|
const gateway = response.data.data[ 0 ];
|
||||||
|
|
||||||
res.status( 200 ).end();
|
res.status( 200 ).end();
|
||||||
if ( gateway.status === 'confirmed' ) {
|
if ( gateway.status === 'confirmed' ) {
|
||||||
setTimeout( () => {
|
setTimeout( () => {
|
||||||
if ( waitingClients[ sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ] ) {
|
if ( waitingClients[ sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ] ) {
|
||||||
waitingClients[ sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ].write( 'data: paymentOk\n\n' );
|
waitingClients[ sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ].write( 'data: paymentOk\n\n' );
|
||||||
}
|
}
|
||||||
}, 1000 );
|
}, 1000 );
|
||||||
db.getDataSimple( 'temp', 'user_id', sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ).then( dat => {
|
db.getDataSimple( 'temp', 'user_id', sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ).then( dat => {
|
||||||
db.getDataSimple( 'users', 'email', sessionReference[ response.data.data[ 0 ].id ][ 'email' ] ).then( user => {
|
db.getDataSimple( 'users', 'email', sessionReference[ response.data.data[ 0 ].id ][ 'email' ] ).then( user => {
|
||||||
if ( user[ 0 ] ) {
|
if ( user[ 0 ] ) {
|
||||||
const tickets = JSON.parse( dat[ 0 ].data );
|
const tickets = JSON.parse( dat[ 0 ].data );
|
||||||
db.writeDataSimple( 'orders', 'account_id', user[ 0 ].account_id, { 'account_id': user[ 0 ].account_id, 'tickets': dat[ 0 ].data, 'order_name': sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] } ).then( () => {
|
db.writeDataSimple( 'orders', 'account_id', user[ 0 ].account_id, { 'account_id': user[ 0 ].account_id, 'tickets': dat[ 0 ].data, 'order_name': sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] } ).then( () => {
|
||||||
console.log( sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] );
|
console.log( sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] );
|
||||||
TicketGenerator.generateTickets( sessionReference[ response.data.data[ 0 ].id ] );
|
TicketGenerator.generateTickets( sessionReference[ response.data.data[ 0 ].id ] );
|
||||||
db.getJSONData( 'booked' ).then( ret => {
|
db.getJSONData( 'booked' ).then( ret => {
|
||||||
let booked = ret ?? {};
|
let booked = ret ?? {};
|
||||||
for ( let event in tickets ) {
|
for ( let event in tickets ) {
|
||||||
if ( !booked[ String( event ) ] ) {
|
if ( !booked[ String( event ) ] ) {
|
||||||
booked[ String( event ) ] = {};
|
booked[ String( event ) ] = {};
|
||||||
|
}
|
||||||
|
for ( let tik in tickets[ event ] ) {
|
||||||
|
booked[ event ][ tik ] = tickets[ event ][ tik ];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for ( let tik in tickets[ event ] ) {
|
db.writeJSONData( 'booked', booked ).then( () => {
|
||||||
booked[ event ][ tik ] = tickets[ event ][ tik ];
|
delete pendingPayments[ sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ];
|
||||||
}
|
} );
|
||||||
}
|
db.deleteDataSimple( 'temp', 'user_id', sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ).catch( error => {
|
||||||
db.writeJSONData( 'booked', booked ).then( () => {
|
console.error( '[ STRIPE ] ERROR whilst deleting data from DB: ' + error );
|
||||||
delete pendingPayments[ sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ];
|
} );
|
||||||
} );
|
|
||||||
db.deleteDataSimple( 'temp', 'user_id', sessionReference[ response.data.data[ 0 ].id ][ 'tok' ] ).catch( error => {
|
|
||||||
console.error( '[ STRIPE ] ERROR whilst deleting data from DB: ' + error );
|
|
||||||
} );
|
} );
|
||||||
} );
|
} );
|
||||||
} );
|
} else {
|
||||||
} else {
|
console.log( sessionReference[ response.data.data[ 0 ].id ][ 'email' ] );
|
||||||
console.log( sessionReference[ response.data.data[ 0 ].id ][ 'email' ] );
|
console.error( 'user not found' );
|
||||||
console.error( 'user not found' );
|
}
|
||||||
}
|
} );
|
||||||
|
} ).catch( err => {
|
||||||
|
console.error( err );
|
||||||
} );
|
} );
|
||||||
} ).catch( err => {
|
}
|
||||||
console.error( err );
|
} else {
|
||||||
} );
|
res.send( 'ok' );
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
res.send( 'ok' );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user