Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   secure запросы из удаленного сервера. (http://www.flasher.ru/forum/showthread.php?t=134164)

Ralph_DiMarko 23.12.2009 02:16

secure запросы из удаленного сервера.
 
hi all )
Делаю небольшое приложение, дошел до момента операций с secure запросами, и у меня возникла как и у многих проблема с составлением правильного запроса, во флеше
Код AS1/AS2:

function getAppBalance(){
        var host = "http://www._.com.ua/vkontakte/getAppBalance.php";
        var lv:LoadVars = new LoadVars();
        var lv_in:LoadVars = new LoadVars();
        lv_in.onLoad = function() {
                delete this.onLoad;
                tLog.text = unescape(this);
        };
        lv.sendAndLoad(host,lv_in,"POST");
}

в файле getAppBalance.php
PHP код:

<?php
$api_id 
"0000";
$method "secure.getAppBalance";
$secret "код из платежей";
$version "2.0";
$url "http://api.vkontakte.ru/api.php?";
$timestamp time();
$random rand();
$sig md5("api_id=".$api_id."method=".$method."random=".$random."timestamp=".$timestamp."v=".$version.$secret);
ini_set('default_charset','UTF-8'); 
$content "api_id=".$api_id."&method=".$method."&random=".$random."&timestamp=".$timestamp."&v=".$version."&sig=".$sig;
$ch curl_init();
curl_setopt($chCURLOPT_URL,$url); // set url to post to
curl_setopt($chCURLOPT_FAILONERROR1);
curl_setopt($chCURLOPT_FOLLOWLOCATION0);// allow redirects
curl_setopt($chCURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($chCURLOPT_TIMEOUT3); // times out after 4s
curl_setopt($chCURLOPT_POST1); // set POST method
curl_setopt($chCURLOPT_POSTFIELDS$content); // add POST fields
$result curl_exec($ch); // run the whole process
echo $result;
curl_close($ch);
?>

Это был рабочий код, а вот нерабочий:
во флеше аналогично, а в пхп:
PHP код:

<?php
$api_id 
"0000";
$method "secure.withdrawVotes";
$secret "код из платежей";
$version "2.0";
$url "http://api.vkontakte.ru/api.php?";
$timestamp time();
$random rand();
$uid "номер юзера";
$votes "100";
$sig md5("api_id=".$api_id."method=".$method."random=".$random."timestamp=".$timestamp."v=".$version."votes=".$votes."uid=".$uid.$secret);
ini_set('default_charset','UTF-8'); 
$content "api_id=".$api_id."&method=".$method."&random=".$random."&timestamp=".$timestamp."&v=".$version."&votes=".$votes."&uid=".$uid."&sig=".$sig;
$ch curl_init();
curl_setopt($chCURLOPT_URL,$url); // set url to post to
curl_setopt($chCURLOPT_FAILONERROR1);
curl_setopt($chCURLOPT_FOLLOWLOCATION0);// allow redirects
curl_setopt($chCURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($chCURLOPT_TIMEOUT3); // times out after 4s
curl_setopt($chCURLOPT_POST1); // set POST method
curl_setopt($chCURLOPT_POSTFIELDS$content); // add POST fields
$result curl_exec($ch); // run the whole process
echo $result;
curl_close($ch);
?>

Как видно из последнего кода, добавил и всего то две переменные и использую другой метод - хочу списать один голос со счета юзера на счет приложения, и получаю в ответ 4 ошибку все время, почему этот метод и порядок составления запроса какой то странный, постоянно приходится фантазировать в зависимости от нужного запроса, при составлении некоторых запросов заметил, что даже если не учитывать порядок, и не писать переменные по алфавиту то все нормально проходит, помогите пожалуйста разобраться, буду весьма благодарен.
На форуме все темы по поводу контакта пересмотрел, но к сожалению не помогло.

parl 23.12.2009 12:30

При формировании подписи переменные упорядочиваются по алфавиту.

Т.е. буква "U" идет перед буквой "V"

PHP код:

$sig =md5("api_id=".$api_id."method=".$method."random=".$random."timestamp=".$timestamp."v=".$version."votes=".$votes."uid=".$uid.$secret); 

PHP код:

$sig md5("api_id=".$api_id."method=".$method."random=".$random."timestamp=".$timestamp."uid=".$uid."v=".$version."votes=".$votes.$secret); 

кстати, будет лучше все переменные для отправки собирать в массив с нужными ключами, делать ksort($array), и foreach'ем формировать запрос.

Ralph_DiMarko 23.12.2009 15:51

большое спасибо! И вправду была проблема в букве. Буду учить алфавит )

---------------------

Теперь возникла другая проблема, если со свеого компа запускаю приложение то все нормально работает, а когда заливаю в контакт, нет обращения к удаленному серверу. Из-за чего это может быть? Я где то читал что контакт блокирует всякие ссылки, возможно ли это из за этого? Приложение еще не прошло проверку.
Или метод обращения не тот? Подскажите кто уже реализовывал? Спасибо!


---------------------

Оказывается и всего то надо было на хост залить файл crossdomain.xml из http://vkontakte.ru/pages.php?o=-2226515&p=FAQ


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

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