· 5 years ago · Dec 09, 2019, 04:26 AM
1const fs = require('fs');
2const path = require('path');
3const mongoose = require('mongoose');
4const fastify = require('fastify')();
5const Promise = require("bluebird");
6const bodyParser = require('body-parser');
7const { registerValidation, loginValidation } = require('./src/auth/validation');
8const verifytoken = require('./src/auth/verifytoken');
9const webhook = require('./src/controllers/orderController');
10
11const express = require('express');
12const app = express();
13const getRawBody = require('raw-body');
14const crypto = require('crypto');
15const secretKey = process.env.secretKey;
16
17const axios = require('axios');
18const qs = require('querystring');
19const request = require('request');
20
21require('dotenv').config();
22
23// Read host address, port, and DB from the environment
24const PORT = process.env.PORT;
25const HOST = process.env.HOST;
26
27// Swagger options
28const swagger = require('./src/config/swagger2');
29fastify.register(require('fastify-swagger'), swagger.options);
30
31// parse application/x-www-form-urlencoded
32fastify.use(bodyParser.urlencoded({ extended: false }))
33
34// parse application/json
35fastify.use(bodyParser.json());
36
37const routes = require('./src/routes');
38
39// ES6 promises
40mongoose.Promise = Promise;
41
42// mongodb connection
43mongoose.connect(process.env.MongoDB, {
44 useNewUrlParser: true,
45 useUnifiedTopology: true,
46 promiseLibrary: global.Promise
47});
48
49const db = mongoose.connection;
50
51// mongodb error
52db.on('error', console.error.bind(console, 'connection error:'));
53
54// mongodb connection open
55db.once('open', () => {
56 console.log(`Connected to Mongo at: ${new Date()}`);
57});
58
59routes.forEach((route) => {
60 fastify.route(route);
61});
62
63app.post('/api/webhook', async (req, res) => {
64 console.log('? We got an order!')
65
66 // We'll compare the hmac to our own hash
67 const hmac = req.get('X-Shopify-Hmac-Sha256')
68
69 // Use raw-body to get the body (buffer)
70 const body = await getRawBody(req)
71 const newOrder = JSON.parse(body.toString())
72 //console.log(newOrder)
73
74 try {
75 const body = await getRawBody(req)
76 const newOrder = JSON.parse(body.toString())
77 //console.log(newOrder)
78 } catch (e) {
79 console.log('Something went wrong:')
80 console.log(e)
81 }
82
83 // Create a hash using the body and our key
84 const hash = crypto
85 .createHmac('sha256', secretKey)
86 .update(body, 'utf8', 'hex')
87 .digest('base64')
88
89 // Compare our hash to Shopify's hash
90 if (hash === hmac) {
91 // It's a match! All good
92 console.log('? Phew, it came from Shopify!')
93 res.sendStatus(200)
94 } else {
95 // No match! This request didn't originate from Shopify
96 console.log('? Danger! Not from Shopify!')
97 res.sendStatus(403)
98 }
99
100 const config = {
101 headers: {
102 'Content-Type': 'application/x-www-form-urlencoded',
103 'Accept' : 'application/json',
104 'GSUID' : '158'
105 }
106 }
107
108 const requestBody = {
109 f: 'json',
110 u: 'boxofheat',
111 p: 'boX_oF_heaT.2019'
112 }
113
114 //Login and retrieve session_digest
115 const login = 'https://clienti.grupposinergia.net/webservice/login';
116
117 axios.post(login, qs.stringify(requestBody), config)
118 .then(response => {
119 //Store session_digest
120 var session = [];
121 session = response.data.session_digest;
122 //Get order status
123 const url = 'https://clienti.grupposinergia.net/webservice/logistics/insert_orders';
124 const params = 'f=json&sd='+session+'';
125
126 axios.post(`url+'?'+ params, config`, newOrder)
127 .then(response => {
128 console.log(response);
129 })
130 .catch(error => {
131 console.log("API Error:" + error);
132 throw error;
133 })
134 })
135 .catch(error => {
136 console.log("API Error:" + error);
137 throw error;
138 })
139})
140
141//lt --port 3000
142app.listen(3000, () => console.log('Shopify webhook on port 3000!'))
143
144fastify.listen(process.env.PORT || 5000, 'localhost', function (err) {
145 if (err) throw err
146 console.log(`Fastify server on ${fastify.server.address().port}!`)
147})
148
149// const start = async () => {
150// try {
151// await fastify.listen(PORT, HOST);
152// fastify.swagger();
153// fastify.log.info(`Server on: ${fastify.server.address().PORT}`);
154// } catch (err) {
155// fastify.log.error(err);
156// process.exit(1);
157// }
158// };
159
160// start();