新浪微博登录接口实例

    提交的方法:

public void getRequestToken()
    {

    OAuthBase oAuth = new OAuthBase();//需要引用DLL
    string apiKey = "";//申请的App Key
    string apiKeySecret = "";//申请的App Secret
    string appReturnUrl = "";//返回的url
    string requestTokenUri = "http://api.t.sina.com.cn/oauth/request_token";
    string AUTHORIZE = "http://api.t.sina.com.cn/oauth/authorize";
    string ACCESS_TOKEN = "http://api.t.sina.com.cn/oauth/access_token";
        Uri uri = new Uri(requestTokenUri);
        string nonce = oAuth.GenerateNonce();//获取随机生成的字符串,防止攻击
        string timeStamp = oAuth.GenerateTimeStamp();//发起请求的时间戳
        string normalizeUrl, normalizedRequestParameters;
        // 签名
        string sig = oAuth.GenerateSignature(uri, apiKey, apiKeySecret, string.Empty, string.Empty, "GET", timeStamp, nonce, string.Empty, out normalizeUrl, out normalizedRequestParameters);
        sig = HttpUtility.UrlEncode(sig);
        //构造请求Request Token的url
        StringBuilder sb = new StringBuilder(uri.ToString());
        sb.AppendFormat("?oauth_consumer_key={0}&", apiKey);
        sb.AppendFormat("oauth_nonce={0}&", nonce);
        sb.AppendFormat("oauth_signature={0}&", sig);
        sb.AppendFormat("oauth_signature_method={0}&", "HMAC-SHA1");
        sb.AppendFormat("oauth_timestamp={0}&", timeStamp);
        sb.AppendFormat("oauth_version={0}", "1.0");
        //请求Request Token
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sb.ToString());
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader stream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
        string responseBody = stream.ReadToEnd();
        stream.Close();
        response.Close();
        int intOTS = responseBody.IndexOf("oauth_token=");
        int intOTSS = responseBody.IndexOf("&oauth_token_secret=");
        Session["oauth_token"] = responseBody.Substring(intOTS + 12, intOTSS - (intOTS + 12));
        Session["oauth_token_secret"] = responseBody.Substring((intOTSS + 20), responseBody.Length - (intOTSS + 20));
        Response.Redirect(AUTHORIZE + "?oauth_token=" + Session["oauth_token"] + "&oauth_callback=" + appReturnUrl);
    }
