Здравствуйте, недавно начал изучать 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): <?php define ('CLIENT_ID', 'CLIENT_ID'); define ('REDIRECT_URI', 'REDIRECT_URI'); define ('CLIENT_SECRET', 'CLIENT_SECRET'); require_once "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php"; $code = $_GET['code']; if(!isset($code)) { // посылаем человека на страницу подтверждения получения токена приложением $scope = "account-info " . "payment-p2p " . "payment-shop"; $authUri = YandexMoney::authorizeUri(CLIENT_ID, REDIRECT_URI, $scope); header('Location: ' . $authUri); exit(); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Yandex.Money PHP SDK</title> </head> <body> <div> <h3>Yandex.Money PHP - Getting token</h3> <?php $ym = new YandexMoney(CLIENT_ID, './ym.log'); $receiveTokenResp = $ym->receiveOAuthToken($code, REDIRECT_URI, CLIENT_SECRET); print "<p>"; if($receiveTokenResp->isSuccess()) { $token = $receiveTokenResp->getAccessToken(); print "Receive token: " . $token; // вывод токена } else { print "Error: " . $receiveTokenResp->geterror(); die(); } print "</p>"; ?> </div> </body> </html>
содержимое файла "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php" пожалуйста Добавлено спустя 4 минуты 49 секунд: Код (Text): echo require_once "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php"; что выдает?
содержимое файла YandexMoney.php ---- https://github.com/yandex-money/yandex-money-sdk-php/blob/m ... xMoney.php Код (Text): echo require_once "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php"; выдает: 1.
всё ясно... там используются пространства имен... попробуйте так... создайте в папке YandexMoney файл autoloader.php впишите в него следующее Код (Text): spl_autoload_register(function($className) { require_once(__DIR__."/".str_replace("\\", "/", $className).".php"); }); и теперь вместо Код (Text): require_once "/home/u718825730/public_html/lib/YandexMoney/YandexMoney.php"; пишите Код (Text): require_once "/home/u718825730/public_html/lib/YandexMoney/autoloader.php"; Добавлено спустя 5 минут 53 секунды: и после required_once вставьте Код (Text): use YandexMoney\YandexMoney;
Спасибо Вам большое за отзывчивость, все сделал, но к сожалению не помогло. Та же ошибка: Fatal error: Class 'YandexMoney' not found in /home/u718825730/public_html/api_get_token.php on line 11.
прошу прощения... внутри папки lib создаем файл autoloader.php ))) Добавлено спустя 50 секунд: и соответственно required_once делаем к "/home/u718825730/public_html/lib/autoloader.php"; Добавлено спустя 1 минуту 32 секунды: то есть должно получится вот так Код (Text): require_once "/home/u718825730/public_html/lib/autoloader.php"; use YandexMoney\YandexMoney;
Теперь выводит: Fatal error: Call to undefined method YandexMoney\YandexMoney::authorizeUri() in /home/u718825730/public_html/api_get_token.php on line 14. Буду разбираться)
а вот это уже говорит о том, что Ваш скрипт, скорее всего, был написан под старую версию API а в текущей видимо, ссылка на получение токена генирируется через другой метод
Брал пример с оф репы с гитхаба вот здесь ---- https://github.com/yandex-money/yandex-money-sdk-php#oauth- ... -receiving Все методы только оттуда, не понимаю в чем может быть проблема
на главной странице проекта на гитхабе тоже фигурирует метод 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 строка
Ужас какой-то, яндекс и путаница в документации, это очень странно, крупная же компания, спасибо Вам большое за помощь, буду смотреть их приложение sample и досконально разбираться!
не за что! удачи! Добавлено спустя 50 секунд: ну знаете... 1с-битрикс тоже крупная компания..........