public static bool AsyncJudgeAccessTokenValid(string access_token, string openid) { string baseurl = "https://api.weixin.qq.com/sns/auth?"; string url = baseurl + "access_token=" + access_token + "&openid=" + openid; LogHelper.Instance.AddInfoLog("Start AsyncJudgeAccessTokenValid"); HttpGetReturnModel result = HttpHandler.SyncGet <ErrorModel>(url); if (result.Exception != null) { //if (AccessWeiXinServerException != null) //{ // AccessWeiXinServerException(result.Exception.Message); //} return(false); } if (result.ResponseError != null) { //if (AccessWeiXinServerReturnError != null) //{ // AccessWeiXinServerReturnError("AsyncJudgeAccessTokenValid", result.ResponseError); //} return(false); } return(true); }
public static HttpGetReturnModel SyncGet <T>(string url) { //{ //"access_token":"bG_m-XbByI8L6MzdjPKYWVISx1JydfbZquy2x9q5Be1evUU_6bxkPrLvxHKW_wv7h-n_Z0s5SxQAHA5xAmQ4pdTMg5-iYTX5cUYro56x_k0", //"expires_in":7200, //"refresh_token":"Spe2THkGdS3La8kv_zolsuuMmv1-wh74qpQNJgmABvkJp-9WKl9sRDOUzPSrXyI8gM7G11VhvK1lEMDSKARTrBqivM1qni3l9ulRT8Gw6H8", //"openid":"o3_dVweaHgdE-Fl5jlMpk80E3lIY", //"scope":"snsapi_userinfo"} HttpGetReturnModel value = new HttpGetReturnModel(); try { HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url); myReq.ContentType = "get"; var response = myReq.GetResponse() as HttpWebResponse; string getString = ""; using (Stream stream = response.GetResponseStream()) { if (stream != null) { StreamReader reader = new StreamReader(stream); getString = reader.ReadToEnd(); reader.Close(); reader.Dispose(); } } LogHelper.Instance.AddInfoLog("WeiXin Server Response: " + getString); if (!string.IsNullOrEmpty(getString)) { using (MemoryStream memstream = new MemoryStream()) { StreamWriter writer = new StreamWriter(memstream); writer.Write(getString); writer.Flush(); memstream.Position = 0; if (getString.Contains("errcode")) { DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(ErrorModel)); ErrorModel err = (ErrorModel)deseralizer.ReadObject(memstream);// //反序列化ReadObject value.ResponseError = err; } else { DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(T)); T model = (T)deseralizer.ReadObject(memstream);// //反序列化ReadObject value.ResponseResult = model; } } } //if (callback != null) //{ // callback(value); //} return(value); } catch (Exception exc) { LogHelper.Instance.AddInfoLog("HttpHandler AsyncGet Request Exception:" + exc); value.Exception = exc; return(value); } }
protected void Page_Load(object sender, EventArgs e) { try { if (!this.IsPostBack) { //code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 string code = Request["code"]; string state = Request["state"]; this.lblMsg.Text = "欢迎进入迅灵矿场"; LogHelper.Instance.AddInfoLog("code:" + code + "; state: " + state); if (state == Config.state) { HttpGetReturnModel resultValue = WeiXinHandler.SynGetUserAccessToken(code); if (resultValue.Exception != null) { this.lblMsg.Text = "登录异常,请联系迅灵矿场管理员"; return; } if (resultValue.ResponseError != null) { Session[Config.SESSIONKEY_RESPONSEERROR] = resultValue.ResponseError; Server.Transfer("ErrorPage.aspx"); return; } AuthorizeResponseModel authObj = resultValue.ResponseResult as AuthorizeResponseModel; if (authObj != null) { this.lblMsg.Text = "authObj OK"; Session[Config.SESSIONKEY_AUTHORIZEOBJ] = authObj; resultValue = WeiXinHandler.SyncGetUserInfo(authObj.access_token, authObj.openid); } if (resultValue.Exception != null) { this.lblMsg.Text = "登录异常,请联系迅灵矿场管理员"; return; } if (resultValue.ResponseError != null) { Session[Config.SESSIONKEY_RESPONSEERROR] = resultValue.ResponseError; Server.Transfer("ErrorPage.aspx"); return; } WeiXinUserInfoModel userObj = resultValue.ResponseResult as WeiXinUserInfoModel; Session[Config.SESSIONKEY_WXUSERINFO] = userObj; string ip = System.Web.HttpContext.Current.Request.UserHostAddress; this.lblMsg.Text = "欢迎 " + userObj.nickname + " 进入迅灵矿场"; OperResultObject resultobj = WcfClient.Instance.WeiXinLogin(userObj.openid, userObj.nickname, ip); this.lblMsg.Text = "登录迅灵矿场,结果为:" + OperResult.GetMsg(resultobj.OperResultCode); if (resultobj.OperResultCode == OperResult.RESULTCODE_TRUE) { this.lblMsg.Text = "WeiXinLogin OK"; var player = WcfClient.Instance.GetPlayerByWeiXinOpenID(userObj.openid); this.lblMsg.Text = "player OK"; WebUserInfo userinfo = new WebUserInfo(); userinfo.xlUserID = player.SimpleInfo.UserID; userinfo.xlUserName = player.SimpleInfo.UserName; userinfo.wxOpenID = userObj.openid; // 登录状态100分钟内有效 MyFormsPrincipal <WebUserInfo> .SignIn(userinfo.xlUserName, userinfo, 100); //Session[userinfo.xlUserName] = player; Response.Redirect("View/Index.aspx", false); } else if (resultobj.OperResultCode == OperResult.RESULTCODE_USER_NOT_EXIST || resultobj.OperResultCode == OperResult.RESULTCODE_USERNAME_PASSWORD_ERROR) { Response.Redirect("LoginPage.aspx", false); } else { string message = string.IsNullOrEmpty(resultobj.Message) ? OperResult.GetMsg(resultobj.OperResultCode) : resultobj.Message; Response.Write("<script>alert('登录迅灵矿场失败, 原因为:" + message + "')</script>"); } } else { } } } catch (Exception exc) { this.lblMsg.Text = "WeiXinResponse Exception. " + exc.Message; LogHelper.Instance.AddErrorLog("WeiXinResponse Exception", exc); } }