douba4824 2010-11-23 15:20
浏览 25
已采纳

计算vkontakte.ru iframe app的签名

Why does this short PHP script:

<?php

$args = array(
        'api_id'    => $_GET['api_id'],
        'method'    => 'getProfiles',
        'sid'       => $_GET['sid'],
        'uids'      => $_GET['viewer_id'],
        'v'         => '3.0',
);

$req = $_GET['api_url'] . '?sig=' . 
    calc_sig($_GET['viewer_id'], $args, $_GET['secret']);

foreach ($args as $key => $val)
        $req .= "&$key=$val";

$page = file_get_contents($req);

header('Content-Type: text/plain');
print_r($_GET);
print("

 req: " . $req);
print("

 page: " . $page);

function calc_sig($viewer_id, $arr, $secret) {
        $kv = array();
        foreach ($arr as $key => $val) {
                if ($key != 'sid')
                        $kv[] = "$key=$val";
        }
        sort($kv);

        $str = $viewer_id . join('', $kv) . $secret;
        print("

 str: " . $str);
        return md5($str);
}
?>

print the error:

str: 59751265api_id=1762950method=getProfilesuids=59751265v=3.0a551fa3416
req: http://api.vkontakte.ru/api.php?sig=490142d9c3eb65ee64045a2ea754266c&api_id=1762950&method=getProfiles&sid=1bc83d2ed0db52b8ad45d8ddf36780f52944d5f6340ffa47ad5fef9594&uids=59751265&v=3.0
page: <?xml version="1.0" encoding="utf-8"?>
<error>
 <error_code>4</error_code>
 <error_msg>Incorrect signature</error_msg>
......

?>

I keep reading the doc again and again...

  • 写回答

1条回答 默认 最新

  • dsgdhf5674 2010-11-23 16:31
    关注

    Ok, this works:

    <?php
    
    define('VK_API_ID_TEST', 'XXX');
    define('VK_AUTH_SECRET_TEST', 'YYY');
    
    $args = array(
            'api_id'    => $_GET['api_id'],
            'format'    => 'json',
            'method'    => 'getProfiles',
            'uids'      => $_GET['viewer_id'],
            'v'         => '3.0',
    );
    
    $req = $_GET['api_url'] . '?sig=' . calc_sig($args);
    foreach ($args as $key => $val)
            $req .= "&$key=$val";
    
    $page = file_get_contents($req);
    $data = json_decode($page, true);
    
    header('Content-Type: text/plain');
    print("
    
     _GET:");
    print_r($_GET);
    print("
    
     req: " . $req);
    print("
    
     page: " . $page);
    print("
    
     data:");
    print_r($data);
    print("
    
     city: " . $data['response'][0]['name']);
    
    function calc_sig($arr) {
            $kv = array();
            foreach ($arr as $key => $val) {
                    if ($key != 'sig')
                            $kv[] = "$key=$val";
            }
            sort($kv);
    
            $str = join('', $kv) . VK_AUTH_SECRET_TEST;
            print("
    
     str: " . $str);
            return md5($str);
    }
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100