用于新浪微博,騰訊QQ,淘寶 OAUTH2.0 登陸的NET類庫封裝
目前開放OAuth2互聯接口比較常用的有新浪微博,騰訊QQ,淘寶,其實還有微信,只是微信的我木有申請下來,因為手續麻煩,貌似需要掃描它的協議簽字然后發過去,所以就放棄封裝微信OAuth2登陸接口了,待以后給補上!關于淘寶OAuth網站接入登陸目前淘寶是暫停審核了貌似,也許是因為財大氣粗比較任性吧,不過你還是可申請賬號的,可以做應用提交給淘寶。
需要源代碼的小伙伴請猛戳這里下載,需要已經編譯好Dll的小伙伴請猛戳這里下載。
一。 下面給出各個OAuth2.0申請合作的地址:
-- sinaweibo OAuth2.0 --
申請接入OAuth2合作地址:http://open.weibo.com (微博.開放平臺)
授權Url: https://api.weibo.com/oauth2/authorize?client_id=你的ClientId&redirect_uri=你的回調Url&response_type=code&display=default%20&state=sinaweibo
-- qq OAuth2.0 --
申請接入OAuth2合作地址: http://connect.qq.com (所謂的QQ互聯,貌似還有一個http://open.qq.com,但這個我還木有用過,就先用QQ互聯吧反正是可以登陸)
授權Url: http://openapi.qzone.qq.com/oauth/show?which=Login&display=pc&client_id=你的ClientId&redirect_uri=你的回調Url&response_type=code&display=default%20&state=qq
-- taobao OAuth2.0 --
申請接入OAuth2合作地址:http://open.taobao.com/index.htm
授權Url: https://oauth.taobao.com/authorize?client_id=你的ClientId&redirect_uri=你的回調Url&response_type=code&display=default%20&state=taobao
-- WeiXin OAuth2.0 --
申請接入OAuth2合作地址:https://open.weixin.qq.com
下面開始給dotNET平臺的小伙伴們發福利啦,封裝了一個類實現了接入到新浪微博,騰訊QQ,淘寶,和獲取用戶信息,就實現了下面的2個接口,分別是IOAuthClient和IUserInterface。
- namespace GeRenXing.OpenPlatform
- {
- public interface IOAuthClient
- {
- AuthOption Option { get; }
- AuthToken Token { get; }
- IUserInterface User { get; }
- String GetAuthorizeUrl(ResponseType responseType);
- AuthToken GetAccessTokenByAuthorizationCode(string code);
- AuthToken GetAccessTokenByPassword(string passport, string password);
- AuthToken GetAccessTokenByRefreshToken(string refreshToken);
- String Get(String url, params RequestOption[] options);
- String Post(String url, params RequestOption[] options);
- }
- }
需要封裝更多api的請自行擴展,也可以直接調用IOAuthClient的Get和Post方法直接傳遞參數快速訪問api。
新浪微博和淘寶在獲取Token的時候就把OpenId直接返回給你了,而騰訊QQ的OAuth2.0接入里獲取Token是不會返回OpenId的,需要單獨訪問https://graph.qq.com/oauth2.0/me獲取OpenId,對于這個不同點我在封裝的騰訊QQ ParseAccessToken 方法里面已經自動處理了,就是再次發起了一次獲取用戶Open Id的請求。
各位小伙伴注意啦:訪問授權Url返回的Code碼只能使用一次,否則會報下面這個錯誤:
{"error":"invalid_grant","error_code":21325,"request":"/oauth2/access_token","error_uri":"/oauth2/access_token","error_description":"invalid authorization code:2c2cb4e1f6b70650acbe1dad757ea6bb"}
二。 下面做了個測試的控制臺程序,ClientId和ClientSecret,CallbackUrl請改為自己的。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Diagnostics;
- using GeRenXing.OpenPlatform;
- namespace GeRenXing.OpenPlatform.Test
- {
- class Program
- {
- private static Dictionary<String, IOAuthClient> m_oauthClients;
- static void Main(string[] args)
- {
- //初始化開放平臺客戶端(請替換成自己的ClientId,ClientScrert,CallbackUrl)
- m_oauthClients = new Dictionary<string, IOAuthClient>();
- m_oauthClients["sinaweibo"] = new OpenPlatform.OAuthClient.SinaWeiBoClient("You ClientId", "You ClientScrert", "You Callback Url");
- m_oauthClients["qq"] = new OpenPlatform.OAuthClient.TencentQQClient("You ClientId", "You ClientScrert", "You Callback Url");
- m_oauthClients["taobao"] = new OpenPlatform.OAuthClient.TaoBaoClient("You ClientId", "You ClientScrert", "You Callback Url");
- //測試
- OAuthTest("sinaweibo");
- //OAuthTest("qq");
- //OAuthTest("taobao");
- Console.ReadKey(true);
- }
- private static void OAuthTest(String platformCode)
- {
- String authorizeUrl = String.Empty;
- if (String.IsNullOrEmpty(platformCode)) platformCode = "sinaweibo";
- Console.WriteLine("OpenPlatform Request For " + platformCode);
- Console.WriteLine("");
- IOAuthClient oauthClient = m_oauthClients[platformCode];
- oauthClient.Option.State = platformCode;
- //***步:獲取開放平臺授權地址
- authorizeUrl = m_oauthClients[platformCode].GetAuthorizeUrl(ResponseType.Code);
- Console.WriteLine("Step 1 - OAuth2.0 for Redirect AuthorizeUrl: ");
- Console.WriteLine(authorizeUrl);
- //第二步:打開IE瀏覽器獲取Code
- Process p = new Process();
- ProcessStartInfo psi = new ProcessStartInfo();
- psi.Arguments = authorizeUrl;
- psi.FileName = "C:\\Program Files\\Internet Explorer\\iexplore.exe";
- p.StartInfo = psi;
- p.Start();
- Console.WriteLine("");
- Console.WriteLine("OAuth2.0 Input Server Response Code");
- String code = Console.ReadLine();
- //第三步:獲取開放平臺授權令牌
- oauthClient = m_oauthClients[platformCode];
- AuthToken accessToken = oauthClient.GetAccessTokenByAuthorizationCode(code);
- if (accessToken != null)
- {
- Console.WriteLine("");
- Console.WriteLine("Step 2 - OAuth2.0 for AccessToken: " + accessToken.AccessToken);
- //輸出原始響應數據
- Console.WriteLine("GetAccessToken Raw Response : ");
- Console.WriteLine(oauthClient.Token.TraceInfo);
- //第四步:調用開放平臺API,獲取開放平臺用戶信息
- dynamic oauthProfile = oauthClient.User.GetUserInfo();
- //輸出解析出來的用戶昵稱
- Console.WriteLine("");
- Console.WriteLine("Step 3 - Call Open API UserInfo: ");
- Console.WriteLine("UserInfo Nickname: " + oauthClient.Token.User.Nickname);
- //輸出原始響應數據
- Console.WriteLine("GetUserInfo Raw Response : ");
- Console.WriteLine(oauthClient.Token.TraceInfo);
- }
- }
- }
- }
三。 下面給出幾張測試的截圖:
SianWeiBo Oauth2.0
++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++
QQ OAuth2.0
++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++
TaoBao OAuth2.0
++++++++++++++++++++++++++++++++++++++++++++++++++++
