diff --git a/README.md b/README.md index 4360929..5f33a9e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # Digital Store #### Control-panel auth: digital-store@support.ru:admin +#### Demo: https://polar-peak-95205.herokuapp.com/ \ No newline at end of file diff --git a/config/database.js b/config/database.js index 6293e55..1d2a124 100644 --- a/config/database.js +++ b/config/database.js @@ -1,4 +1,4 @@ module.exports = { - url: 'local', + url: 'mongodb+srv://ds_user1:zBD4b6kQbKAK2ar@cluster0-vtuzl.mongodb.net/test?retryWrites=true', name: 'digital_store' } \ No newline at end of file diff --git a/config/routes/invoice.js b/config/routes/invoice.js new file mode 100644 index 0000000..76d8679 --- /dev/null +++ b/config/routes/invoice.js @@ -0,0 +1,36 @@ +module.exports = function(server, db, qiwiApi) { + server.get('/success', (req, res) => { + const query = req.query; + // qiwi + if (query.bill_id && query.item_id && query.payment === 'qiwi') { + qiwiApi.getBillInfo(query.bill_id).then(async (data) => { + const bill_id = query.bill_id, + status = data.status.value, + email = data.customer.email, + method = 'qiwi', + date = data.status.changedDateTime, + amount = data.amount.value; + + if (status === 'PAID') { + const findBill = await db.collection('buyers').findOne({bill_id: query.bill_id}); + if (findBill == null) { + // создаем покупателя + db.collection('buyers').insertOne({bill_id, email, method, date, amount}); + res.send('Выдаем данные!'); + } else { + res.send('Ошибка'); + } + } else if (status === 'WAITING') { + res.send('Инвоис ждет оплаты'); + } else if (status === 'EXPIRED') { + res.send('Время жизни счета истекло. Счет не оплачен'); + } + }) + .catch(() => { + res.send('произошла ошибка!'); + }); + } else { + res.send('bad request'); + } + }); +} \ No newline at end of file diff --git a/config/routes/payments/qiwi.payment.js b/config/routes/payments/qiwi.payment.js index 63c1fc9..41e5f3a 100644 --- a/config/routes/payments/qiwi.payment.js +++ b/config/routes/payments/qiwi.payment.js @@ -1,10 +1,6 @@ -const QiwiBillPaymentsAPI = require('@qiwi/bill-payments-node-js-sdk'); - -const SECRET_KEY = ''; -const qiwiApi = new QiwiBillPaymentsAPI(SECRET_KEY); -module.exports = function(server, db) { +module.exports = function(server, db, qiwiApi) { server.put('/payment', (req, res) => { - const billId = qiwiApi.generateId(); + const billId = qiwiApi.generateId(); const fields = { amount: req.body.totalPrice, currency: 'RUB', @@ -12,7 +8,7 @@ module.exports = function(server, db) { expirationDateTime: qiwiApi.getLifetimeByDay(), customFields: {themeCode: 'Sergei-YaS7mIY0CQe'}, email: req.body.email, - successUrl: `http://test.ru/` + successUrl: `https://polar-peak-95205.herokuapp.com/success?bill_id=${billId}&item_id=${req.body.items[0].id}&payment=qiwi` } qiwiApi.createBill(billId, fields).then((data) => { res.send(data); diff --git a/config/server.js b/config/server.js index e4b1089..92b13a1 100644 --- a/config/server.js +++ b/config/server.js @@ -14,6 +14,10 @@ const session = require('express-session'); const MongoStore = require('connect-mongo')(session); const methodOverride = require('method-override'); const multer = require('multer'); +const QiwiBillPaymentsAPI = require('@qiwi/bill-payments-node-js-sdk'); + +const SECRET_KEY = '/'; +const qiwiApi = new QiwiBillPaymentsAPI(SECRET_KEY); MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: true}) .then((client) => { @@ -32,12 +36,7 @@ MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: t server.use(express.urlencoded({ extended: false })); server.use(express.json()); server.use(flash()); - server.use(session({secret: process.env.SESSION_SECRET,resave: false,saveUninitialized: false, store: - new MongoStore({ - url: db_config.url, - touchAfter: 24 * 3600 // time period in seconds - }) - })); + server.use(session({secret: process.env.SESSION_SECRET,resave: false,saveUninitialized: false})); server.use(passport.initialize()); server.use(passport.session()); server.use(methodOverride('_method')); @@ -49,9 +48,10 @@ MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: t require('./routes/admin')(server, db); // маршрут с формой авторизации админа require('./routes/control-panel')(server, db); // маршруты с панелью управления require('./routes/api')(server, db); // отдача данных клиенту + require('./routes/invoice')(server, db, qiwiApi); // Payments - require('./routes/payments/qiwi.payment')(server, db); + require('./routes/payments/qiwi.payment')(server, db, qiwiApi); // 404 Redirect server.use((req, res) => res.status(404).render('main/404')); diff --git a/src/admin/components/pagination.component.js b/src/admin/components/pagination.component.js index bad0e15..5b21f75 100644 --- a/src/admin/components/pagination.component.js +++ b/src/admin/components/pagination.component.js @@ -51,17 +51,16 @@ export class PaginationComponent extends Component { // выполняем запрос на сервер и выводим на данные async moveTo(page, insertTo, request) { + this.loader.show(); + insertTo.innerHTML = ''; const response = await request(page); - if (response != '') { this.$el.setAttribute('data-page', page); - insertTo.innerHTML = ''; - this.loader.show(); - insertTo.insertAdjacentHTML('afterbegin', response); - this.loader.hide(); + insertTo.insertAdjacentHTML('afterbegin', response); } else { insertTo.innerHTML = 'Данных нету.'; } + this.loader.hide(); } moveNext(page, li, insertTo, request) { diff --git a/src/admin/index.js b/src/admin/index.js index 2c5e365..cc9c16c 100644 --- a/src/admin/index.js +++ b/src/admin/index.js @@ -27,4 +27,4 @@ const itemDelete = new ItemDeleteModal('deleteItemModal', 'edit', 'deleteItemClo const categoryEdit = new CategoryEditModal('editCategoryModal', 'editCategory_select', 'editCategoryClose'); const materialize = new MaterializeConfig(); -console.log('Control-Panel v1.0.0'); \ No newline at end of file +console.log('Control-Panel v1.0.01'); \ No newline at end of file diff --git a/src/admin/services/api.service.js b/src/admin/services/api.service.js index 317eaf9..245ea64 100644 --- a/src/admin/services/api.service.js +++ b/src/admin/services/api.service.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +import axios from "axios"; class ApiService { constructor(baseUrl) { diff --git a/src/main/services/api.service.js b/src/main/services/api.service.js index 572bf0f..73f2052 100644 --- a/src/main/services/api.service.js +++ b/src/main/services/api.service.js @@ -1,4 +1,4 @@ -const axios = require('axios'); +import axios from "axios"; class ApiService { constructor(baseUrl) {