返回页面方法:

    OAuthBase oAuth = new OAuthBase();

    string apiKey = "";//申请的App Key
    string apiKeySecret = "";//申请的App Secret
    string requestTokenUri = "http://api.t.sina.com.cn/oauth/request_token";
    string AUTHORIZE = "http://api.t.sina.com.cn/oauth/authorize";
    string ACCESS_TOKEN = "http://api.t.sina.com.cn/oauth/access_token";
    protected string imagesUrl = "http://tp2.sinaimg.cn/1134706865/50/0/1";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (!string.IsNullOrEmpty(Request["oauth_verifier"]))
            {
                getAccessToken(Request["oauth_token"].ToString(), Request["oauth_verifier"].ToString());
            }
        }
    }
    public void getAccessToken(string requestToken, string oauth_verifier)
    {
        Uri uri = new Uri(ACCESS_TOKEN);
        string nonce = oAuth.GenerateNonce();
        string timeStamp = oAuth.GenerateTimeStamp();
        string normalizeUrl, normalizedRequestParameters;
        // 签名
        string sig = oAuth.GenerateSignature(
        uri,
        apiKey,
        apiKeySecret,
        requestToken,
        Session["oauth_token_secret"].ToString(),
        "Get",
        timeStamp,
        nonce,
        oauth_verifier,
        out normalizeUrl,
        out normalizedRequestParameters);
        sig = oAuth.UrlEncode(sig);
        //构造请求Access Token的url
        StringBuilder sb = new StringBuilder(uri.ToString());
        sb.AppendFormat("?oauth_consumer_key={0}&", apiKey);
        sb.AppendFormat("oauth_nonce={0}&", nonce);
        sb.AppendFormat("oauth_timestamp={0}&", timeStamp);
        sb.AppendFormat("oauth_signature_method={0}&", "HMAC-SHA1");
        sb.AppendFormat("oauth_version={0}&", "1.0");
        sb.AppendFormat("oauth_signature={0}&", sig);
        sb.AppendFormat("oauth_token={0}&", requestToken);
        sb.AppendFormat("oauth_verifier={0}", oauth_verifier);
        //请求Access Token
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sb.ToString());
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader stream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
        string responseBody = stream.ReadToEnd();
        stream.Close();
        response.Close();
        int intOTS = responseBody.IndexOf("oauth_token=");
        int intOTSS = responseBody.IndexOf("&oauth_token_secret=");
        int intUser = responseBody.IndexOf("&user_id=");
        Session["oauth_token"] = responseBody.Substring(intOTS + 12, intOTSS - (intOTS + 12));
        Session["oauth_token_secret"] = responseBody.Substring((intOTSS + 20), intUser - (intOTSS + 20));
        Session["User_Id"] = responseBody.Substring((intUser + 9), responseBody.Length - (intUser + 9));
        verify_credentials();
    }
    public void verify_credentials()
    {
        Uri uri = new Uri("http://api.t.sina.com.cn/account/verify_credentials.xml");
        string nonce = oAuth.GenerateNonce();
        string timeStamp = oAuth.GenerateTimeStamp();
        string normalizeUrl, normalizedRequestParameters;
        // 签名
        string sig = oAuth.GenerateSignature(
        uri,
        apiKey,
        apiKeySecret,
        Session["oauth_token"].ToString(),
        Session["oauth_token_secret"].ToString(),
        "Get",
        timeStamp,
        nonce,
        string.Empty,
        out normalizeUrl,
        out normalizedRequestParameters);
        sig = HttpUtility.UrlEncode(sig);
        StringBuilder sb = new StringBuilder(uri.ToString());
        sb.AppendFormat("?oauth_consumer_key={0}&", apiKey);
        sb.AppendFormat("oauth_nonce={0}&", nonce);
        sb.AppendFormat("oauth_timestamp={0}&", timeStamp);
        sb.AppendFormat("oauth_signature_method={0}&", "HMAC-SHA1");
        sb.AppendFormat("oauth_version={0}&", "1.0");
        sb.AppendFormat("oauth_signature={0}&", sig);
        sb.AppendFormat("oauth_token={0}&", Session["oauth_token"].ToString());
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sb.ToString());
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader stream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
        string responseBody = stream.ReadToEnd();
        stream.Close();
        response.Close();
        ShowInfo(responseBody);
     
    }
    private void ShowInfo(string body)//显示信息
    {
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(body);
        XmlNode XNSpec = xml.SelectSingleNode("user");
        XmlNodeList XLlist = XNSpec.ChildNodes;
        string name = "";
        foreach (XmlNode xnnode in XLlist)
        {
            if (xnnode.Name == "id")
            {
                sinaId = xnnode.InnerText;
            }
            if (xnnode.Name == "name")
            {
                name = xnnode.InnerText;
            }
            if (xnnode.Name == "profile_image_url")
            {
                imagesUrl = xnnode.InnerText;
            }
            if (xnnode.Name == "gender")
            {
                switch (xnnode.InnerText)
                {
                    case "m":
                        sex = "1";
                        break;
                    case "f":
                        sex = "2";
                        break;
                }
            }
        }
        hlblUserId.Value = sinaId;
        lblUserNiName.Text = name;
        hlblSex.Value = sex;
    }

 

DLL下载地址:

新浪微博登录接口DLL.rar

posted @ 2012-02-01 17:34  tongle  阅读(2957)  评论(3编辑  收藏  举报