コード例 #1
0
ファイル: WeiXinHandler.cs プロジェクト: sycomix/SuperMiners
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }