新浪API2.0调用痕迹 最近本人研究怎么调用新浪的接口。一开始由于感觉时间的仓促就从网上找了个实例。哪知道在模拟授权成功了以后进行接口的调用的时候才知道知道。人家验证是OAuth1.0认证。而现在新浪接口是1.0的。老是调用的时候报Http403 五位码表示access_token无效。这样一来我都弄疯了,连续折腾了3天,我都太折腾疯了。总结一句话哥太心急了。搞了半天就是找错。问人。折腾了半天。没有啥人能帮上忙。所以我就下定决心研究别人代码。通过我晚上苦苦的研究终于弄清楚了点思路了。第二天早上一起来灵感移动。其实真的他妈那么简单啊。下面我就给大家介绍我的实现思路。当然我也借助了别人写的SDK.加以我的改变生产了dll文件。提供后续开发这学习。我提供下载地址。希望能给苦命的程序员又所帮助。尤其是像我这样的菜鸟。老鸟当然不需要这些的。废话都不说了。下面就介绍下实现思路吧。 1首先我介绍下OAuth授权的内部原理: A:客户端从服务器端获取一个没有经过授权的tonken(一个32位的字符串) B:用户从客户端获取一个验证编号。 C:客户端向服务器端获取一个成功的授权编号 现在也不说这些内部原理了:直接阐述代码吧。 const long clientID = 1253617897;//申|¨o请?的ì?app_key//获取程序key const string responseType = "authorization_code";//这个值好像可以起好多的。集体是代表什么我还是希望别人多多参考新浪API const string redirectUri = "http://localhost:1978/sina/URLredirection.aspx";//回?调ì??地ì?址?¤这个回调地址是设置在新浪申请的应该平台里面的。。它在高级信息里面设置的。并且可以绑定域名 像我就直接使用127.0.0.1来玩 const string clientSecret = "";//申|¨o请?的ì?app_secret ILog logger = LogManager.GetLogger(typeof(SinaSerive)); SinaSerive serive = new SinaSerive(clientID.ToString(), clientSecret, redirectUri); protected void Page_Load(object sender, EventArgs e) { } /// <summary> /// 提?¨¢交?请?求¨?获?取¨?code /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e) { serive.GetAuthorizationCode(); //可¨|以°?返¤|ì回?code的ì?值|ì 这个值每次都要获取才能发送 } 下面的文件是回传地址里面的代码 public partial class URLredirection : System.Web.UI.Page { const long clientID = 1253617897;//申|¨o请?的ì?app_key const string responseType = "authorization_code"; const string redirectUri = "http://localhost:1978/sina/URLredirection.aspx";//回?调ì??地ì?址?¤ const string clientSecret = "a6cecf1c8fdfded99791a38efcde8e55";//申|¨o请?的ì?app_secret ILog logger = LogManager.GetLogger(typeof(SinaSerive)); SinaSerive serive = new SinaSerive(clientID.ToString(), clientSecret, redirectUri); protected void Page_Load(object sender, EventArgs e) { } /// <summary> /// 提?¨¢交? /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e) { try { serive.GetAccessTokenByAuthorizationCode(Request.QueryString["code"].ToString());//接¨?收o?code的ì?值|ì User usermodel = serive.Users_Show(Convert.ToInt64(serive.Token.uid)); Status s = serive.Statuses_Update(this.TextBox1.Text.Trim()); if (s.id > 0) // Page.ClientScript.RegisterStartupScript(this.GetType(), "1001", "<script>alert(发¤?é布?到ì?微?é博?成¨|功|!ê?)</script>"); Response.Write("成¨|功|了¢?"); else // Page.ClientScript.RegisterStartupScript(this.GetType(), "1002", "<script>alert(发¤?é布?到ì?微?é失o?ì败?¨1!ê?)</script>"); Response.Write("失o?ì败?¨1了¢?"); } catch (Exception) { Response.Write("你所拥有的code失效?ì,必须重新获取¨); //Page.ClientScript.RegisterStartupScript(this.GetType(), "1002", "<script>alert(必à?须?重?新?获?取¨?)</script>"); } } } 上面这些乱码我就不整了。。那些乱码要是别人复杂的时候可以把它去掉就行了。如果真的有不明白的地方可以和我探讨学习下。毕竟程序员都是很苦命人。我们苦命的人就互相帮助吧。联系方式QQ:952487152。。。。上面完全属于个人感受以理解。当然我也是表面理解下。如果要深入学习者可以去参考API。 |
|