Мой призыв к API Post иногда не работает. Node.js - PullRequest
0 голосов
/ 01 апреля 2020

Так, например, если я хочу получить данные из API, мне нужно запустить некоторый API, называемый signon, чтобы получить уникальный токен, а затем использовать токен unqiue для входа в систему, чтобы получить токен сеанса входа, так что это более или менее порядок:

  1. сделать вход (получить уникальный токен / authsalt, который будет использоваться для API входа в систему)
  2. сделать вход (получить idmitra {используется для следующего процесса}, токен сеанса)
  3. сделать что-нибудь еще (например, получить данные пользователя и т. Д. c и т. Д. c)
  4. и т. Д.

проблема заключается в том. код иногда работает, но иногда не

error]([![https://imgur.com/sg2C1AO] 1 )

, например, на этой картинке, первые 3 раза, когда я его запускаю, он выиграл не получить idmitra из процесса входа в систему.

Интересно, лежит ли проблема на стороне сервера или в кодировке в ней

здесь кодировка в индексе. js

const request = require('request');
const crypto = require('crypto');

const baseUrl = "https://linktoAPIserver";
const username = "theuser", password = "thepassword";

async function syncData() {
    let authSalt = "", token = "";

    return new Promise(resolve => {
        // sign on, get auth salt
        request.post(baseUrl + '/api/member/signon',
            { form: { devid: '12345678' } },
            function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    const data = JSON.parse(body);
                    // return authsalt for next process
                    resolve(data.authsalt);
                }
            })
    }).then(salt => {
        const hashedPassword = crypto.createHash('sha256').update(password + salt).digest('hex');
        // login, get token
        return new Promise(resolve => {
            request.post(baseUrl + '/api/member/login',
                {
                    form: {
                        username: username,
                        password: hashedPassword,
                        devid: 12345678,
                        hddinfo: 12345,
                        isbackend: 1
                    }
                },
                function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                        const data = JSON.parse(body);
                        resolve({
                            idMitra: data.idmitra,
                            userKey: data.userkey,
                            // get last 8 character of id mitra
                            idMitra8: data.idmitra.slice(-8),
                        });
                    }
                })
        });
    }).then(userData => {
        const trxId = +new Date;
        const signature = crypto.createHash('sha256').update(userData.idMitra8 + trxId + userData.userKey).digest('hex');
        // get laporan transaksi
        return new Promise(resolve => {
            request.post(baseUrl + '/api/member/getlaporan',
                {
                    headers: {
                        sign: signature
                    },
                    form: {
                        idmitra: userData.idMitra,
                        trxid: trxId,
                        // TODO : set startDate and endDate as needed
                        tgl1: '2019-01-01',
                        tgl2: '2020-03-01',
                        produk: null
                    }
                },
                function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                        const data = JSON.parse(body);
                        console.log(data);
                        resolve({ trxId, signature });
                    }
                })
        });
    }).then(authData => {
        console.log(authData);
    });
}

syncData();

Буду признателен за любую помощь

...