buyer add

This commit is contained in:
Sergey Yarkov 2020-01-07 21:06:16 +03:00
parent 35e81d95b3
commit 2de28b8b9a
9 changed files with 55 additions and 23 deletions

View File

@ -1,2 +1,3 @@
# Digital Store
#### Control-panel auth: digital-store@support.ru:admin
#### Demo: https://polar-peak-95205.herokuapp.com/

View File

@ -1,4 +1,4 @@
module.exports = {
url: 'local',
url: 'mongodb+srv://ds_user1:zBD4b6kQbKAK2ar@cluster0-vtuzl.mongodb.net/test?retryWrites=true',
name: 'digital_store'
}

36
config/routes/invoice.js Normal file
View File

@ -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');
}
});
}

View File

@ -1,8 +1,4 @@
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 fields = {
@ -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);

View File

@ -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'));

View File

@ -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();
} else {
insertTo.innerHTML = 'Данных нету.';
}
this.loader.hide();
}
moveNext(page, li, insertTo, request) {

View File

@ -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');
console.log('Control-Panel v1.0.01');

View File

@ -1,4 +1,4 @@
const axios = require('axios');
import axios from "axios";
class ApiService {
constructor(baseUrl) {

View File

@ -1,4 +1,4 @@
const axios = require('axios');
import axios from "axios";
class ApiService {
constructor(baseUrl) {