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); }
private QQAuthorizationTokenResult AnalyParameter(string urlResult) { object qAuthorizationTokenResult = new QQAuthorizationTokenResult(); var urlResults = urlResult.Split('&'); Parallel.For(0, urlResults.Length, (i) => { var attbuiter = urlResults[i].Split('=')[0]; var value = urlResults[i].Split('=')[1]; var propertyInfo = qAuthorizationTokenResult.GetType().GetProperty(attbuiter, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreCase | System.Reflection.BindingFlags.Instance); if (propertyInfo != null) { propertyInfo.SetValue(qAuthorizationTokenResult, Convert.ChangeType(value, propertyInfo.PropertyType)); } }); return((QQAuthorizationTokenResult)qAuthorizationTokenResult); }