-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
89 lines (85 loc) · 2.77 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const express = require('express');
const bodyParser = require('body-parser');
const mollie = require('./mollie.js');
// Application setup.
const app = express();
// only one profile supported in this example
const profile = {
name: 'bob-live',
email: 'bob-live@doodle3d.com',
payment: {} // only one payment supported in this example
}
const product = {
description: 'Test product',
price: 20
}
const rootURL = process.env.ROOT_URL;
// Setup route.
app.get('/', function(req, res, next) {
console.log('/');
mollie.getOrCreateCostumer(profile).then(customer => {
console.log('customer: ', customer);
const paymentData = {
amount: product.price, // 0.01
customerId: customer.id,
recurringType: 'first',
description: product.description,
redirectUrl: `${rootURL}redirect/`,
webhookUrl: `${rootURL}webhook`,
metadata: { username: profile.name },
// method: 'ideal'
};
console.log('paymentData: ', paymentData);;
return mollie.createPayment(paymentData).then(response => {
console.log('payment response: ', response);
profile.payment = response;
res.send(`Payment created, go to: <a href="${response.links.paymentUrl}">Mollie payment page</a>`);
});
}).catch(next);
});
app.post('/webhook', [bodyParser.urlencoded()], (req, res, next) => {
console.log('/webhook req.body: ', req.body);
console.log('profile: ', profile);
const { id } = req.body;
if (id !== profile.payment.id) {
// console.log('Unknown payment: ', id);
// return;
return next(new Error(`Unknown payment: ${id}`));
}
mollie.getPayment(id).then(payment => {
console.log('payment: ', payment);
profile.payment = payment;
const { username } = payment.metadata;
// payment was successfully paid
if (payment.isPaid()) {
console.log('payment was paid');
res.end();
// payment isn't paid or open, so it's probobably aborted
} else if (!payment.isOpen()) {
console.log('payment was aborted / failed');
res.end();
} else {
res.end();
}
}).catch(next);
});
app.get('/redirect', function(req, res) {
console.log('/redirect profile: ', profile);
res.send(`Payment status: ${profile.payment.status}`);
});
app.use((err, req, res, next) => {
console.log('error handler: ', err);
// Voucherify errors include a code
const body = {
status: 'error',
message: err.message ? err.message : err,
data: err
};
if (err.validationErrors) body.validationErrors = err.validationErrors;
const statusCode = err.status || err.code || 500;
console.log('statusCode: ', statusCode);
return res.status(statusCode).json(body);
});
const listener = app.listen(process.env.PORT|3000, function () {
console.log('Example app listening on ', listener.address().port);
});