ФорумПрограммированиеPHP для идиотов → Mail.ru API и кусок говнокода, кто курил?

Mail.ru API и кусок говнокода, кто курил?

  • ivanscm

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

    Spritz 1 декабря 2010 г. 15:41

    Делаю так http://api.mail.ru/docs/guides/sites/ , затем так http://api.mail.ru/docs/reference/rest/users-getinfo/ нижним кодом :)

    	$secret = "***********";
    $url = "http://www.appsmail.ru/platform/api";
    $app_id = "******";
    function sign_server_server(array $request_params, $secret_key) {
    ksort($request_params);
    $params = '';
    foreach ($request_params as $key => $value) {
    $params .= "$key=$value";
    }
    return md5($params . $secret_key);
    }

    function parseQueryString($str) {
    $op = array();
    $pairs = explode("&", $str);
    foreach ($pairs as $pair) {
    list($k, $v) = array_map("urldecode", explode("=", $pair));
    $op[$k] = $v;
    }
    return $op;
    }

    function get_url($query) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $query);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    return curl_exec($ch);
    curl_close($ch);
    }

    if (isset($_COOKIE['mrc'])) {
    $mrc = parseQueryString(urldecode($_COOKIE['mrc']));

    $fr = array('app_id'=>$app_id, 'method'=>'users.getInfo','session_key'=>$mrc['session_key'], 'uids'=>$mrc['oid']);
    $sign = sign_server_server($fr, $secret);
    $rr = '';
    foreach ($fr as $key => $value) {
    $rr .= "$key=$value&";
    }

    $rurl = $url.'?'.$rr.'sig='.$sign;

    echo get_url($rurl);

    }


    пилять 2 суток уже не сплю, а вот надо мне авторизроваться и инфу дернуть
    Спустя 27 сек.
    а говорит мол
    {"error":{"error_msg":"Incorrect signature","error_code":104}}
    Спустя 49 сек.
    И что бы помогли мне разобраться, когда я проснусь :)))
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • Frozzeg

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

    Spritz 1 декабря 2010 г. 15:45, спустя 3 минуты 30 секунд

    у меня вопрос по поводу написания функций в стиле

    function() {
    //TODO….
    }


    чем это удобно? или типа экономия строк кода?
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • ivanscm

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

    Spritz 1 декабря 2010 г. 15:49, спустя 4 минуты 20 секунд


    у меня вопрос по поводу написания функций в стиле

    function() {
    //TODO….
    }


    чем это удобно? или типа экономия строк кода?
    хз я привык
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • Абырвалг

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

    Spritz 1 декабря 2010 г. 16:03, спустя 13 минут 45 секунд

    <?php

    class MailRuApi
    {
    protected $appSecret;
    protected $appId;
    protected $apiUrl = 'http://www.appsmail.ru/platform/api';

    public function __construct($appId, $appSecret)
    {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
    }

    public function api($method, array $params = array())
    {
    $params = array_merge($params, array(
    'format' => 'json',
    'app_id' => $this->appId,
    'secure' => '1',
    'method' => $method,
    'session_key' => $this->getSessionKey()
    ));

    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);
    }

    protected $cookie = array();

    public function getSessionKey()
    {
    return isset($this->cookie['session_key']) ? $this->cookie['session_key'] : false;
    }

    public function isAuth()
    {
    if (!isset($_COOKIE['mrc']))
    return false;

    $mrcCookie = $_COOKIE['mrc'];

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

    foreach (explode('&', $mrcCookie) as $item) {
    list($key, $value) = explode('=', $item);
    $data[$key] = $value;
    $this->cookie[$key] = $value;
    }

    if (null === $this->api('users.isAppUser')) {
    return false;
    }

    // ID пользователя mail ru.
    return $data['vid'];
    }

    return false;
    }

    }



    	$mrc = new MailRuApi(MRC_APP_ID, MRC_SECRET);
    if ($uid = $mrc->isAuth()) {
    if (!$mrc->api('users.isAppUser')) {
    $loginWarnText = 'Вы не установили наше приложение';
    } else {
    $me = $mrc->api('users.getInfo', array('uids' => $uid));
    $me = $me[0];

    $me['nickname'] = explode('@', $me['email']);
    $me['nickname'] = $me['nickname'][0];
    }
    } else {
    $loginWarnText = 'Вы не вошли под своей учетной записью на моем мире';
    }
  • Sinkler

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

    Spritz 1 декабря 2010 г. 16:07, спустя 4 минуты 35 секунд

    я, кстати, логинзу попробовал, ниче так, нормуль, буду юзать
  • Biggless

    Сообщения: 78 Репутация: N Группа: Кто попало

    Spritz 1 декабря 2010 г. 17:19, спустя 1 час 12 минут 3 секунды

    по поводу логинзы - нет ли часом модуля для коханы?
  • Sinkler

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

    Spritz 1 декабря 2010 г. 18:00, спустя 40 минут 26 секунд

    Biggless, если знаешь, как пишутся модули для коханы, написать - не проблема =D
  • ivanscm

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

    Spritz 1 декабря 2010 г. 22:54, спустя 4 часа 53 минуты 51 секунду

    Абырвалг, думаешь поможет?
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • rider-sx

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

    Spritz 2 декабря 2010 г. 4:06, спустя 5 часов 12 минут 23 секунды


    я, кстати, логинзу попробовал, ниче так, нормуль, буду юзать
    http://pyha.ru/forum/topic/5018.0 :)
  • Абырвалг

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

    Spritz 2 декабря 2010 г. 4:15, спустя 8 минут 46 секунд


    Абырвалг, думаешь поможет?

    я уж не знаю: поможет это тебе или нет, но я этим кодом пользуюсь и все работает
  • kostyl

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

    Spritz 2 декабря 2010 г. 7:53, спустя 3 часа 38 минут 27 секунд

    Абырвалг, $this->cookie ??
  • Абырвалг

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

    Spritz 2 декабря 2010 г. 7:55, спустя 1 минуту 41 секунду

    это писалось в стиле "побыстрее сделать и забыть"
  • kostyl

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

    Spritz 2 декабря 2010 г. 17:53, спустя 9 часов 58 минут 14 секунд

    Абырвалг, ааа… знаешь как оно, если чёто не то как бы, то сразу в глаза бросается..)))

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