0

我尝试调用 VK 方法,但失败并出现错误:

private function deletePost(postId:String):int
        {
            var sigStr:String = FlashVarsVO.user_id + "api_id="+FlashVarsVO.app_id+"method=wall.deletev=3.09bdnOW93DM3Oy5lcSHr4";
            var sig:String = MD5.hash("sigStr");
            var str:String = "http://api.vk.com/api.php?api_id="+FlashVarsVO.app_id+"&method=wall.delete&v=3.0&format=JSON&post_id="+postId+ "&sid="+ FlashVarsVO.access_token +"&sig=" +sig;
            trace(str);

        //  sig = md5(viewer_idname1=value1name2=value2secret)

            var req:URLRequest = new URLRequest(str);
            var uLdr:URLLoader = new URLLoader(req);
            uLdr.addEventListener(Event.COMPLETE, onComplete);
            uLdr.addEventListener(ErrorEvent.ERROR, onErrorHandler);
            uLdr.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            return 0;
        }

http://api.vk.com/api.php?api_id=1111111&method=wall.delete&v=3.0&format=JSON&post_id=1629&sid=bf472ebcf2eba19cbdb56d86a8bd477603bbd76bd6c5356e4d003815c7cf3a4&sig=62b1265890d247efdd939f616cad1e8d

对于这个请求,vk.com 向我发送了这样的回复:

{"error":{"error_code":4,"error_msg":"Incorrect signature: Session can be expired, revoked by user or connected with different IP address","request_params":[{"key":"api_id","value":"1111111"},{"key":"method","value":"wall.delete"},{"key":"v","value":"3.0"},{"key":"format","value":"JSON"},{"key":"post_id","value":"1629"},{"key":"sid","value":"bf472ebcf2eba19cbdb56d86a8bd477603bbd76bd6c5356e4d003815c7cf3a4"},{"key":"sig","value":"62b1265890d247efdd939f616cad1e8d"}]}}

如何使它可行?任何人都面临这样的错误?谢谢。

4

1 回答 1

1

这不是 ActionScript 问题,而是 vkontakte 问题。根据错误消息,您显然需要检查签名并确保它的构建与 vkontakte 期望的完全一样。

在这种情况下,我的猜测是您首先需要按字母顺序对查询参数进行排序,然后再进行 MD5 哈希。

此外,似乎所有查询参数都一个接一个地附加,它们之间没有分隔符。我不知道 vkontakte 但其他 API 通常希望参数在散列之前用“&”分隔。

于 2012-04-12T09:56:09.073 回答