petun 0 Опубликовано: 24 июля 2016 Share Опубликовано: 24 июля 2016 Как хэшировать - понятно, не понятно чего . Вот имеется задача посмотреть баланс. GET /v1/info/balance/ Базовый URL https://api.zadarma.com ключи для примера, не реальные. Key: e13343e3aр178fa6a0c4 Secret: 5063b5d096c625a9b532 далее по инструкции https://zadarma.com/ru/support/api/ " массив из передаваемых параметров (GET, POST, PUT, DELETE) сортируется по названию ключа по алфавиту;" в моем случае параметров нет, сортировать нечего и значит он пустой. Так? "из полученного массива формируется строка запроса (например, функция http_build_query в PHP), пример "from=DATEFROM&to=DATETO…"; значит и строка пустая. Так? "и далее - соединяется по формуле: строка = имя_метода + строка_запроса + md5( строка_запроса ), где "имя_метода" - строка запроса, начиная от домена (с указанием версии АПИ), до начала перечисления параметров, например - /v1/sip/" беру md5 от "пустоты", получаю d41d8cd98f00b204e9800998ecf8427e да? имя_метода="/v1/info/balance/" строка_запроса="" md5( строка_запроса ) d41d8cd98f00b204e9800998ecf8427e получаю строку /v1/info/balance/d41d8cd98f00b204e9800998ecf8427e "полученная строка хешируется по алгоритму sha1 с секретным ключом пользователя: хеш = hash( строка, секретный_ключ )" т.е. я хеширую своим секретным ключом 5063b5d096c625a9b532 строку /v1/info/balance/d41d8cd98f00b204e9800998ecf8427e да? echo -n '/v1/info/balance/d41d8cd98f00b204e9800998ecf8427e'|openssl dgst -sha1 -hmac "5063b5d096c625a9b532" получаю f0fbedf8ce31cd404054fbf0e950c9fe42e2a51a "и далее хеш кодируется в base64 подпись = base64_encode( хеш )" кодирую: echo -n 'f0fbedf8ce31cd404054fbf0e950c9fe42e2a51a' | base64 получаю: ZjBmYmVkZjhjZTMxY2Q0MDQwNTRmYmYwZTk1MGM5ZmU0MmUyYTUxYQ== "Каждый запрос, который нуждается в авторизации, сопровождается дополнительным заголовком, вида: "Authorization: ключ_пользователя: подпись" Ключи для авторизации необходимо получить в личном кабинете." Формирую запрос: curl -H "Authorization: e13273e3af178fa6a0c4 : ZjBmYmVkZjhjZTMxY2Q0MDQwNTRmYmYwZTk1MGM5ZmU0MmUyYTUxYQ==" https://api.zadarma.com/v1/info/balance/ и получаю ответ: {"status":"error","message":"Not authorized"} Чего не так? Может чего не то подставляю для хеширования в самом начале? Если кто поможет огромное СПС. Ссылка на сообщение
Igor 0 Опубликовано: 24 июля 2016 Share Опубликовано: 24 июля 2016 К сожалению я не разработчик, но быть может вам поможет библиотека на PHP? https://github.com/zadarma/user-api-v1 Ссылка на сообщение
petun 0 Опубликовано: 25 июля 2016 Автор Share Опубликовано: 25 июля 2016 СПС. Это но это немного не то. Физически как делать, как кодить я понимаю. Я не понимаю что брать за параметры. Сам физ. поцесс. Ссылка на сообщение
Igor 0 Опубликовано: 25 июля 2016 Share Опубликовано: 25 июля 2016 Тогда напишите пожалуйста заявку в поддержку (именно заявку) и вам ответят разработчики. Ссылка на сообщение
petun 0 Опубликовано: 26 июля 2016 Автор Share Опубликовано: 26 июля 2016 ОК. СПС. Ещё денёк подожду и обращусь в суппорт. Беспокоить их не хотелось по такому вопросу. Ссылка на сообщение
petun 0 Опубликовано: 29 июля 2016 Автор Share Опубликовано: 29 июля 2016 Посмотрел чего выдаёт php hash_hmac('sha1', '/v1/info/balance/', md5(''), 'секретный код') Выдаёт sha1 в binary, сделал sha1 в бинари, результат тотже {"status":"error","message":"Not authorized"} Есть коммерческое предложение по этому вопросу. Так как я устал с этим API трахаться, то готов оплатить в частном порядке разумную сумму xNIX-ту за пошаговое решение этого примера на утилитах xNIX. Делов здесь на пять минут. Скрипт не нужен. Если это подходит, то могу дать своё мыло и реальную пару ключ-секрет. Деньги могу скинуть на номер телефона, карточку и т.д. Ссылка на сообщение
pbx.gal.cv.ua 0 Опубликовано: 29 июля 2016 Share Опубликовано: 29 июля 2016 Может, вам подойдет эзешник под виндовс? Тогда бесплатно, ссылка вот. Если на коммерческой основе, могу и под другую ос сваять. Ссылка на сообщение
petun 0 Опубликовано: 30 июля 2016 Автор Share Опубликовано: 30 июля 2016 (изменено) Может, вам подойдет эзешник под виндовс? Тогда бесплатно, ссылка вот. Если на коммерческой основе, могу и под другую ос сваять Linux или win. В win и curl.exe и openssl.exe - тоже есть. Просто xNIX нативнее. НЕ СКРИПТ, и тем более не lib или bin, а просто по-шагово. Как вверху писал, но чтобы работало. Если интересно мыло petunpetun0 AT gmail.com key: e13273e3af178fa6a0c4 secret: 4773b5d096c625a9b532 GET /v1/info/balance/ Далее по шагово, но чтобы оно заработало. У меня не работает md5 echo -n '' |openssl dgst -md5 d41d8cd98f00b204e9800998ecf8427e sha1 echo -n '/v1/info/balance/d41d8cd98f00b204e9800998ecf8427e4773b5d096c625a9b532' | openssl dgst -sha1 523f299bebf732104b8b6fe48aac78d1bacc8077 base64 echo -n '523f299bebf732104b8b6fe48aac78d1bacc8077' | openssl enc -base64 NTIzZjI5OWJlYmY3MzIxMDRiOGI2ZmU0OGFhYzc4ZDFiYWNjODA3Nw== curl -H "Authorization: e13273e3af178fa6a0c4:NTIzZjI5OWJlYmY3MzIxMDRiOGI2ZmU0OGFhYzc4ZDFiYWNjODA3Nw==" https://api.zadarma.com/v1/info/balance/ Изменено 30 июля 2016 пользователем petun Ссылка на сообщение
pbx.gal.cv.ua 0 Опубликовано: 30 июля 2016 Share Опубликовано: 30 июля 2016 У меня с вашими кредитами тоже, not authorized. Может, ключ с секретом местами попутали? Ссылка на сообщение
petun 0 Опубликовано: 30 июля 2016 Автор Share Опубликовано: 30 июля 2016 У меня с вашими кредитами тоже, not authorized. Может, ключ с секретом местами попутали? приводил ключи для примера. Как-то не хочется их выкладывать в общее обозрение. :) Напишите мне на мыло petunpetun0 at gmail.com Я Вам реальные пришлю. Ссылка на сообщение
Igor 0 Опубликовано: 30 июля 2016 Share Опубликовано: 30 июля 2016 Есть коммерческое предложение по этому вопросу.Так как я устал с этим API трахаться, то готов оплатить в частном порядке разумную сумму Честно говоря не понимаю, зачем сюда повторно писать и предлагать еще деньги? Создать заявку в поддержку я так понимаю религия не позволяет? :) Да, разработчиков мы редко грузим вопросами поддержки, но в данном случае кроме разработчика вам никто и не поможет. Ссылка на сообщение
petun 0 Опубликовано: 30 июля 2016 Автор Share Опубликовано: 30 июля 2016 Решено. Разобрался. Спасибо за помощь. $ bash zadarma.sh /v1/info/balance/ #!/bin/bash # $1 это сюда запрос помещается /v1/info/balance/ declare -r key="мой ключ" declare -r secret="мой секрет" declare signature="" declare -r baseurl="https://api.zadarma.com" signature=`echo -n '' |openssl dgst -md5 | cut -d" " -f2` #echo "md5 = $signature" signature=`echo -n "$1$signature" | openssl dgst -sha1 -hmac "$secret" -hex | cut -d" " -f2` #echo "sha1 = $signature" signature=`echo -n "$signature" | openssl enc -base64 | cut -d" " -f2` #echo "base64 = $signature" #echo ""Authorization: $key:$signature"" "$baseurl""$1" curl -H "Authorization: $key:$signature" "$baseurl""$1" А вот в описании API на сайте https://zadarma.com/ru/support/api/ Не дурственно логику хеширования расписать. Пример на PHP - это хорошо. Но на PHP мир клином не сошёлся. Сиди тут и вычитывай, чего и как эта функция выделывает. Пример может по-шаговый привести по логике. типа. Ключ: 00332be6e9aae9ecad6d Секрет: 3ae4987babc9c8fbd808 1. Запрос без параметров /v1/info/balance/ 2. Значит md5 от пустоы. Оно всегда будет: d41d8cd98f00b204e9800998ecf8427e 3. Хэшируем в SHA1 в режиме вывода HEX в нижнем регистре, с использованием нашего секрета т.е. создаём хэш строки "/v1/info/balance/d41d8cd98f00b204e9800998ecf8427e" используя наш секрет 3ae4987babc9c8fbd808 и т.д. Ссылка на сообщение
Igor 0 Опубликовано: 31 июля 2016 Share Опубликовано: 31 июля 2016 Спасибо за описание и пожелание, передам. Ссылка на сообщение
Clevelus 0 Опубликовано: 22 октября 2016 Share Опубликовано: 22 октября 2016 У вас везде в примерах (в личном кабинете) пример кода: <?php if (isset($_GET['zd_echo'])) exit($_GET['zd_echo']); ?> Но данный код уязвим к атакам XSS. Проверьте, и замените код в примерах, например на этот. <?php if (isset($_GET['zd_echo'])) exit(htmlspecialchars($_GET['zd_echo'])); ?> Хотя, еще лучше использовать тернарный оператор. ЗЫ: не люблю PHP, так этот код по умолчанию на C# не будет уязвим. Ссылка на сообщение
SergAxt 0 Опубликовано: 31 января 2018 Share Опубликовано: 31 января 2018 Может, вам подойдет эзешник под виндовс? Тогда бесплатно, ссылка вот. Если на коммерческой основе, могу и под другую ос сваять. Привет! Прикольный экзешник. Было бы еще прикольнее передавать key и secret в коммандной строке. А то аккаунтов много, на всех папок не насоздаешься.... Ссылка на сообщение
Igor 0 Опубликовано: 10 февраля 2018 Share Опубликовано: 10 февраля 2018 А зачем создавать много аккаунтов? Ссылка на сообщение
pbx.gal.cv.ua 0 Опубликовано: 11 февраля 2018 Share Опубликовано: 11 февраля 2018 Было бы еще прикольнее передавать key и secret в коммандной строке. Такая возможность предусмотрена, любые параметры можно задавать и в командной строке, и в файле конфигурации. А зачем создавать много аккаунтов?Мультивалютные прайсы.Или, разные организации на обслуживании со своими балансами. Ссылка на сообщение
SergAxt 0 Опубликовано: 13 февраля 2018 Share Опубликовано: 13 февраля 2018 (изменено) А зачем создавать много аккаунтов? Разные прайсы для разных направлений звонков. По России мне выгодно звонить с безлимита, по Казахстану, Армении, и пр. - со стандарта с посекундной тарификацией... Мы с вами уже на эту тему лет пять назад общались... И, насколько помню - вы сказали что невозможно обьединить внешние номера с других аккаунтов - в один. Изменено 13 февраля 2018 пользователем SergAxt Ссылка на сообщение
Igor 0 Опубликовано: 13 февраля 2018 Share Опубликовано: 13 февраля 2018 Да я и считаю что в сумме использовать несколько аккаунтов для разных прайсов не очень выгодно :) Но тут уж только вам решать. Ссылка на сообщение
ms2002 0 Опубликовано: 21 февраля 2019 Share Опубликовано: 21 февраля 2019 Тогда напишите пожалуйста заявку в поддержку (именно заявку) и вам ответят разработчики. Ничего вразумительного они не отвечают Ссылка на сообщение
mikeKlech 0 Опубликовано: 6 апреля 2020 Share Опубликовано: 6 апреля 2020 Если кто-то как и я пользуется node.js вместо php: // шифровка var crypto = require('crypto'); const { base64encode, base64decode } = require('nodejs-base64'); // для запросов const fetch = require('node-fetch'); let secretKey = 'ваш секретный ключ' let key = 'ключ пользователя' let method = `/v1/info/balance/`; // для проверки баланса параметров указывать не нужно, поэтому вставляем пустую строку let md5 = crypto.createHash('md5').update('').digest('hex'); let text = method + md5; let hash = crypto.createHmac('sha1', secretKey).update(text).digest('hex'); var sign = base64encode(hash); // создаем заголовок let Authorization = `${key}:${sign}`; fetch('https://api.zadarma.com/v1/info/balance/', { headers: { Authorization }, }, ).then(res => res.json()).then(console.log) // { status: 'success', balance: 3.269, currency: 'USD' } Ссылка на сообщение
Igor 0 Опубликовано: 6 апреля 2020 Share Опубликовано: 6 апреля 2020 Спасибо за пример! Может на node также примеры опишем. Ссылка на сообщение
mikeKlech 0 Опубликовано: 7 апреля 2020 Share Опубликовано: 7 апреля 2020 Было бы очень хорошо, Igor. Увидел что у многих проблемы при отправлении запроса с параметрами. Параметры нужно вставить: let querry = httpBuildQuery({ number: '38063*******' }); 1. В md5 кодер let md5 = crypto.createHash('md5').update(querry).digest('hex'); 2. В строку запроса для кодирования sha1 let text = method + querry + md5; let hash = crypto.createHmac('sha1', secretKey).update(text).digest('hex'); 3. Непосредственно в саму строку запроса, где перед параметрами ставим знак вопроса. https://api.zadarma.com/v1/info/price/?number=38063********* Ссылка на сообщение
Igor_L 0 Опубликовано: 14 апреля 2020 Share Опубликовано: 14 апреля 2020 Привет! Может быть есть пример как из Node Red работать с API? Хотел бы автоматически звонить на несколько номеров в случае возникновения событий и проговаривать короткие тексты (1-2 фразы) . Ссылка на сообщение
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас