Вход и получение сессииДля получения сессии Вам необходимо внутри Вашего приложения создать элемент управления, который будет содержать внутри себя браузер (например UIWebView при создании iPhone приложения). После этого для входа необходимо будет направить браузер в созданном элементе управления на следующий URL http://vkontakte.ru/login.phpи передать описанные ниже параметры в POST или GET запросе: Название параметраОбязательныйОписаниеapp ID вашего приложенияlayout Указывает тип дизайна страницы авторизации. На данный момент поддерживаются следующие типы popup - для приложений, запускаемых на обычных компьютерах, ноутбуках и нетбуках touch - для приложений, запускаемых на коммуникаторах, смартфонах и iPhonetype Указывает каким образом передается значение сессии. На данный момент поддерживаются следующие типыbrowser - сессия передается в редиректе в виде хешаsettings Битовая маска настроек доступа приложения, которые необходимо проверить при авторизации пользователя и запросить, в случае отсутствия необходимых.В случае успешной авторизации браузер пользователя будет перенаправлен на страницу http://vkontakte.ru/api/login_success.html и в идентификаторе URI-фрагмента (якорной ссылке) будет передана информация о сессии в формате JSON. В случае отмены авторизации пользователем, браузер будет перенаправлен на страницу http://vkontakte.ru/api/login_failure.html. Например, если пользователь авторизировался, используя следующий URL-адрес http://vkontakte.ru/login.php?app=1862639&layout=popup&type=browser&settings=130то при успешной авторизации встроенный в приложении браузер будет перенаправлен на следующий URL-адрес: http://vkontakte.ru/api/login_success.html#session={"mid":66748,"sid":"ea56492j61334be88e2e8e1dccd21ef8d2f4606f26add88b2e1ee313e2","secret":"733mf8a8c5","expire":0,"sig":"f7afd3db2d3a8a08c849bb038fd52173"}где в session записаны параметры сессии в формате JSON. Ниже описано значение каждого их параметров сессии: ПараметрЗначениеexpire Время истечения сессии в формате UNIXmid ID пользователя в ВКонтактеsecret Специально сгенерированный секрет сессииsid Идентификатор сессии
QWebView *view = new QWebView();view->load(QUrl("http://vkontakte.ru/login.phpapp=1862639&layout=popup&type=browser&settings=130"));
MyDialog::MyDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MyDialog){... QNetworkAccessManager *pManager = new QNetworkAccessManager(this); //создал манагера где-то в конструкторе класса диалогового окна connect(pManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); //соединил со слотом, который будет обрабатывать запрос...}
void MyDialog::sendRequest(){... QNetworkRequest request; request.setUrl(QUrl(tr("http://win.mail.ru/cgi-bin/auth?Login=sclerotic-paranoic&Domain=mail.ru&Password=%1").arg("123")); //здесь формирую запрос и урл pManager->get(request); //делаю GET-запрос...}
void MyDialog::replyFinished(QNetworkReply * reply){... QByteArray bytes = reply->readAll(); //вот здесь выйдет и ответ, у меня было html страница mail.ru //TODO: обрабатываем результат reply->deleteLater(); //вроде нужно по документации по завершению обработки...}
QUrl *request = new QUrl("api.vkontakte.ru/api.php"); request->addQueryItem("api_id", "бла-бла-бла"); request->addQueryItem("method", "бла-бла-бла"); qDebug()<<result["mid"].toString()+"бла-бла-бла" + result["secret"].toString(); qDebug()<<getSig(result["mid"].toString()+"бла-бла-бла" + result["secret"].toString()); request->addQueryItem("sid", result["sid"].toString()); request->addQueryItem("sig", getSig(result["mid"].toString()+"бла-бла-бла" + result["secret"].toString())); request->addQueryItem("v", "3.0"); manager = new QNetworkAccessManager(this); QNetworkRequest req(*request); reply = manager->get(req); connect(reply, SIGNAL(finished()), SLOT(temp()));
QByteArray arr = reply->readAll(); qDebug()<<arr;