public override async Task <AuthorizationResult> GetTokenAsync(Application application, HttpRequest callbackRequest) { if (callbackRequest == null) { throw new ArgumentNullException(nameof(callbackRequest)); } var code = callbackRequest.QueryString["code"]; var grant_type = "authorization_code"; var client_id = application.AppKey; var client_secret = application.Secret; var redirect_uri = application.RedirectUrl; StringBuilder requestPar = new StringBuilder(); requestPar.Append($"grant_type={grant_type}&"); requestPar.Append($"client_id={client_id}&"); requestPar.Append($"client_secret={client_secret}&"); requestPar.Append($"redirect_uri={redirect_uri}&"); requestPar.Append($"code={code}"); var result = await HttpHelp.GetStrAsync(GenerateApiUrl(application, requestPar.ToString())).ConfigureAwait(false); ValidateResult(result); QQAuthorizationTokenResult tokenResult = new QQAuthorizationTokenResult(); await Task.Factory.StartNew(() => { tokenResult = AnalyParameter(result); }).ConfigureAwait(false); AuthorizationResult authorizationResult = new AuthorizationResult { ExpireAt = DateTime.Now.AddMinutes(-3).AddSeconds(tokenResult.expires_in), RefreshExpireAt = DateTime.Now.AddMinutes(-3).AddSeconds(tokenResult.expires_in), Token = tokenResult.access_token, OpenId = await GetOpenId(tokenResult.access_token).ConfigureAwait(false) }; return(authorizationResult); }
/// <summary> /// 接受回调请求后向平台换取Token。 /// </summary> /// <param name="application">平台应用</param> /// <param name="callbackRequest">回调请求。</param> public override async Task<AuthorizationResult> GetTokenAsync(Application application, HttpRequest callbackRequest) { var error = callbackRequest["error"]; if (null != error) return null; var grantType = "authorization_code";//授权类型,此流程下,该值固定为authorization_code var code = callbackRequest["code"];//授权请求返回的授权码 var redirectUri = application.RedirectUrl;//应用的回调地址,必须与创建应用时所填回调页面url一致 var clientId = application.AppKey;//即创建应用时的Appkey(从JOS控制台->管理应用中获取) var clientSecret = application.Secret;//即创建应用时的Appsecret(从JOS控制台->管理应用中获取) var clientState = "";//状态参数,由ISV自定义,颁发授权后会原封不动返回 string tokenurl = "https://open.koudaitong.com/oauth/token";//获取token的地址 StringBuilder tokenurlpar = new StringBuilder(); tokenurlpar.AppendFormat("grant_type={0}&code={1}&redirect_uri={2}&client_id={3}&client_secret={4}", grantType, code, redirectUri, clientId, clientSecret); if (string.IsNullOrWhiteSpace(clientState)) tokenurlpar.AppendFormat("&state={0}", clientState); var jsonResult = await HttpHelp.GetStrAsync(tokenurl + "/" + tokenurlpar.ToString()); JdTokenResult tokenResult = tokenResult = await Task.Factory.StartNew(() => { return JsonConvert.DeserializeObject<JdTokenResult>(jsonResult); }); if (string.IsNullOrEmpty(tokenResult.access_token)) return null; AuthorizationResult result = new AuthorizationResult { ExpireAt = new DateTime(1970, 1, 1).AddMilliseconds(double.Parse(tokenResult.time) + double.Parse(tokenResult.expires_in)), RefreshExpireAt = new DateTime(1970, 1, 1).AddMilliseconds(double.Parse(tokenResult.time) + double.Parse(tokenResult.expires_in)), RefreshToken = tokenResult.refesh_token, Token = tokenResult.access_token, TokenType = tokenResult.token_type, OpenId = tokenResult.uid, UserName = tokenResult.user_nick }; return result; }
/// <summary> /// 接受回调请求后向平台换取Token。 /// </summary> /// <param name="application">平台应用。</param> /// <param name="callbackRequest">回调请求。</param> public override async Task<AuthorizationResult> GetTokenAsync(Application application, HttpRequest callbackRequest) { #region 请求参数 //授权码 string code = callbackRequest.QueryString["code"]; //应用app key string client_id = application.AppKey; //应用密匙 string client_secret = application.Secret; //换取方式 string grant_type = "authorization_code"; //回调请求 string redirect_uri = application.RedirectUrl; #endregion #region 生成请求URL //请求URL string url = application.Platform.TokenUrl; //请求参数拼接 string para = string.Format("code={0}&app_key={1}&app_secret={2}&grant_type={3}&redirect_uri={4}", code, client_id, client_secret, grant_type, redirect_uri); #endregion #region 发送请求及处理结果 //返回json字符串结果 string json = await HttpHelp.GetStrAsync(url + "?" + para); JavaScriptSerializer jss = new JavaScriptSerializer(); if (json.Contains("data")) { //反序列化json字符串 MeiLiShuoData meiLiShuoData = await Task.Factory.StartNew(() => { return Newtonsoft.Json.JsonConvert.DeserializeObject<MeiLiShuoData>(json); }); MeiLiShuoJson meiLiShuoJson = meiLiShuoData.data; //填充数据返回 return new AuthorizationResult() { OpenId = meiLiShuoJson.Meilishuo_user_id, Token = meiLiShuoJson.Access_token, RefreshToken = meiLiShuoJson.Refresh_token, TokenType = meiLiShuoJson.Token_type, ExpireAt = DateTime.Now.AddMinutes(-1).AddSeconds(36000), RefreshExpireAt = DateTime.FromFileTimeUtc(meiLiShuoJson.Re_expires_in), UserName = meiLiShuoData.data.Meilishuo_shop_nick }; } else//异常处理 { //抛异常 MeiLiShuoExecption ex = jss.Deserialize<MeiLiShuoExecption>(json); throw EtpException.Create(application.Platform.Name, ex.Error_code, ex.Message, "", ""); } #endregion }
private async Task <string> GetOpenId(string token) { var url = GetOpenIdApiUrl + token; var result = await HttpHelp.GetStrAsync(url).ConfigureAwait(false); ValidateResult(result); result = result.Replace("callback(", "").Replace(");", ""); var jsonResult = (JObject)JsonConvert.DeserializeObject(result); return(jsonResult["openid"].ToString()); }
/// <summary> /// 接受回调请求后向平台换取Token。 /// </summary> /// <param name="application">应用信息。</param> /// <param name="callbackRequest">回调请求。</param> public override async Task<AuthorizationResult> GetTokenAsync(Application application, HttpRequest callbackRequest) { //获取授权码 string authorizationCode = callbackRequest.QueryString["code"]; string view = callbackRequest.QueryString["view"]; string appSecret = application.Secret; string gateway = application.Platform.TokenUrl; string grantType = "authorization_code"; string appKey = application.AppKey; string redirectUrl = application.RedirectUrl; string state = callbackRequest.QueryString["state"]; StringBuilder sb = new StringBuilder(); sb.AppendFormat("?grant_type={0}&", grantType); sb.AppendFormat("code={0}&", authorizationCode); sb.AppendFormat("view={0}&", view); sb.AppendFormat("client_id={0}&", appKey); sb.AppendFormat("client_secret={0}&", appSecret); sb.AppendFormat("redirect_uri={0}", redirectUrl); if (!string.IsNullOrEmpty(state)) { sb.AppendFormat("&state={0}", state); } byte[] dataBytes = Encoding.UTF8.GetBytes(sb.ToString()); gateway += sb.ToString(); //s.Close(); string json = await HttpHelp.GetStrAsync(gateway); Result result = await Task.Factory.StartNew(() => { return Newtonsoft.Json.JsonConvert.DeserializeObject<Result>(json); }); result.taobao_user_nick = HttpUtility.UrlDecode(result.taobao_user_nick); AuthorizationResult authorizationResult = new AuthorizationResult() { Token = result.access_token, TokenType = result.token_type, RefreshToken = result.refresh_token, ExpireAt = DateTime.Now.AddMinutes(-3).AddSeconds(result.expires_in), OpenId = result.taobao_user_id, UserName = result.taobao_user_nick }; return authorizationResult; }
/// <summary> /// 接受回调请求后向平台换取Token。 /// </summary> /// <param name="application">平台应用</param> /// <param name="callbackRequest">回调请求。</param> public override async Task <AuthorizationResult> GetTokenAsync(Application application, HttpRequest callbackRequest) { try { string tokenUrl = application.Platform.TokenUrl; string code = callbackRequest["code"]; var clientid = application.AppKey; //分配的调用Oauth的应用端ID(client_id)"a20ed852cb548fac9b" var clientsecret = application.Secret; //分配的调用Oauth的应用端Secret(client_secret)"c84925ce527c3bf452cd086dfc135b91" var granttype = "authorization_code"; //授与方式[固定为"authorization_code"](grant_type) string redirectUrl = application.RedirectUrl; string toktemplet = "client_id={0}&client_secret={1}&grant_type={2}&code={3}&redirect_uri={4}"; string tokenPar = string.Format(toktemplet, clientid, clientsecret, granttype, code, redirectUrl); var jsonRsult = await HttpHelp.GetStrAsync(tokenUrl + "?" + tokenPar); YouZanTokenResult tokenResult = new YouZanTokenResult(); tokenResult = await Task.Factory.StartNew(() => { return(JsonConvert.DeserializeObject <YouZanTokenResult>(jsonRsult)); }); AuthorizationResult result = new AuthorizationResult { ExpireAt = DateTime.Now.AddMinutes(-3).AddSeconds(tokenResult.expires_in), RefreshExpireAt = DateTime.Now.AddMinutes(-3).AddSeconds(tokenResult.expires_in), RefreshToken = tokenResult.refresh_token, Token = tokenResult.access_token, TokenType = tokenResult.token_type, OpenId = string.Empty, UserName = "" }; return(result); } catch (Exception) { throw; } }
/// <summary> /// 接受回调请求后向平台换取Token。 /// </summary> /// <param name="application">应用信息。</param> /// <param name="callbackRequest">回调请求。</param> public override async Task<AuthorizationResult> GetTokenAsync(Application application, HttpRequest callbackRequest) { #region 获取Token请求参数 //从请求报文中获取签名 string code = callbackRequest.Params["Code"]; //授权类型,使用authorization_code即可 string grant_type = "authorization_code"; //是否需要返回refresh_token,如果返回了refresh_token,原来获取的refresh_token也不会失效,除非超过半年有效期 string need_refresh_token = "true"; //app唯一标识,即appKey string client_id = application.AppKey; //app密钥 string client_secret = application.Secret; //app入口地址 string redirect_uri = application.RedirectUrl; #endregion #region 生成请求URL string url = application.Platform.TokenUrl.Replace("YOUR_APPKEY", application.AppKey); string para = string.Format("grant_type={0}&need_refresh_token={1}&client_id= {2}&client_secret= {3}&redirect_uri={4}&code={5}", grant_type, need_refresh_token, client_id, client_secret, redirect_uri, code); #endregion #region 发送请求及返回结果 try { //发送请求报文 string json = await HttpHelp.GetStrAsync(url + "?" + para); //判断是否返回异常 if (json.Contains("error")) { AlibabaException alibabaException = await Task.Factory.StartNew(() => { return JsonConvert.DeserializeObject<AlibabaException>(json); }); //抛出异常 if (string.IsNullOrWhiteSpace(alibabaException.Error)) { throw EtpException.Create(application.Platform.Name, alibabaException.Error_code.ToString(), alibabaException.Error_message, "", ""); } else { throw EtpException.Create(application.Platform.Name, alibabaException.Error, alibabaException.Error_description, "", ""); } } else { //把返回的json字符串反序列化 AlibabaJson alibabaJson = await Task.Factory.StartNew(() => { return JsonConvert.DeserializeObject<AlibabaJson>(json); }); //填充AuthorizationResult数据 return new AuthorizationResult() { Token = alibabaJson.Access_token, OpenId =alibabaJson.AliId, RefreshToken = alibabaJson.Refresh_token, UserName = alibabaJson.MemberId, ExpireAt = DateTime.Now.AddMinutes(-1).AddSeconds(alibabaJson.Expires_in), RefreshExpireAt = DateTime.Parse(alibabaJson.Refresh_token_timeout.Substring(0, 4) + "-" + alibabaJson.Refresh_token_timeout.Substring(4, 2) + "-" + alibabaJson.Refresh_token_timeout.Substring(6, 2) + " " + alibabaJson.Refresh_token_timeout.Substring(8, 2) + ":" + alibabaJson.Refresh_token_timeout.Substring(10, 2) + ":" + alibabaJson.Refresh_token_timeout.Substring(12, 2)) }; } } catch (Exception ex) { throw ex; } #endregion }