日期:2014-05-20  浏览次数:20703 次

现在流行 第三登录 新手求教
如题 现在流行 第三登录 新手求教 说一个步骤 资料 源码案例 都可以 
用qq 或者新浪登录 就像现在CSDN 也可以啦~~

------解决方案--------------------
自己写的sina 的
C# code

private const string _apiKey = "";//申请的App Key
        private const string _apiKeySecret = "";//申请的App Secret
        private const string _authorize = "https://api.weibo.com/oauth2/authorize";
        private const string _accessToken = "https://api.weibo.com/oauth2/access_token";
        private const string _userShow = "https://api.weibo.com/2/users/show.json";
        private const string _uploadTextUrl = "https://api.weibo.com/2/statuses/upload_url_text.json";
        private const string _update = "https://api.weibo.com/2/statuses/update.json";

        public string AuthorizeRequest(string client)
        {
            Uri uri = new Uri(_authorize);
            StringBuilder sb = new StringBuilder(uri.ToString());
            sb.AppendFormat("?client_id={0}", _apiKey);
            sb.AppendFormat("&redirect_uri={0}", "http://member.1schina.com/other/sinaauth.aspx");
            sb.AppendFormat("&response_type={0}", "code");
            sb.AppendFormat("&forcelogin={0}", "true");
            if(string.IsNullOrEmpty(client))
                sb.AppendFormat("&display={0}", "wap2.0");

            string url = sb.ToString();
            return url;
        }

        public ApiAccessToken GetAccessToken(string code, string requestToken, string requestTokenSecrect, string verify)
        {
            Dictionary<string, string> prame = new Dictionary<string, string>();
            prame.Add("client_id", _apiKey);
            prame.Add("client_secret", _apiKeySecret);
            prame.Add("grant_type", "authorization_code");
            prame.Add("code", code);
            prame.Add("redirect_uri", "http://member.1schina.com/other/sinaauth.aspx");
            string resultString = HttpRequestCommand.RequestResult(_accessToken, HttpRequestCommand.GetRequestString(prame), "POST");
            //ErrorLog.Info("sinaJson:" + resultString);
            HttpRequestCommand.JsonString = resultString;
            ApiAccessToken result = new ApiAccessToken();
            JObject JsonType = JObject.Parse(resultString);
            if (!string.IsNullOrEmpty(((string)JsonType["access_token"])))
            {
                result = InstantiatedApiAccessToken(JsonType);
            }

            return result;
        }

        private static ApiAccessToken InstantiatedApiAccessToken(JObject JsonType)
        {
            ApiAccessToken result = new ApiAccessToken();
            result.AccessToken = (string)JsonType["access_token"];
            result.ExpiresIn = ((int)JsonType["expires_in"]).ToString();
            result.AccountId = (string)JsonType["uid"];
            
            return result;
        }

        public ApiUserInfo GetUserBase(ApiAccessToken accessToken)
        {
            Dictionary<string, string> prame = new Dictionary<string, string>();
            prame.Add("access_token",accessToken.AccessToken);
            prame.Add("uid",accessToken.AccountId);
            string resultString = HttpRequestCommand.RequestResult(_userShow, HttpRequestCommand.GetRequestString(prame), "GET");
            JObject JsonType = JObject.Parse(resultString);
            ApiUserInfo result = new ApiUserInfo();
            if (!string.IsNullOrEmpty(((string)JsonType["screen_name"])))
            {
                result.AccountName = (string)JsonType["screen_name"];
                result.AccountId = ((decimal)JsonType["id"]).ToString();
                result.AccountPicUrl = (string)JsonType["profile_image_url"];
                result.IsEmpty = false;
            }
            else
                ErrorLog.Info(resultString);

            return result;
        }


protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                if (!string.IsNullOrEmpty(Request.QueryString["code"]))
                {
                    Session["SinaCode"] = Request.QueryString["code"];
                    GetAccessToken();
                }
                else
                {
                    GetRequestToken();
                }

            }
        }
private void GetAccessToken()
        {
            try
            {
                ApiAccessToken token = business.GetAccessToken(Session["SinaCode"].ToString(), "", "", "");
                ApiUserInfo user = business.GetUserBase(token) as ApiUserInfo;
                if(user.IsEmpty)
                {
                    HttpUtility.Help.ErrRedirectToBackUrl();
                    return;
                }
                MemberBusiness memberBusiness = new MemberBusiness();
                if (Request.Cookies["userstate"] == null)
                {
                    HttpUtility.AccountLogin(token, user,"Sina");
                }
                HttpUtility.RedirectToBackUrl();
            }
            catch (WebException we)
            {
                Response.Write(new StreamReader(we.Response.GetResponseStream()).ReadToEnd());

            }
        }

        private void GetRequestToken()
        {
            string url = "";
            if(Session["client"]!=null)
                url = business.AuthorizeRequest(Session["client"].ToString());
            else
                url = business.AuthorizeRequest("");
            Response.Redirect(url,false);
        }