Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Кто занимался постингом сообщений на стену с русским текстом? (http://www.flasher.ru/forum/showthread.php?t=148534)

aimatme 05.01.2011 00:57

Кто занимался постингом сообщений на стену с русским текстом?
 
если не трудно киньте кусочек кода с просчетом сигнатуры и отправкой запроса к VK API через URLVariables

Замучался уже с этим постингом на стену. При использовании русских букв - приходит incorrect signature
1. сигнатуру расчитываю для текста в явном виде (например "тест")
2. после попадания в urlvariables в запросе уже посылается закодированное сообщение (например "message=%D1%82%D0%B5%D1%81%D1%82")

чем я только не пробовал :) всегда incorrect signature
сообщения с английскими буквами работают без проблем

Astraport 05.01.2011 11:03

Кажется когда-то я тоже долго мучился с этим и так и не смог решить. Реализовал с помощью посредника.

Код AS3:

var flashVars: Object = parameters as Object;
var VK:APIConnection = new APIConnection(flashVars);
VK.api("wall.savePost", {"test_mode":1, "wall_id":123456, "post_id":"post", "photo_id":"123456_789", "message":mess}, postWallComplete, postWallError);

А так проблема старая: http://www.flasher.ru/forum/showthread.php?t=142452

aimatme 05.01.2011 13:33

Спасибо большое :) как попробую обязательно отпишусь о результате

mikhailk 05.01.2011 15:02

никаких проблем нет
надо кодировать encodeURI, но только в requestString (signatureForMD5 - не надо)

Код AS3:

                /**************************************************************************/
                /*    Публикация записи на стену                                          */
                /**************************************************************************/
                public function writeMessageToWall(requestData:Object) : void
                {
                        var signatureForMD5:String = GlobalParameters.wrapper.application.parameters.viewer_id
                                                        + "api_id=" + GlobalParameters.wrapper.application.parameters.api_id
                                                        + "hash=" + requestData.hash
                                                        + "message=" + requestData.messageText
                                                        + "method=wall.savePost"
                                                        + "photo=" + requestData.photo
                                                        + "photo_id=" + requestData.photoID
                                                        + "post_id=" + requestData.postID
                                                        + "server=" + requestData.server
                                                        + "test_mode=" + testMode
                                                        + "v=2.0"
                                                        + "wall_id=" + requestData.userID
                                                        + GlobalParameters.appCode;
                        var signatureMD5:String = convertorMD5.encrypt(signatureForMD5);
                        var requestString:String = GlobalParameters.serverUrlVK
                                                        + "?api_id=" + GlobalParameters.wrapper.application.parameters.api_id
                                                        + "&hash=" + requestData.hash
                                                        + "&message=" + encodeURI(requestData.messageText)
                                                        + "&method=wall.savePost"
                                                        + "&photo=" + requestData.photo
                                                        + "&photo_id=" + requestData.photoID
                                                        + "&post_id=" + requestData.postID
                                                        + "&server=" + requestData.server
                                                        + "&sig=" + signatureMD5
                                                        + "&test_mode="+testMode
                                                        + "&v=2.0"
                                                        + "&wall_id=" + requestData.userID
                                                        ;
                        trace (requestString);
                        connectToURL(requestString);
                }


etc 05.01.2011 15:43

И не лень же было в столбик расставлять.

aimatme 05.01.2011 16:03

Цитата:

Сообщение от Astraport (Сообщение 962145)
Кажется когда-то я тоже долго мучился с этим и так и не смог решить. Реализовал с помощью посредника.

Код AS3:

var flashVars: Object = parameters as Object;
var VK:APIConnection = new APIConnection(flashVars);
VK.api("wall.savePost", {"test_mode":1, "wall_id":123456, "post_id":"post", "photo_id":"123456_789", "message":mess}, postWallComplete, postWallError);

А так проблема старая: http://www.flasher.ru/forum/showthread.php?t=142452

Вы будете смеяться но проблема осталась :) всунул APIConnection в код - английские буквы нормально русские - incorrect signature :)
может быть дело в Flash Builder'e ))))))

Добавлено через 2 минуты
mikhailk
Подскажите откуда взяли функцию connectToURL

mikhailk 05.01.2011 17:10

Цитата:

Сообщение от etc (Сообщение 962186)
И не лень же было в столбик расставлять.

:D
зато наглядно

на самом деле, я сначала написал класс для работы с API VK в таком виде, потом провел рефакторинг, а потом вернулся к этому варианту, поскольку более компактный вариант все равно нуждался в комментариях. А этот код тупой, но понятный.



Цитата:

Сообщение от aimatme
Подскажите откуда взяли функцию connectToURL

сам написал ))

Код AS3:

                private function connectToURL(strURL:String) : void
                {
                        var loader:URLLoader = new URLLoader(new URLRequest(strURL));
                        configureListenersURLLoader(loader);
                }

но, на самом деле, все, что Вам нужно было отметить в моем коде, это то, когда применяется encodeURI, а когда не применяется.

aimatme 05.01.2011 17:20

Ура! разобрался! не поверите где крылась разгадка :) раньше все время использовал MD5 модуль от Адоба а тут от безысходности начал смотреть а зачем в APIConnection свой мд5 модуль и они оказались разными :)

Так что всем рекомендую кто столкнулся с моей проблемой просто поменять модуль MD5 на тот который поставляется в архиве c APIConnection.
Видимо решающая строка там это
Код AS3:

data = Utf8Encode(data);

которой нет в MD5 модуле от Адоба

Добавлено через 33 секунды
p.s. с русским текстом в итоге все хорошо :)

Konung 18.02.2011 12:21

тоже проблема с кодировкой.

Отправляю аудиозапись. название и исполнителя пользователь вводит сам. Но после отправки название оказывается в юникоде и отображается в виде тарам пам.

Пользуюсь посредником.

Подскажите, как исправить. Заранее спасибо.

aimatme 19.03.2011 18:20

используйте md5 модуль от разработчиков вконтакте


Часовой пояс GMT +4, время: 22:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.