有哪位高手帮我把下面的PHP程序转换为ASP。NET的?要求能够测试通过的
//测试数据
string str = "FlYSsIZRHe9xsyj3AfY11RRUNduhbETthOTJsmrIW1I.eyJ1c2VyIjp7ImNvdW50cnkiOiJjbiIsImxvY2FsZSI6IiJ9LCJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTMxNDE3NTc5MSwiZXhwaXJlcyI6MTMxNDE4Mjk5MSwib2F1dGhfdG9rZW4iOiIzNmEyZjgxYzUzODJhOGIwZjQzMWRkZDA0OTJlZTE5YiIsInVzZXJfaWQiOjIzMTA4NTM0MDJ9"; /**
     * 解析 signed_request
     *
     * @param string $signed_request 应用框架在加载iframe时会通过向Canvas URL post的参数signed_request
     *
     * @return array
     */
    function parseSignedRequest($signed_request) {
        list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
        $sig = self::base64decode($encoded_sig) ;
        $data = json_decode(self::base64decode($payload), true);
        if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') return '-1';
        $expected_sig = hash_hmac('sha256', $payload, $this->client_secret, true);
        return ($sig !== $expected_sig)? '-2':$data;
    }

解决方案 »

  1.   

    没做过PHP 但是解析也得有规则。
      

  2.   

    我也知道有规则啊,但是就是不知道有什么规则,我也不懂PHP
      

  3.   

    php木有操作过了,等待.......................
      

  4.   

    这个不是PHP技术区啊
    这是.NET技术区啊
    偶表示 不大懂PHP
      

  5.   


            public  string parseSignedRequest(string signed_request)
            {
                string data = string.Empty;
                string[] tempList = signed_request.Split('.');
                string encoded_sig = tempList[0];
                string payload = tempList[1];
                //你的encoded_sig不是有效的Base64编码
                string sig = Base64Decode(encoded_sig);
                //没转json,
                data = Base64Decode(payload);
                if (!data.Contains("HMAC-SHA256"))
                {
                    return "-1";
                }
                //不知道你的$this->client_secret,也不知道$expected_sig是什么类型,故暂且string
                string expected_sig=hash_hmac("sha256", payload, "$this->client_secret", true);
                return sig == expected_sig ? "-2" : data;
            }
            public  string Base64Decode(string base64)
            {
                char[] charBuffer = base64.ToCharArray();
                byte[] bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length);
                return Encoding.UTF8.GetString(bytes);        }
            public  string hash_hmac(string str,string payload,string client_secret,bool b )
            {
                //不知道你的hash_hmac方法怎么写的
                return "";
            }
      

  6.   

    return sig == expected_sig ? "-2" : data;这个错了,不好意思
    return sig != expected_sig ? "-2" : data;