Переход с vk api 2.0 на 3.0

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Переход с vk api 2.0 на 3.0

Сообщение Александр »

bodnar писал(а):во флешварс что, пропал секретный ключ?
Вроде бы этот секретный ключ только для API 3.0.

Евгений
Использовать другую библиотеку (можно официальную). Только формироваться запрос будет по другому. Если использовать json, то и обрабатывать ответ нужно будет по другому. Пример http://flapps.ru/forum/topic1943.html
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Переход с vk api 2.0 на 3.0

Сообщение Noise Gate »

Основной класс:

Код: Выделить всё

package api {        import flash.events.*;    import flash.net.*;    import api.*;    import com.adobe.crypto.MD5;        public class APILoaderWip extends EventDispatcher {                // * Обязательные параметры запроса                public var api_id:String = "1111111";                   // ID приложения (взять из враппера)        public var method:String = "isAppUser";                 // Метод запроса        public var sig:String = "md5_signature";                // Подпись запроса (вычисляется)                // * Дополнительные параметры запроса                public var parameters:Array = new Array();              // Массив доп. параметров методов        public var v:String = new String();                     // Версия API        public var format:String = new String();                // XML или JSON        public var test_mode:String = new String();             // 1 или 0                // * Прочие прараметры, необходимые для работы                public var api_url:String = "http://api.vkontakte.ru/api.php";  // URL для запроса (взять из враппера)        public var viewer_id:String = "1111111";                // ID текущего пользователя (взять из враппера)        public var api_secret:String = "api_secret";            // Ключ приложения для НЕбезопасного взд-я                // * Параметры для v=3.0 *                public var secret:String = "1111111";                   // secret приложения из flashVars        public var sid:String = "1111111";                      // ID сессии                // * Рабочие переменные *                public var data:String;        private var requestParameters:Array;        private var loader:URLLoader;        private var wrapper:Object;                 public function APILoaderWip(external_wrapper:Object) {            wrapper = external_wrapper;                        secret = wrapper.application.parameters.secret;     // для v=3.0            sid = wrapper.application.parameters.sid;           // для v=3.0                        api_id = wrapper.application.parameters.api_id;            api_url = wrapper.application.parameters.api_url;            viewer_id = wrapper.application.parameters.viewer_id;        }                        public function doRequest():void {                        // составляем массив параметров;                        requestParameters = new Array();            requestParameters.push(new APIParameter("api_id", api_id));            requestParameters.push(new APIParameter("method", method));            if (v) requestParameters.push(new APIParameter("v", v));            if (format) requestParameters.push(new APIParameter("format", format));            if (test_mode) requestParameters.push(new APIParameter("test_mode", test_mode));                        if (parameters.length > 0) {                requestParameters = requestParameters.concat(parameters);            }                        // вычисляем подпись                        if (v == "3.0") api_secret = secret;    // для v=3.0            sig = MD5.hash(getRawSig());                                    // осуществляем вызов к API                        var request:URLRequest = new URLRequest(api_url);            var variables:URLVariables = new URLVariables();                        for (var i:int = 0; i < requestParameters.length; i++) {                variables[APIParameter(requestParameters[i]).getName()] = APIParameter(requestParameters[i]).getValue();            }            variables.sig = sig;                        if (v == "3.0") variables.sid = sid;                        request.data = variables;            request.method = URLRequestMethod.POST;                        loader = new URLLoader();            loader.addEventListener(Event.COMPLETE, completeHandler);            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);            loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);            loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);            loader.load(request);                                }                // ******************************************************************************                private function completeHandler(e:Event):void {            loader.removeEventListener(Event.COMPLETE, completeHandler);            loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);            loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);            loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);//          trace("[API Loader] completeHandler");            data = loader.data;            dispatchEvent(new Event(Event.COMPLETE));            //dispatchEvent(e);        }                private function securityErrorHandler(e:SecurityErrorEvent):void {            loader.removeEventListener(Event.COMPLETE, completeHandler);            loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);            loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);            loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);//          trace("[API Loader] securityErrorHandler");            dispatchEvent(new Event(SecurityErrorEvent.SECURITY_ERROR));            //dispatchEvent(e);        }                private function ioErrorHandler(e:IOErrorEvent):void {            loader.removeEventListener(Event.COMPLETE, completeHandler);            loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);            loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);            loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);//          trace("[API Loader] ioErrorHandler");            dispatchEvent(new Event(IOErrorEvent.IO_ERROR));            //dispatchEvent(e);        }                private function httpStatusHandler(e:HTTPStatusEvent):void {            loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);//          trace("[API Loader] HTTP status: "+e.status);            dispatchEvent(e);        }                        public function getRawSig():String {                        var rawSig:String = new String();            requestParameters.sort();                        for (var i:int = 0; i < requestParameters.length; i++) {                rawSig += APIParameter(requestParameters[i]).toAPIString();            }                        return viewer_id + rawSig + api_secret;        }            }}
Доп. класс:

Код: Выделить всё

package api {        public class APIParameter {                private var name:String;        private var value:String;            public function APIParameter(external_name:String, external_value:String) {            this.name = external_name;            this.value = external_value;        }            public function toString():String {            return " " + name + ":" + value;        }                public function toAPIString():String {            return name + "=" + value;        }                public function getName():String {            return name;        }                public function getValue():String {            return value;        }    }}
Только должен сказать, что в основной класс передается ссылка на wrapper. Для работы без него придется подкорректировать все это дело...

Использование:

Код: Выделить всё

var preLoader:APILoaderWip = new APILoaderWip(wrapper);preLoader.api_secret = "1sdf24f2g";preLoader.v = "3.0";preLoader.method = "execute";preLoader.test_mode = "1"; var code = 'return {"adverts": API.getAds()}';preLoader.parameters.push(new APIParameter("code", code)); preLoader.addEventListener(Event.COMPLETE, LoaderCH);preLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, LoaderEHSecurity);preLoader.addEventListener(IOErrorEvent.IO_ERROR, LoaderEHio);preLoader.doRequest();
Tolyaka
Сообщения: 17
Зарегистрирован: 14 апр 2011, 11:39

Re: Переход с vk api 2.0 на 3.0

Сообщение Tolyaka »

Народ по теме! 2.0 же будет продолжать поддерживаться?
Я еще успел отхватить secret_key
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

Re: Переход с vk api 2.0 на 3.0

Сообщение 112 »

Да,но теперь секретный ключ в настройках не показывается
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Переход с vk api 2.0 на 3.0

Сообщение Александр »

Tolyaka писал(а):Народ по теме! 2.0 же будет продолжать поддерживаться?
Я еще успел отхватить secret_key
В чем смысл начинать писать новое приложение на api 2.0?
Ответить