· 4 years ago · Jun 28, 2021, 12:06 PM
1var express = require('express');
2var app = express();
3var axios = require('axios');
4var bodyParser = require('body-parser');
5
6app.use(bodyParser.json()); // for parsing application/json
7app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
8
9var oauth_token_secret = '';
10
11const consumer_key = 'xxx';
12const consumer_secret = 'xxx';
13
14const oauth_callback = 'http://localhost:3000/callback';
15
16const api_request_url = 'https://apifeed.sellsy.com/0/request_token';
17const api_authorize_url = 'https://apifeed.sellsy.com/0/login.php';
18const api_access_url = 'https://apifeed.sellsy.com/0/access_token';
19
20
21app.get('/', function (req, res) {
22
23 // 1st step - request token
24 axios.get(api_request_url, {
25 params: {
26 oauth_callback: oauth_callback,
27 oauth_consumer_key: consumer_key,
28 oauth_nonce: getNonce(),
29 oauth_timestamp: getTimestamp(),
30 oauth_signature: consumer_secret + '&',
31 oauth_signature_method: 'PLAINTEXT'
32 }
33 })
34 .then(function (response) {
35 var url = response.data.slice(21);
36 var oauth_token = gup('oauth_token', url);
37 oauth_token_secret = gup('oauth_token_secret', url);
38
39 // 2nd step - authorize token (display login webview)
40 res.redirect(api_authorize_url + '?oauth_token=' + oauth_token);
41 })
42 .catch(function (error) {
43 console.log(error);
44 });
45
46});
47
48app.listen(3000, function () {
49 console.log('Example app listening on port 3000!')
50});
51
52app.get('/callback', (req, res) => {
53 var oauth_token = req.query.oauth_token;
54 var oauth_verifier = req.query.oauth_verifier;
55
56 console.log('callback')
57 console.log(oauth_token)
58 console.log(oauth_verifier)
59
60 // 3rd step - access token - Result of this last request will give tokens that will be used to perform API calls
61 axios.get(api_access_url, {
62 params: {
63 oauth_consumer_key: consumer_key,
64 oauth_token: oauth_token,
65 oauth_verifier: oauth_verifier,
66 oauth_signature: consumer_secret + '&' + oauth_token_secret,
67 oauth_signature_method: 'PLAINTEXT',
68 oauth_nonce: getNonce(),
69 oauth_timestamp: getTimestamp()
70 }
71 })
72 .then(result => {
73 console.log(result.data);
74 res.send(result.data)
75 })
76 .catch(error => {
77 console.log(error.data);
78 });
79
80
81});
82
83function getTimestamp() {
84 var d = new Date();
85 var ts = Math.floor(d.getTime() / 1000);
86 return ts;
87}
88
89function gup(name, url) {
90 if (!url) url = location.href;
91 name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
92 var regexS = "[\\?&]" + name + "=([^&#]*)";
93 var regex = new RegExp(regexS);
94 var results = regex.exec(url);
95 return results == null ? null : results[1];
96}
97
98function getNonce(length) {
99 if (length === undefined) {
100 length = 5;
101 }
102 var nonce_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
103 var result = "";
104 var cLength = nonce_chars.length;
105 for (var i = 0; i < length; i++) {
106 var rnum = Math.floor(Math.random() * cLength);
107 result += nonce_chars.substring(rnum, rnum + 1);
108 }
109 return result;
110}
111