Exemple #1
0
        /// <summary>
        /// 用户授权回调
        /// </summary>
        /// <param name="code"></param>
        /// <param name="state"></param>
        /// <param name="appId"></param>
        /// <returns></returns>
        public ActionResult UserInfoCallback(string code, string state, string appId)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(Content("您拒绝了授权!"));
            }
            if (state != "wofweixin")
            {
                return(Content("验证失败!请从正规途径进入!"));
            }
            OAuthAccessTokenResult result = null;

            //通过,用code换取access_token
            try
            {
                var componentAccessToken = ComponentContainer.GetComponentAccessToken(component_AppId);
                result = OAuthApi.GetAccessToken(appId, component_AppId, componentAccessToken, code);
            }
            catch (Exception ex)
            {
                return(Content("用code换取accesstoken" + ex.Message));
            }
            if (result.errcode != ReturnCode.请求成功)
            {
                return(Content("错误:" + result.errmsg));
            }

            //存储或更新用户的访问令牌
            _userGenerator.UpdateOAuthAccessToken(new Models.UserOAuthAccessToken
            {
                OpenId      = result.openid,
                StartTime   = DateTime.Now,
                AccessToken = result.access_token,
            });

            try
            {
                OAuthUserInfo userInfo = OAuthApi.GetUserInfo(result.access_token, result.openid);
                //存储用户的微信资料
                _userGenerator.CreateUser(new Models.UserInfo
                {
                    OpenId   = userInfo.openid,
                    UnionId  = userInfo.unionid,
                    NickName = userInfo.nickname,
                    Gender   = userInfo.sex.ToString(),
                    Province = userInfo.province,
                    City     = userInfo.city,
                    County   = userInfo.country,
                    Portrait = userInfo.headimgurl,
                });
                return(View(userInfo));
            }
            catch (ErrorJsonResultException ex)
            {
                return(Content("获取用户信息" + ex.Message));
            }
        }
Exemple #2
0
        /// <summary>
        /// OAuthScope.snsapi_userinfo方式回调
        /// </summary>
        /// <param name="code"></param>
        /// <param name="state"></param>
        /// <param name="appId"></param>
        /// <returns></returns>
        public ActionResult UserInfoCallback(string code, string state, string appId)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(Content("您拒绝了授权!"));
            }

            if (state != "JeffreySu")
            {
                //这里的state其实是会暴露给客户端的,验证能力很弱,这里只是演示一下
                //实际上可以存任何想传递的数据,比如用户ID,并且需要结合例如下面的Session["OAuthAccessToken"]进行验证
                return(Content("验证失败!请从正规途径进入!"));
            }

            Senparc.Weixin.Open.OAuthAPIs.OAuthAccessTokenResult result = null;

            //通过,用code换取access_token
            try
            {
                var componentAccessToken = ComponentContainer.GetComponentAccessToken(options.AppId);
                result = Senparc.Weixin.Open.OAuthAPIs.OAuthApi.GetAccessToken(appId, options.AppId, componentAccessToken, code);
            }
            catch (Exception ex)
            {
                return(Content(ex.Message));
            }

            if (result.errcode != ReturnCode.请求成功)
            {
                return(Content("错误:" + result.errmsg));
            }
            //下面2个数据也可以自己封装成一个类,储存在数据库中(建议结合缓存)
            //如果可以确保安全,可以将access_token存入用户的cookie中,每一个人的access_token是不一样的
            //Session["OAuthAccessTokenStartTime"] = DateTime.Now;
            //Session["OAuthAccessToken"] = result;

            ViewData["OAuthAccessTokenStartTime"] = DateTime.Now;
            ViewData["OAuthAccessToken"]          = result;

            //因为第一步选择的是OAuthScope.snsapi_userinfo,这里可以进一步获取用户详细信息
            try
            {
                Senparc.Weixin.Open.OAuthAPIs.OAuthUserInfo userInfo = Senparc.Weixin.Open.OAuthAPIs.OAuthApi.GetUserInfo(result.access_token, result.openid);
                return(View(userInfo));
            }
            catch (ErrorJsonResultException ex)
            {
                return(Content(ex.Message));
            }
        }
Exemple #3
0
        ///获取COMPONENT_ACCESS_TOKEN
        public ActionResult GetComponentAccessToken()
        {
            var componentAccessToken = ComponentContainer.GetComponentAccessToken(component_AppId);

            //var authorizationInfo = AuthorizerContainer.GetAuthorizationInfo(component_AppId, authorizerId);
            //if (authorizationInfo == null)
            //{
            //    return Content("授权信息读取失败!");
            //}

            //var refreshToken = authorizationInfo.authorizer_refresh_token;
            //var result = AuthorizerContainer.RefreshAuthorizerToken(componentAccessToken, component_AppId, authorizerId,
            //    refreshToken);
            return(Json(componentAccessToken, JsonRequestBehavior.AllowGet));
        }
        public ActionResult RefreshAuthorizerAccessToken(string authorizerId)
        {
            var componentAccessToken = ComponentContainer.GetComponentAccessToken(component_AppId);
            var authorizationInfo    = AuthorizerContainer.GetAuthorizationInfo(component_AppId, authorizerId);

            if (authorizationInfo == null)
            {
                return(Content("授权信息读取失败!"));
            }

            var refreshToken = authorizationInfo.authorizer_refresh_token;
            var result       = AuthorizerContainer.RefreshAuthorizerToken(componentAccessToken, component_AppId, authorizerId,
                                                                          refreshToken);

            return(Json(result));
        }