За последние 24 часа нас посетили 15575 программистов и 1550 роботов. Сейчас ищут 892 программиста ...

Проблема с API Yandex.Money

Тема в разделе "Прочие вопросы по PHP", создана пользователем m3rkus, 1 авг 2014.

  1. m3rkus

    m3rkus Новичок

    С нами с:
    1 авг 2014
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, недавно начал изучать php и Yandex money SDK для php (https://github.com/yandex-money/yandex-money-sdk-php) и столкнулся с такой проблемой: есть хостинг аккаунт на хостингер.ру, написал скрипт который должен получать токен от яндекса для дальнейшей работы с апи, загрузил на сервер билиотеку с гитхаба. подключил в скрипт. При запуске скрипта выдает странную ошибку:
    Fatal error: Class 'YandexMoney' not found in /home/u718825730/public_html/api_get_token.php on line 11.
    Как будто не находит класс в подключенной библиотеке. Подключаю библиотеку через require_once. Грешил на права файлов на хостинге, ставил даже на все 755, все равно ошибка остается, все пути перепроверил по сто раз,подскажите пожалуйста из-за чего такое может быть, буду очень благодарен за помощь. Вот скрипт собственно(дефайны затер в целях безопасности):
    Код (Text):
    1.  
    2.     <?php
    3.     define ('CLIENT_ID', 'CLIENT_ID');
    4.     define ('REDIRECT_URI', 'REDIRECT_URI');
    5.     define ('CLIENT_SECRET', 'CLIENT_SECRET');
    6.  
    7.     require_once "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php";
    8.  
    9.     $code = $_GET['code'];
    10.     if(!isset($code)) { // посылаем человека на страницу подтверждения получения токена приложением
    11.         $scope = "account-info " . "payment-p2p " . "payment-shop";
    12.         $authUri = YandexMoney::authorizeUri(CLIENT_ID, REDIRECT_URI, $scope);
    13.         header('Location: ' . $authUri);
    14.         exit();
    15.     }
    16.     ?>
    17.     <html>
    18.         <head>
    19.             <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    20.             <title>Yandex.Money PHP SDK</title>
    21.         </head>
    22.         <body>
    23.             <div>
    24.                 <h3>Yandex.Money PHP - Getting token</h3>
    25.                 <?php
    26.                 $ym = new YandexMoney(CLIENT_ID, './ym.log');
    27.                 $receiveTokenResp = $ym->receiveOAuthToken($code, REDIRECT_URI, CLIENT_SECRET);
    28.  
    29.                 print "<p>";
    30.                 if($receiveTokenResp->isSuccess()) {
    31.                     $token = $receiveTokenResp->getAccessToken();
    32.                     print "Receive token: " . $token; // вывод токена
    33.                 }
    34.                 else {
    35.                     print "Error: " . $receiveTokenResp->geterror();
    36.                     die();
    37.                 }
    38.                 print "</p>";
    39.                 ?>
    40.             </div>
    41.         </body>
    42.     </html>
     
  2. s.melukov

    s.melukov Новичок

    С нами с:
    31 июл 2014
    Сообщения:
    78
    Симпатии:
    0
    содержимое файла "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php" пожалуйста :)

    Добавлено спустя 4 минуты 49 секунд:
    Код (Text):
    1. echo require_once "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php";
    что выдает?
     
  3. m3rkus

    m3rkus Новичок

    С нами с:
    1 авг 2014
    Сообщения:
    6
    Симпатии:
    0
  4. s.melukov

    s.melukov Новичок

    С нами с:
    31 июл 2014
    Сообщения:
    78
    Симпатии:
    0
    всё ясно... там используются пространства имен...
    попробуйте так...
    создайте в папке YandexMoney файл autoloader.php
    впишите в него следующее
    Код (Text):
    1. spl_autoload_register(function($className)
    2. {
    3.     require_once(__DIR__."/".str_replace("\\", "/", $className).".php");
    4. });
    и теперь вместо
    Код (Text):
    1. require_once "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php";
    пишите
    Код (Text):
    1. require_once "/home/u718825730/public_html/lib/YandexMoney/autoloader.php";
    Добавлено спустя 5 минут 53 секунды:
    и после required_once вставьте
    Код (Text):
    1. use YandexMoney\YandexMoney;
     
  5. m3rkus

    m3rkus Новичок

    С нами с:
    1 авг 2014
    Сообщения:
    6
    Симпатии:
    0
    Спасибо Вам большое за отзывчивость, все сделал, но к сожалению не помогло. Та же ошибка: Fatal error: Class 'YandexMoney' not found in /home/u718825730/public_html/api_get_token.php on line 11.
     
  6. s.melukov

    s.melukov Новичок

    С нами с:
    31 июл 2014
    Сообщения:
    78
    Симпатии:
    0
    прошу прощения... внутри папки lib создаем файл autoloader.php
    )))

    Добавлено спустя 50 секунд:
    и соответственно required_once делаем к "/home/u718825730/public_html/lib/autoloader.php";

    Добавлено спустя 1 минуту 32 секунды:
    то есть должно получится вот так
    Код (Text):
    1. require_once "/home/u718825730/public_html/lib/autoloader.php";
    2. use YandexMoney\YandexMoney;
     
  7. m3rkus

    m3rkus Новичок

    С нами с:
    1 авг 2014
    Сообщения:
    6
    Симпатии:
    0
    Теперь выводит: Fatal error: Call to undefined method YandexMoney\YandexMoney::authorizeUri() in /home/u718825730/public_html/api_get_token.php on line 14. Буду разбираться)
     
  8. s.melukov

    s.melukov Новичок

    С нами с:
    31 июл 2014
    Сообщения:
    78
    Симпатии:
    0
    а вот это уже говорит о том, что Ваш скрипт, скорее всего, был написан под старую версию API
    а в текущей видимо, ссылка на получение токена генирируется через другой метод
     
  9. m3rkus

    m3rkus Новичок

    С нами с:
    1 авг 2014
    Сообщения:
    6
    Симпатии:
    0
  10. s.melukov

    s.melukov Новичок

    С нами с:
    31 июл 2014
    Сообщения:
    78
    Симпатии:
    0
    на главной странице проекта на гитхабе тоже фигурирует метод
    YandexMoney\YandexMoney::authorizeUri()
    могу предположить что это недочет разработчиков, тк в демо-приложении вот здесь
    https://github.com/yandex-money/yandex-money-sdk-php/blob/m ... /index.php
    алгоритм получения ссылки на получение авторизации другой, посмотрите сами

    Добавлено спустя 4 минуты 34 секунды:
    да, метод authorizeUri() применялся в 1.3.*
    а сейчас версия sdk 2.0

    Добавлено спустя 1 минуту 59 секунд:
    но там правда и класс по-другому назывался.... не YandexMarket а Client
    так что у меня всё больше подозрений что разработчики чего-то напутали в документации :)

    Добавлено спустя 2 минуты 52 секунды:
    https://github.com/yandex-money/yandex-money-sdk-php/blob/m ... xMoney.php
    21 строка :)
     
  11. m3rkus

    m3rkus Новичок

    С нами с:
    1 авг 2014
    Сообщения:
    6
    Симпатии:
    0
    Ужас какой-то, яндекс и путаница в документации, это очень странно, крупная же компания, спасибо Вам большое за помощь, буду смотреть их приложение sample и досконально разбираться!
     
  12. s.melukov

    s.melukov Новичок

    С нами с:
    31 июл 2014
    Сообщения:
    78
    Симпатии:
    0
    не за что!
    удачи!

    Добавлено спустя 50 секунд:
    ну знаете... 1с-битрикс тоже крупная компания..........
     
  13. s.melukov

    s.melukov Новичок

    С нами с:
    31 июл 2014
    Сообщения:
    78
    Симпатии:
    0
    Каковы Ваши успехи в решении данной проблемы? :)