PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Lipost
Отправлено: 23 Июня, 2018 - 09:31:20
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2018  


Помог: 0 раз(а)




Прошу помочь, подскажите что не так.
Если указать значение $key = 'Здесь ключ API'; и $secret = 'Здесь секретный ключ'; непосредственно в файле, то все работает.
Но я решил эти данные хранить в Mysql в зашифрованном виде. Все нормально шифруется, расшифровывается и выводится echo $strapi_key; echo $strapi_secret;
Но в таком вот виде в ответ получаю ошибку "api key not specified" или "invalid"
Заранее благодарю за помощь.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $query = $db->query("SELECT * FROM test WHERE id='1'");
  3. $row = $query->fetch_assoc();
  4. function btce_query($method, array $req = array()) {
  5.  
  6. $codeapi_key = $row['api_key'];
  7. $strapi_key = __decode(hexToStr($codeapi_key),'$k');
  8. $codeapi_secret = $row['api_secret'];
  9. $strapi_secret = __decode(hexToStr($codeapi_secret),'$k');
  10.        
  11.        $key = $strapi_key;
  12.        $secret = $strapi_secret;
  13.  
  14.        $req['method'] = $method;
  15.        $mt = explode(' ', microtime());
  16.       $req['nonce'] = $mt[1];
  17.      // generate the POST data string
  18.       $post_data = http_build_query($req, '', '&');
  19.        $sign = hash_hmac('sha512', $post_data, $secret);
  20.        // generate the extra headers
  21.       $headers = array(
  22.                      'Sign: '.$sign,
  23.                      'Key: '.$key,
  24.       );
  25.      // our curl handle (initialize if required)
  26.        static $ch = null;
  27.       if (is_null($ch)) {
  28.             $ch = curl_init();
  29.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  30.              curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; WEX PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
  31.      }
  32.       curl_setopt($ch, CURLOPT_URL, 'https://site.com/api/');
  33.       curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  34.           curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  35.           curl_setopt($ch, CURLOPT_POST, true);
  36.       curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  37.       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  38.           curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
  39.       // run the query
  40.      $res = curl_exec($ch);
  41.       if ($res === false) throw new Exception('Could not get reply: '.curl_error($ch));
  42.      $dec = json_decode($res, true);
  43.       if (!$dec) throw new Exception('Invalid data received, please make sure connection is working and requested API exists');
  44.      return $dec;
  45. }
  46.  
 
 Top
Vladimir Kheifets
Отправлено: 23 Июня, 2018 - 20:51:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 263
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




Lipost пишет:
Прошу помочь, подскажите что не так.
Если указать значение $key = 'Здесь ключ API'; и $secret = 'Здесь секретный ключ'; непосредственно в файле, то все работает.
Но я решил эти данные хранить в Mysql в зашифрованном виде. Все нормально шифруется, расшифровывается и выводится echo $strapi_key; echo $strapi_secret;
Но в таком вот виде в ответ получаю ошибку "api key not specified" или "invalid"
Заранее благодарю за помощь.

Спойлер (Отобразить)

Добрый день!
Без вариантов, если получаете ошибку: "api key not specified" или "invalid", значит так оно и есть.
Попробуйте сравнить значения, 'Здесь ключ API и 'Здесь секретный ключ', с которыми работает, с теми, которые получены после запроса и расшифровки.
PHP:
скопировать код в буфер обмена
  1. echo strcmp($key, 'Здесь ключ API')."<br>";
  2. echo strcmp($secret, 'Здесь секретный ключ')."<br>";

Удачи!
 
 Top
Lipost
Отправлено: 23 Июня, 2018 - 22:51:40
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2018  


Помог: 0 раз(а)




Благодарю за ответ. Естественно, строки разные. Именно поэтому и выдает ошибку API. Проблема как раз в том, что не так, почему разные строки и как решить эту проблему.
Ведь после расшифровки
CODE (htmlphp):
скопировать код в буфер обмена
  1. echo $strapi_key;
  2. echo $strapi_secret;
выводит верно.

Затем присваиваем
CODE (htmlphp):
скопировать код в буфер обмена
  1. $key = $strapi_key;  
  2. $secret = $strapi_secret;

и дальше почему-то ошибка.

Почему? Где "собака зарыта"?
 
 Top
Vladimir Kheifets
Отправлено: 24 Июня, 2018 - 12:04:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 263
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




Lipost пишет:
Благодарю за ответ. Естественно, строки разные. Именно поэтому и выдает ошибку API. Проблема как раз в том, что не так, почему разные строки и как решить эту проблему.
Ведь после расшифровки
CODE (htmlphp):
скопировать код в буфер обмена
  1. echo $strapi_key;
  2. echo $strapi_secret;
выводит верно.

Затем присваиваем
CODE (htmlphp):
скопировать код в буфер обмена
  1. $key = $strapi_key;  
  2. $secret = $strapi_secret;

и дальше почему-то ошибка.
Почему? Где "собака зарыта"?

Добрый день!
Про собаку Вы очень кстати. "За время пути собака могла подрасти!"(Багаж, Маршак С.Я.)
Попробуйте воспользоваться моим советом:
CODE (php):
скопировать код в буфер обмена
  1. $key = $strapi_key;  
  2. $secret = $strapi_secret;
  3. echo strcmp($key, 'Здесь ключ API')."<br>";
  4. echo strcmp($secret, 'Здесь секретный ключ')."<br>";

Для начала необходимо понять, "подросла ли собака".
Если подрасла, то возможно проблема с кодировкой.
echo $strapi_key; может выводить тоже самое, но содеожимое может отличаться.
Удачи!
 
 Top
Lipost
Отправлено: 24 Июня, 2018 - 13:23:54
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2018  


