ФорумПрограммированиеПыхнуть хотите?Готовые решения → openId и vk OpenAPI классы

openId и vk OpenAPI классы

  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 10:36, спустя 7 часов 17 минут 49 секунд

    LightOpenID класс:
    В атаче.
    Сразу говорю - класс не мой. Я его немного поменял ибо изначально был сделан не удобно на мой взгляд.
    Еще при включенном опенбейсдир или сейф мод вылетал варнинг, при этом при правильном указании опенайди все работало бы (а так хеадерс олреди сент). В общем собаку поставил.

    Пример:
    <?php
    header('Content-type: text/html; charset=utf-8');
    require_once "include/class_openid.php";
    try {
       if(!isset($_GET['openid_mode'])) {
           if(isset($_POST['openid'])) {
               $openid = new LightOpenID;
               $openid->setId( $_POST['openid'] );
               $openid->redirect();
           }
    ?>
    <form action="" method="post">
       OpenID: <input type="text" name="openid" /> <input type="submit" value = "Гоу" />
    </form>
    <?php
       } elseif($_GET['openid_mode'] == 'cancel') {
           echo 'Хуй!';
       } else {
           $openid = new LightOpenID;
           echo 'Юзер ' . ($openid->validate() ? $openid->getId() . ' ' : 'не ') . 'авторизовался.';
       }
    } catch(ErrorException $e) {
       echo $e->getMessage();
    }


    Бонус.
    Несколько OpenID сайтов, где не нужно вводить свои логины. То есть ваш опенайди постоянен и его можно инпут хидден загнать.
    http://openid.yandex.ru/
    https://www.google.com/accounts/o8/id
    https://me.yahoo.com/
    https://myvidoop.com/
    https://pip.verisignlabs.com/

    VkOpenApi класс
    Класс в атаче.
    Класс мой. Хотя идею одной проверки высмотрел в другом подобном классе. Но он откровенно слабый.
    Пример.
    <?php
    header('Content-type: text/html; charset=utf-8');
    require_once "openapi.class.php";
    $vk = new VkOpenApi('12345', 'password', 'openapi.example.php'); //12345 - айди приложения, password - ваш пароль
    if ($vk->isAuth()) {
    echo "Твой вконтактовский айди: " . $vk->isAuth();
    } elseif ($_GET['action'] == 'receiver') {
    $vk->drowReceiver();
    } else {
    echo "Фирменная кнопка от ВКонтакте: " . $vk->drowVkButton() . "<br />";
    echo "Фирменная кнопочка от HTML: " . $vk->drowYorButton('<button>Вконтакте</button>');
    }

    Методы:
    __construct ($appId, $appPass, $openIdFile):
    $appId      }
                   } ID и Пароль вашего приложения вконтакте. Подробенее: http://vkontakte.ru/developers.php?o=-1&p=Open+API
    $appPass   }
    $openIdFile файл на который прийдет результат после авторизации.
    isAuth():
    проверяет авторизовался ты вконтакте или нет. Если авторизовлся, то возвращает ID. Если не авторизован, то false.
    getId():
    Возвращает ID вконтакте, если человек авторизован иначе false.
    Отличается от isAuth тем, что это не проверка аторизованнности, а плучение id.
    То есть результаты тут как бы кешируются :)
    logout():
    Чистит вконтактовскую куку
    drowVkButton():
    Возваращает фирменную вконтактовскую кнопку "Войти ВКонтакте". Скрипты тоже возвращаюся.
    drowYorButton($button):
    $button - хтмл код кнопки. При клике на нее будет заходить вконтакт.
    drowReceiver():
    Вырисовывает служебную страницу. Ее нужно вырисвывать если ваш обратный файл указанный в конструкторе получил $_GET['action'] = 'receiver';
    До нее лучше ничего не выводить. Не знаю как он себя в таком случае поведет.
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 29 августа 2010 г. 0:56, спустя 14 часов 19 минут 55 секунд

    Молодец!
    Спустя 15 сек.
    вылысыпыдыст!
    Спустя 17 сек.
    но молодец!
    С возвращением, Пiха!
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 1:58, спустя 1 час 2 минуты 5 секунд

    ivanscm, почему велосепидист то?
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 29 августа 2010 г. 2:01, спустя 2 минуты 51 секунду

    опенид классы есть как бэ так
    Спустя 59 сек.
    но молодец :)
    С возвращением, Пiха!
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 2:06, спустя 4 минуты 49 секунд

    Судя по последней теме.
    1) Есть ахуенная, но пиздец здоровая библиотека файлов в 50.
    2) Есть симпле опенайди класс 2006 года без поддержки 2.0
    3) есть еще пару классов за которыми надо что то таскать.
    4) Есть лайт опенайди, про который что то никто не знает. Но у него есть пару косячков, плюс он мне не показался совсем удобным. Поэтому я его чуть изменил под себя. Ну и выложил. Оригинал по названию класса нагуглят кому надо.
    PS у кого нить на http://durov.at авторизуется? или это у меня касяк какой то?
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 29 августа 2010 г. 2:25, спустя 18 минут 44 секунды

    PS у кого нить на http://durov.at авторизуется? или это у меня касяк какой то?

    у мну нет. пага рефрешиться постоянно.

    а относительно темы - уже сказал - молодец, епт!
    С возвращением, Пiха!
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 2:29, спустя 3 минуты 56 секунд

    Спасибо, успокоил. Ща выложу класс для контакта.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 3:13, спустя 44 минуты 49 секунд

    Обновил первый пост.
    Авторизация через контакт сейчас не работает по вине контакта =)
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 29 августа 2010 г. 3:17, спустя 3 минуты 21 секунду

    Авторизация через контакт сейчас не работает по вине контакта =)

    да ладно, сначала пхп выучи, нуб :)))
    ахуенчик, будем юзать скоро :)
    С возвращением, Пiха!
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 3:18, спустя 1 минуту 41 секунду

    xD
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2010 г. 16:31, спустя 15 дней 13 часов 13 минут

    Небольшой класс расширение для получения openid основных провадеров. Доплняйте есличо.

    <?php
    /**
    * @package openidprovidersclass
    * @author Vasenin Matvey <[email protected]>
    * @copyright © 2010 Vasenin Matvey <[email protected]>
    **/
    class openIdProviders extends LightOpenID {
    /**
    * Список провайдеров с постоянным опенайди
    */
       protected $_simple = array (
    'google'   => 'https://www.google.com/accounts/o8/id',
    'yandex'   => 'http://openid.yandex.ru/',
    'yahoo'    => 'https://me.yahoo.com/',
    'myvidoop' => 'https://myvidoop.com/',
    'verisign' => 'https://pip.verisignlabs.com/'
    );

    /**
    * Список провайдеров, где нужно заменить лишь логин в адресной строке. % заменяетя н логин
    */
    protected $_replace = array (
    'aol'         => 'http://openid.aol.com/%',
    'blogger'     => 'http://%.blogspot.com',
    'flickr'      => 'http://www.flickr.com/photos/%',
    'livedoor'    => 'http://profile.livedoor.com/%',
    'lj'          => 'http://%.livejournal.com',
    'livelournal' => 'http://%.livejournal.com',
    'wordpress'   => 'http://%.wordpress.com',
    'wp'          => 'http://%.wordpress.com',
    'vox'         => 'http://%.vox.com',
    'rambler'     => 'http://id.rambler.ru/users/%',
    'livinternet' => 'http://www.liveinternet.ru/users/%'
    );

    /**
    * Список провайдеров, где для получения id нужно заюзать регулярки
    */
    protected $_preg = array(
    'mail.ru' => array (
    'pattern'     => '/(.*?)@(mail|list|bk|inbox).ru/i',
    'replacement' => 'http://$1.id.$2.ru'
    )
    );

    public function __construct () {
    parent::__construct();
    }

    /**
    * Получить опенайди провайдера
    * @param str $provider имя провайдера
    * @param str $subject необязателен, если провайдер имеет постоянный опенайди. Иначе логин или еще что то (в случа с меил ру - почту)
    * @return false если такого провайдера нет, иначе опенайди
    */
    public function getOpenId ($provider, $subject = false) {
    switch (true) {
    case isset ($this->$_simple[$provider]):
    return $this->$_simple[$provider];
    case isset ($this->$_replace[$provider]):
    if (!$subject) throw new Exception("Subject can not be empty in $provider provider");
    return $this->str_ireplace('%', $subject, $_replace[$provider]);
    case isset ($this->$_preg[$provider]):
    if (!$subject) throw new Exception("Subject can not be empty in $provider provider");
    return $this->preg_replace($_preg[$provider]['pattern'], $_preg[$provider]['replacement'], $_replace[$provider]);
    default:
    return false;
    }
    }
    }
    Спустя 213 сек.
    PS Не проверял работоспособность. Но вообще должен работать.

    ЭТОТ КЛАСС НИХУЯ НЕ РАБОТАЕТ. Завтра вечером выложу рабочий.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 10:39, спустя 18 часов 7 минут 5 секунд

    вкопенапи обновил.
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 29 августа 2010 г. 18:51, спустя 8 часов 12 минут 54 секунды

    А реально ли как нибудь реализовать авторизацию через openID не использую курл?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 29 августа 2010 г. 21:59, спустя 3 часа 7 минут 44 секунды

    rider-sx, через сокеты?
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 30 августа 2010 г. 3:30, спустя 5 часов 31 минуту 4 секунды

    rider-sx, да. Попробуй функцию request замени на сокеты или попробуй может даже файлгетконтентс покатит

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