Перейти к публикации
ssplast

sms send POST error 401 Not authorized javascript node.js

Рекомендованные сообщения

Не удаётся авторизоваться /v1/sms/send/

javascript node.js


 { status: 'error', message: 'Not authorized' }

GET /v1/info/price/ с параметрами : есть ответ OK

POST  /v1/sms/send/ с параметрами: error 401

Подскажите что не так?

песочница https://runkit.com/ssplast/5e974d1b0c400600130754a0

const crypto = require('crypto');
const fetch = require('node-fetch');
const Bluebird = require('bluebird');
fetch.Promise = Bluebird;


const userKey = "b46b5676866e01003bab";
const userSecret = "938b9c6d4bb7d2e262a4";

const prepare = (method, params) => {
    let params_str = Object.keys(params)
        .sort((a, b) => a === b ? 0 : a > b ? 1 : -1)
        .map(key => `${key}=${params[key]}`)
        .join('&');
        
    let md5 = crypto.createHash('md5').update(params_str).digest('hex');
    let hex = crypto.createHmac('sha1', userSecret)
        .update(method + params_str + md5).digest('hex');

    let sign = new Buffer.from(hex).toString('base64');

    return {
        authorization: userKey + ":" + sign,
        url: "https://api.zadarma.com" + method + "?" + params_str
    }
}

const fetch_request = async ({url, method, params, authorization}) => {

    let opt = {
        method: method,
        headers: {
            "Authorization": authorization, 
            'Content-Type': 'application/json'
        }
    }

    if(method === 'POST'){
        opt.body = JSON.stringify(params)
    }

    let res = await fetch(url, opt)
    .then(res => res.json())
    .catch(err => {console.log(err)});

    return res;
}

let send_to_api = async ({get_post, method, params}) => {

    let {url, authorization} = prepare(method, params);

    return fetch_request({
        url: url,
        method: get_post,
        params: params,
        authorization: authorization
    });
    
}

(async _ => {
    
    let result = await send_to_api({
        get_post: 'GET', 
        method: '/v1/info/price/', 
        params: {
            'number': encodeURI('380959897908'),
            'caller_id': encodeURI('380948232794')
        }
    });
    console.log('\n----/v1/info/price/\n', result);

    result = await send_to_api({
        get_post: 'POST', 
        method: '/v1/sms/send/', 
        params: {
            'number': encodeURI('380959897908'),
            'message': encodeURI('test тест 123')
        }
    });
    console.log('\n\n------/v1/sms/send/\n', result);
})()
  

 

Изменено пользователем ssplast

Поделиться сообщением


Ссылка на сообщение

Извините, нет времени разбираться в вашем коде, возьмите мои готовые функции, работают на 100%:

// шифровка
const crypto = require('crypto');
const { base64encode } = require('nodejs-base64');
const httpBuildQuery = require('http-build-query');
// для запросов
const fetch = require('node-fetch');
 
sortObjKeys = (obj) => {
    var ordered = {};
    Object.keys(obj).sort().forEach(function (key) {
        ordered[key] = obj[key];
    });
    return ordered;
}
//только тут стоит метод GET замените на POST
const makeRequest = async (method, params) => {
 
    let sortedParams = sortObjKeys(params);
    let querry = httpBuildQuery(sortedParams);
 
    let md5 = crypto.createHash('md5').update(querry).digest('hex');
    let text = method + querry + md5;
    let hash = crypto.createHmac('sha1', secretKey).update(text).digest('hex');
    let sign = base64encode(hash);
 
    // создаем заголовок
    let Authorization = `${key}:${sign}`;
 
    let request = await fetch(`https://api.zadarma.com${method}?${querry}`, {
        headers: {
            Authorization: Authorization
        },
        method: 'GET'
    });
    
    let response = await request.json();
    console.log(response)
    return response;
};
Изменено пользователем mikeKlech

Поделиться сообщением


Ссылка на сообщение

Напишите пожалуйста заявку в поддержку, там подскажут что как не сработало.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...