Помог: 0 раз(а)




Я воспользовался Вашим советом и, как результат - строки разные, т.е. '0' не выводит. Вы же это имели ввиду? Кодировку файла менял, БД тоже, не помогло.

Попробую без шифрования и расшифровки из базы вывести и отправить.

(Отредактировано автором: 24 Июня, 2018 - 13:25:33)

 
 Top
Lipost
Отправлено: 25 Июня, 2018 - 12:03:35
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2018  


Помог: 0 раз(а)




Если без шифрования данные API добавляются в базу, то все-равно на выходе ошибка Огорчение
Прошу помочь советом. Что еще может быть?
 
 Top
Vladimir Kheifets
Отправлено: 25 Июня, 2018 - 13:29:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 263
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




Lipost пишет:
Если без шифрования данные API добавляются в базу, то все-равно на выходе ошибка Огорчение
Прошу помочь советом. Что еще может быть?

Добрый день!
Один из вебсервисов, с которым я работаю, даёт каждому клиенту на скачивание дневные пароли. Например,
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `B2Cpasswords` (`datum`, `password`) VALUES
  2. ('2008-08-07', '11G48J09B69V27L14F42');
Приходится их сохранять в базе данных (varchar(20) и запрашивать для каждого API-запроса.
Всё работает без проблем. НО, в этом случе, в паролях допускаются, только латинские символы и цифры. Если у Вас иначе, то тип varchar и техт использовать нежелательно.
Удачи!

(Отредактировано автором: 25 Июня, 2018 - 13:30:51)

 
 Top
Lipost
Отправлено: 26 Июня, 2018 - 21:51:53
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2018  


Помог: 0 раз(а)




Вопрос не решился пока.
Попробовал вывести после присваивания значения
CODE (htmlphp):
скопировать код в буфер обмена
  1. $key = $strapi_key;
  2. echo $key;

не хочет.
Хотя, если вывести за функцию,
CODE (htmlphp):
скопировать код в буфер обмена
  1. $query = $db->query("SELECT * FROM test WHERE id='1'");
  2. $row = $query->fetch_assoc();
  3. $codeapi_key = $row['api_key'];
  4. $strapi_key = __decode(hexToStr($codeapi_key),'$k');
  5. $codeapi_secret = $row['api_secret'];
  6. $strapi_secret = __decode(hexToStr($codeapi_secret),'$k');
  7. function btce_query($method, array $req = array()) {
  8.  

то $strapi_key выводится.
Может что-то с функцией btce_query не так? Точнее она рабочая, но только без этого кода
CODE (htmlphp):
скопировать код в буфер обмена
  1. $codeapi_key = $row['api_key'];
  2. $strapi_key = __decode(hexToStr($codeapi_key),'$k');
  3. $codeapi_secret = $row['api_secret'];
  4. $strapi_secret = __decode(hexToStr($codeapi_secret),'$k');

ну и, естественно, тогда необходимо прописывать в файле данные API
CODE (htmlphp):
скопировать код в буфер обмена
  1. $key = 'ключ';
  2. $secret = 'секрет';
 
 Top
Мелкий Супермодератор
Отправлено: 26 Июня, 2018 - 22:41:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11697
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 586 раз(а)




Функция? Однако Без выравнивания отступов её в исходном фрагменте и не видно.
Про области видимости переменных когда-нибудь слышали?

Ну и поставьте error_reporting в адекватный E_ALL.


-----
PostgreSQL DBA
 
 Top
Vladimir Kheifets
Отправлено: 27 Июня, 2018 - 07:53:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 263
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




Lipost пишет:
Вопрос не решился пока.
Попробовал вывести после присваивания значения
CODE (htmlphp):
скопировать код в буфер обмена
  1. $key = $strapi_key;
  2. echo $key;

не хочет.
Хотя, если вывести за функцию,
CODE (htmlphp):
скопировать код в буфер обмена
  1. $query = $db->query("SELECT * FROM test WHERE id='1'");
  2. $row = $query->fetch_assoc();
  3. $codeapi_key = $row['api_key'];
  4. $strapi_key = __decode(hexToStr($codeapi_key),'$k');
  5. $codeapi_secret = $row['api_secret'];
  6. $strapi_secret = __decode(hexToStr($codeapi_secret),'$k');
  7. function btce_query($method, array $req = array()) {
  8.  

то $strapi_key выводится.
Может что-то с функцией btce_query не так? Точнее она рабочая, но только без этого кода
CODE (htmlphp):
скопировать код в буфер обмена
  1. $codeapi_key = $row['api_key'];
  2. $strapi_key = __decode(hexToStr($codeapi_key),'$k');
  3. $codeapi_secret = $row['api_secret'];
  4. $strapi_secret = __decode(hexToStr($codeapi_secret),'$k');

ну и, естественно, тогда необходимо прописывать в файле данные API
CODE (htmlphp):
скопировать код в буфер обмена
  1. $key = 'ключ';
  2. $secret = 'секрет';

Мелкий пишет:
Про области видимости переменных когда-нибудь слышали?

Добрый день!
У Вас $row не передаётся в функцию btce_query
Удачи!

(Отредактировано автором: 27 Июня, 2018 - 07:59:34)

 
 Top
Lipost
Отправлено: 27 Июня, 2018 - 11:45:02
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2018  


Помог: 0 раз(а)




Vladimir Kheifets пишет:

У Вас $row не передаётся в функцию btce_query
Удачи!


Спасибо за помощь. Все заработало.

P.S. Не могу поставить спасибо. При клике выдает "Пожалуйста, только корректным способом входите в скрипт"

(Отредактировано автором: 27 Июня, 2018 - 11:49:23)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB