/// <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)); } }
/// <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)); } }
///获取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)); }