ФорумПрограммированиеPHP для идиотов → Раздуплите как контакт возвращает sig

Раздуплите как контакт возвращает sig

  • Абырвалг

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

    Spritz 14 ноября 2010 г. 13:51

    есть спижженный и немного доведенный до ума код, рабочий
    	public function isAuth()
    {
    if (!isset($_COOKIE["vk_app_{$this->appId}"]))
    return false;

    $vkCookie = $_COOKIE["vk_app_{$this->appId}"];

    if (!empty($vkCookie)) {
    $data = array();
    // parse_str должна спасти отца русской демократии, но хуй с ним
    foreach (explode('&', $vkCookie) as $item) {
    list($key, $value) = explode('=', $item);
    $data[$key] = $value;
    }

    // Проверяем sig
    $string = sprintf("expire=%smid=%ssecret=%ssid=%s%s", $data['expire'], $data['mid'], $data['secret'], $data['sid'], $this->appSecret);

    if (md5($string) == $data['sig']) {
    // sig не подделан - возвращаем ID пользователя ВКонтакте.
    return $data['mid'];
    }
    }

    return false;
    }


    и вот мне маленько непонятно: у нас есть sig, мы его конкатенируем к строке, потом считаем md5 от этой строки и этот md5 равен нашему sig. Как такое возможно?
  • Frozzeg

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

    Spritz 14 ноября 2010 г. 14:01, спустя 10 минут 35 секунд

    ололо?
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • truth4oll

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

    Spritz 14 ноября 2010 г. 14:06, спустя 4 минуты 36 секунд

    мб , sid!=sig
  • Абырвалг

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

    Spritz 14 ноября 2010 г. 14:09, спустя 3 минуты 6 секунд

    блиааа, я тупо не заметил, спасибо
  • truth4oll

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

    Spritz 17 ноября 2010 г. 5:22, спустя 2 дня 15 часов 12 минут

    Абырвалг, а что за класс который подпиливал? где найти
  • Абырвалг

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

    Spritz 17 ноября 2010 г. 5:44, спустя 22 минуты 39 секунд

    да там нихуя особо интересного.
    <?php

    class VkApi
    {
    protected $appSecret;
    protected $appId;
    protected $apiUrl;

    public function __construct($appId, $appSecret, $url = 'api.vk.com/api.php')
    {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
    if (!strstr($url, 'http://')) {
    $url = 'http://'.$url;
    }
    $this->apiUrl = $url;
    }

    public function api($method, array $params = array())
    {
    $params['api_id'] = $this->appId;
    $params['v'] = '3.0';
    $params['method'] = $method;
    $params['timestamp'] = time();
    $params['format'] = 'json';
    $params['random'] = rand(0,10000);
    ksort($params);

    $sig = '';
    foreach($params as $k=>$v) {
    $sig .= $k.'='.$v;
    }
    $sig .= $this->appSecret;
    $params['sig'] = md5($sig);

    $query = $this->apiUrl . '?' . $this->paramsToString($params);
    $res = file_get_contents($query);

    return json_decode($res, true);
    }

    protected function paramsToString($params)
    {
    //TODO: http_build_str?
    $pice = array();
    foreach($params as $k => $v) {
    $pice[] = $k . '=' . urlencode($v);
    }

    return implode('&', $pice);
    }

    public function isAuth()
    {
    if (!isset($_COOKIE["vk_app_{$this->appId}"]))
    return false;

    $vkCookie = $_COOKIE["vk_app_{$this->appId}"];

    if (!empty($vkCookie)) {
    $data = array();

    foreach (explode('&', $vkCookie) as $item) {
    list($key, $value) = explode('=', $item);
    $data[$key] = $value;
    }

    // Проверяем sig
    $string = sprintf("expire=%smid=%ssecret=%ssid=%s%s", $data['expire'], $data['mid'], $data['secret'], $data['sid'], $this->appSecret);

    if (md5($string) == $data['sig']) {
    // sig не подделан - возвращаем ID пользователя ВКонтакте.
    return $data['mid'];
    }
    }

    return false;
    }

    }


    может когда-нить сделаю Pyha\Service\Vk, Pyha\Service\Mrc, Pyha\Service\Facebook
  • phpdude

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

    Spritz 17 ноября 2010 г. 5:47, спустя 2 минуты 58 секунд

    Pyha\Service\Vk, Pyha\Service\Mrc, Pyha\Service\Facebook

    :D

    нахуй?)
    Сапожник без сапог
  • Абырвалг

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

    Spritz 17 ноября 2010 г. 5:49, спустя 1 минуту 24 секунды

    сам не знаю. Потренироваться в скриптописании)
    "может когда-нить" обычно равно никогда
  • phpdude

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

    Spritz 17 ноября 2010 г. 5:54, спустя 4 минуты 59 секунд

    "может когда-нить" обычно равно никогда

    да, ты прав :)
    Сапожник без сапог
  • truth4oll

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

    Spritz 17 ноября 2010 г. 6:55, спустя 1 час 1 минуту 52 секунды

    а, ну да тут только основное
    я вот придумал, сделал группу в контактике для "города", и хочу рулить ею автоматом,
    там темы создавать, заметки оставлять,и одна из опций, погода на аватарке группы)
    скриптиком  накладывать на аватарку температуру, ну и визуально облачко там, дождик и загружать  2 раза в день) а вообще простор для фантазии)

    вообщем виджеты на аватарке в контакте)

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