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());
        }
Exemple #5
0
 /// <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;
 }
Exemple #6
0
        /// <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;
            }
        }
Exemple #7
0
        /// <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
        }