• 开放平台那些事


          开放平台的东西,目前很多人在搞,也不多说,本人之前做过,这里就新浪开放平台做个基本的总结,让那些刚弄的能快速点进入开发,如有不正确的还请诸位指出,免得误导人。

          目前基本上要求使用的是author2.0进行开发,开发指南在这里 http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5,api文档 http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2,错误码信息 http://open.weibo.com/wiki/Help/error

          本人之前做的是一个网站接入,这里说的是网站接入,其他的情况或许有所不同,具体的还得开发者自己看文档。

          开放平台具体开发有以下几步。

          1、申请appkey、填写回调地址等信息(由于有段时间没弄了,具体的还得自己看文档)

          2、引导用户至授权页面

            /// <summary>
            /// 引导用户至授权页面,请求参数见 http://open.weibo.com/wiki/Oauth2/authorize
            /// </summary>
            public const string AUTHORIZE_URL = "https://api.weibo.com/oauth2/authorize";
            public void RedirectToSinaLogin ( HttpContext context )
            {
                string requestUrl = String.Format(AUTHORIZE_URL + "?client_id={0}&redirect_uri={1}&response_type=code", AppKey, RedirectUri);
                context.Response.Redirect(requestUrl);
            }

          3、用户授权后,会进入回调页面,同时返回一个code值

          4、有了这个code值,以及第一步中获得的AppKey、AppSecret和回调地址,我们就可以用这些获取access_token和uid了

            /// <summary>
            /// 授权后获取access_token,请求参数见 http://open.weibo.com/wiki/OAuth2/access_token
            /// </summary>
            public const string ACCESSTOKEN_URL = "https://api.weibo.com/oauth2/access_token";
            public void GetAccessToken ( )
            {
                string requestUrl = String.Format(ACCESSTOKEN_URL + "?client_id={0}&client_secret={1}&grant_type=authorization_code&redirect_uri={2}&code={3}", AppKey, AppSecret, RedirectUri, Code);
                string response = RequestUrl(requestUrl,"POST");
                var dic = response.GetValues( );
                this.AccessToken = (string)dic["access_token"];
                this.Uid = (string)dic["uid"];
                this.ExpiresIn = dic["expires_in"].ToString();
            }

             注意上文中的两个函数,一个是发送http请求,一个是扩展函数,用来解析json(需要说明的是,有时候返回的不一定是json,需要开发者自己去想办法提取信息)

            public string RequestUrl ( string url, string postMehtod )
            {
                string result = String.Empty;
                try
                {
                    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                    request.Method = postMehtod;
                    request.ContentType = "application/x-www-form-urlencoded";
                    HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse( );
                    StreamReader responseReader = new StreamReader(webResponse.GetResponseStream( ));
                    result = responseReader.ReadToEnd( );
                    responseReader.Close( );
                    webResponse.Close( );
                }
                catch
                {
                    throw;
                }
                return result;
            }
        internal static class Extension
        {
            /// <summary>
            /// 解析JSON格式字符串(无嵌套的类型,如{"Name":"Sam","Age":20})
            /// </summary>
            /// <returns></returns>
            public static Dictionary<string, object> GetValues ( this String jsonString )
            {
                try
                {
                    JavaScriptSerializer ser = new JavaScriptSerializer( );
                    return (Dictionary<string, object>)ser.DeserializeObject(jsonString);
                }
                catch
                {
                    throw;
                }
                return null;
            }
    }

            5、注意第四步中获取的ExpiresIn是access_token的有效时间,我们获取到access_token和ExpiresIn时,需要将access_token和ExpiresIn(或是利用这个值计算出access_token的过期日期)保存起来(一般存数据库,不过访问慢点),这样只要access_token存在(如果保存在cookie中的话就容易丢失)而且没过期,就不用每次都引导用户授权了(当然登录是必须的,有的开发者注意别把这两者混为一团),至于具体怎么处理这两个值就需开发者自己衡量了

           6、现在我们可以使用access_token和uid来访问用户的信息或是做些其他操作,详细的需要开发者查看新浪api文档(注意本人开发时此文档还在不断变化中,所以返回的一些数据可能会发生变化),下面贴一个本人获取的用户信息的一个函数,注意此函数旨在说明用法,读者不必细究,需要自己去封装

            /// <summary>
            /// 获取用户的基本信息,参数uid为可选参数,不选时就获取到当前登录用户
            /// </summary>
            /// <param name="uid">用户的UID(可选参数,为0或不选函数将返回当前登录用户)</param>
            /// <returns></returns>
            public SinaUser GetUser( Int64 uid = 0 )
            {
                if (uid == 0)
                    _sinaUser.Id = Convert.ToInt64(_oauthSina.Uid);
                else
                    _sinaUser.Id = uid;
                if (_sinaUser.Id == 0)
                    return _sinaUser;
                string request = String.Format(SHOW_URL + "?access_token={0}&uid={1}", AccessToken, _sinaUser.Id);
                string response = _oauthSina.RequestUrl(request, "GET");
                var dic = response.GetValues();
                _sinaUser.ScreenName = (string)dic["screen_name"];
                _sinaUser.Name = (string)dic["name"];
                _sinaUser.Province = (string)dic["province"];
                _sinaUser.City = (string)dic["city"];
                _sinaUser.Location = (string)dic["location"];
                _sinaUser.Description = (string)dic["description"];
                _sinaUser.Url = (string)dic["url"];
                _sinaUser.ProfileImageUrl = (string)dic["profile_image_url"];
                _sinaUser.ProfileUrl = (string)dic["profile_url"];
                _sinaUser.Domain = (string)dic["domain"];
                _sinaUser.Gender = (string)dic["gender"];
                _sinaUser.FollowersCount = (int)dic["followers_count"];
                _sinaUser.FriendsCount = (int)dic["friends_count"];
                _sinaUser.FavouritesCount = (int)dic["favourites_count"];
                _sinaUser.CreatedDate = (string)dic["created_at"];
                _sinaUser.Following = (bool)dic["following"];
                _sinaUser.Verified = (bool)dic["verified"];
                _sinaUser.OnlineStatus = (int)dic["online_status"];
                _sinaUser.StatusesCount = (int)dic["statuses_count"];
                return _sinaUser;
            }

          OK,至此,你可以利用这些尝试去开发了。能够登录、获取用户信息,部署好了就可以让新浪审核了。腾讯的开放平台一大堆,读者要弄的话,自己慢慢去看了,不过大体步骤跟这差不多(多了个openid)。
          小提示下,开发者个人信息别随便填,有很多改不了(本人当初开发时,由于种种原因填了自己的邮箱,后来要离职,不过我还是给改回来了,当时新浪那个只在前台做验证,现在不知道改了没,所以修改下css就可以修改邮箱了)。

  • 相关阅读:
    maven之私服搭建
    maven之自定义archetype
    maven之自定义插件
    任务调度之 Elastic Job
    雪花算法原理解析
    基于 zxing 的二维码生成、解析
    spring-cloud-oauth2 认证授权
    spring security 自定义短信验证登录
    spring security session管理
    JDK1.8之HashMap实现原理
  • 原文地址:https://www.cnblogs.com/Fuss/p/2789378.html
Copyright © 2020-2023  润新知