开放平台那些事
开放平台的东西,目前很多人在搞,也不多说,本人之前做过,这里就新浪开放平台做个基本的总结,让那些刚弄的能快速点进入开发,如有不正确的还请诸位指出,免得误导人。
目前基本上要求使用的是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就可以修改邮箱了)。