Так, например, если я хочу получить данные из API, мне нужно запустить некоторый API, называемый signon, чтобы получить уникальный токен, а затем использовать токен unqiue для входа в систему, чтобы получить токен сеанса входа, так что это более или менее порядок:
- сделать вход (получить уникальный токен / authsalt, который будет использоваться для API входа в систему)
- сделать вход (получить idmitra {используется для следующего процесса}, токен сеанса)
- сделать что-нибудь еще (например, получить данные пользователя и т. Д. c и т. Д. c)
- и т. Д.
проблема заключается в том. код иногда работает, но иногда не
] 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();
Буду признателен за любую помощь