新浪API2.0調用痕跡
最近本人研究怎么調用新浪的接口。一開(kāi)始由于感覺(jué)時(shí)間的倉促就從網(wǎng)上找了個(gè)實(shí)例。哪知道在模擬授權成功了以后進(jìn)行接口的調用的時(shí)候才知道知道。人家驗證是OAuth1.0認證。而現在新浪接口是1.0的。老是調用的時(shí)候報Http403 五位碼表示access_token無(wú)效。這樣一來(lái)我都弄瘋了,連續折騰了3天,我都太折騰瘋了??偨Y一句話(huà)哥太心急了。搞了半天就是找錯。問(wèn)人。折騰了半天。沒(méi)有啥人能幫上忙。所以我就下定決心研究別人代碼。通過(guò)我晚上苦苦的研究終于弄清楚了點(diǎn)思路了。第二天早上一起來(lái)靈感移動(dòng)。其實(shí)真的他媽那么簡(jiǎn)單啊。下面我就給大家介紹我的實(shí)現思路。當然我也借助了別人寫(xiě)的SDK.加以我的改變生產(chǎn)了dll文件。提供后續開(kāi)發(fā)這學(xué)習。我提供下載地址。希望能給苦命的程序員又所幫助。尤其是像我這樣的菜鳥(niǎo)。老鳥(niǎo)當然不需要這些的。廢話(huà)都不說(shuō)了。下面就介紹下實(shí)現思路吧。
1首先我介紹下OAuth授權的內部原理:
A:客戶(hù)端從服務(wù)器端獲取一個(gè)沒(méi)有經(jīng)過(guò)授權的tonken(一個(gè)32位的字符串)
B:用戶(hù)從客戶(hù)端獲取一個(gè)驗證編號。
C:客戶(hù)端向服務(wù)器端獲取一個(gè)成功的授權編號
現在也不說(shuō)這些內部原理了:直接闡述代碼吧。
const long clientID = 1253617897;//申|¨o請?的ì?app_key//獲取程序key
const string responseType = "authorization_code";//這個(gè)值好像可以起好多的。集體是代表什么我還是希望別人多多參考新浪API
const string redirectUri = "http://localhost:1978/sina/URLredirection.aspx";//回?調ì??地ì?址?¤這個(gè)回調地址是設置在新浪申請的應該平臺里面的。。它在高級信息里面設置的。并且可以綁定域名
像我就直接使用127.0.0.1來(lái)玩
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的ì?值|ì 這個(gè)值每次都要獲取才能發(fā)送
}
下面的文件是回傳地址里面的代碼
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(發(fā)¤?é布?到ì?微?é博?成¨|功|!ê?)</script>");
Response.Write("成¨|功|了¢?");
else
// Page.ClientScript.RegisterStartupScript(this.GetType(), "1002", "<script>alert(發(fā)¤?é布?到ì?微?é失o?ì敗?¨1!ê?)</script>");
Response.Write("失o?ì敗?¨1了¢?");
}
catch (Exception)
{
Response.Write("你所擁有的code失效?ì,必須重新獲取¨);
//Page.ClientScript.RegisterStartupScript(this.GetType(), "1002", "<script>alert(必à?須?重?新?獲?取¨?)</script>");
}
}
}
上面這些亂碼我就不整了。。那些亂碼要是別人復雜的時(shí)候可以把它去掉就行了。如果真的有不明白的地方可以和我探討學(xué)習下。畢竟程序員都是很苦命人。我們苦命的人就互相幫助吧。聯(lián)系方式QQ:952487152。。。。上面完全屬于個(gè)人感受以理解。當然我也是表面理解下。如果要深入學(xué)習者可以去參考API。
聯(lián)系客服