Exemplo n.º 1
0
        public async System.Threading.Tasks.Task <ActionResult> PostAsync([FromQuery] WechatMsgRequestModel model)
        {
            Logger.LogDebug("request msg:" + model.ToJson());
            using (var ms = new MemoryStream())
            {
                await Request.Body.CopyToAsync(ms);

                ms.Seek(0, SeekOrigin.Begin);

                using (var reader = new StreamReader(ms, System.Text.Encoding.UTF8))
                {
                    model.RequestContent = await reader.ReadToEndAsync();

                    Logger.LogDebug("RequestContent from Request:" + model.RequestContent);
                }
            }
            if (string.IsNullOrEmpty(model.RequestContent))
            {
                return(Content("RequestContent 为空"));
            }

            var context = new WeChatContext(model);

            return(await WechatAsync(context));
        }
Exemplo n.º 2
0
        internal async System.Threading.Tasks.Task <ContentResult> WechatAsync(WeChatContext wechatContext)
        {
            var response = await wechatContext.GetResponseAsync();

            if (response.IsNullOrEmpty())
            {
                return(Content(""));
            }
            return(new WechatResult(response));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            string source_url = Request.QueryString["source_url"];
            string code       = Request.QueryString["code"];
            string state      = Request.QueryString["state"];

            if (!string.IsNullOrEmpty(source_url))
            {
                string location = Request.RawUrl;
                int    index    = location.IndexOf('=');
                source_url = location.Substring(index + 1, location.Length - index - 1);
                source_url = source_url.Replace('&', '*');


                Utils.StringToTxt("wxOAuth_WeChat_GetCode————source_url==" + source_url);
                Utils.WriteCookie("wxOAuth_WeChatGrant", "True");
                string url = WeChatContext.GetRedirectCode("/html/wxOAuth.aspx", source_url, true);

                Response.Redirect(url);
            }
            else if (!string.IsNullOrEmpty(code))
            {
                string temp      = Utils.UrlDecode(state);
                string decodeurl = temp.Replace('*', '&');

                Utils.StringToTxt("wxOAuth_wxLogin————code==" + code + ";wxOAuth_state==" + decodeurl);

                WeiXin_Access_token access_token = WeChatContext.GetAccessModel(code);

                if (access_token != null)
                {
                    SnsapiUserInfo userInfo = WeChatContext.GetSnsapiUserInfo(access_token.Access_token, access_token.Openid);//获取用户信息
                    if (userInfo != null)
                    {
                        user_info_entity entity = new user_info_entity();

                        //公众号openid存在
                        Model.user_oauths oaModel = new BLL.user_oauths().GetModel(" appid = '" + access_token.Openid + "'");
                        if (oaModel != null)
                        {
                            try
                            {
                                Utils.StringToTxt("wxOAuth_wxLogin————公众号openid存在,则更新openID=" + access_token.Openid + "和unionID=" + userInfo.unionid);
                                Model.user_info model = new BLL.user_info().GetModel(oaModel.user_id);

                                Utils.StringToTxt("wxOAuth_wxLogin————用户信息:" + Newtonsoft.Json.JsonConvert.SerializeObject(model));
                                Utils.StringToTxt("wxOAuth_wxLogin————认证信息:" + Newtonsoft.Json.JsonConvert.SerializeObject(oaModel));

                                //更新unionid(多应用唯一识别码)
                                oaModel.appid   = userInfo.openid;
                                oaModel.unionid = userInfo.unionid;
                                new BLL.user_oauths().Update(oaModel);

                                if (model.school_id == 0)//没有学校,公共资源
                                {
                                    decodeurl += "&method=scan";
                                    Response.Redirect(decodeurl);
                                }
                                else//有学校,学校资源
                                {
                                    int    idindex = decodeurl.IndexOf('=');
                                    string id      = decodeurl.Substring(idindex + 1, decodeurl.Length - idindex - 1);

                                    BLL.common_resource   resBll = new BLL.common_resource();
                                    Model.common_resource res    = resBll.GetModel(Convert.ToInt32(id));
                                    if (res != null)
                                    {
                                        if (res.from_id == (int)EnumCollection.resource_from.精品微课)       //如果是精品微课的资源
                                        {
                                            if (res.group_id == (int)EnumCollection.resource_group.公共资源) //若此资源是公共资源,查询此章节下的学校资源
                                            {
                                                Model.common_resource newRes = resBll.GetModel(string.Format(" from_id = {0} and group_id = {1} and type = {2} and data_id = {3}",
                                                                                                             res.from_id, (int)EnumCollection.resource_group.学校资源, res.type, res.data_id));
                                                if (newRes != null)
                                                {
                                                    decodeurl = decodeurl.Replace("id=" + id, "id=" + newRes.id);
                                                    Utils.StringToTxt("wxOAuth_wxLogin————学校资源=" + decodeurl);
                                                }

                                                decodeurl += "&method=scan";
                                                Response.Redirect(decodeurl);
                                            }
                                            else if (res.group_id == (int)EnumCollection.resource_group.学校资源)//若此资源是学校资源,判断是否是本学校的
                                            {
                                                if (model.school_id != res.school_id)
                                                {
                                                    Response.Write("您没有权限查看此资源");
                                                }
                                                else
                                                {
                                                    decodeurl += "&method=scan";
                                                    Response.Redirect(decodeurl);
                                                }
                                            }
                                        }
                                        else if (res.from_id == (int)EnumCollection.resource_from.课堂)//如果是课堂的资源
                                        {
                                            decodeurl += "&method=scan";
                                            Response.Redirect(decodeurl);
                                        }
                                    }
                                    else
                                    {
                                        decodeurl += "&method=scan";
                                        Response.Redirect(decodeurl);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                Utils.StringToTxt("wxOAuth_wxLogin————获取数据库用户信息出现异常:" + ex.Message);
                                Response.Write("获取数据库用户信息出现异常:" + ex.Message);
                                return;
                            }
                        }
                        else//不存在
                        {
                            if (Utils.GetCookie("wxOAuth_WeChatGrant") == "True")
                            {
                                Utils.WriteCookie("wxOAuth_WeChatGrant", "False");

                                Utils.StringToTxt("wxOAuth_wxLogin————公众号openid不存在,是全新用户");

                                #region 创建用户
                                Model.user_info model = new Model.user_info();
                                model.group_id    = (int)EnumCollection.user_group.普通用户;
                                model.user_name   = "";
                                model.phone       = "";
                                model.salt        = Utils.GetCheckCode(6);
                                model.user_pwd    = "";
                                model.nick_name   = userInfo.nickname;
                                model.avatar      = userInfo.headimgurl;
                                model.integral    = 0;
                                model.school_id   = 0;
                                model.school_name = "";
                                model.college     = "";
                                model.job         = "";
                                model.course      = "";
                                model.line_way    = "";
                                model.area        = userInfo.country + userInfo.province + userInfo.city;
                                model.address     = "";
                                model.reg_ip      = RequestHelper.GetIP();
                                model.add_time    = System.DateTime.Now;

                                BLL.user_info bll = new BLL.user_info();
                                int           row = bll.Add(model);
                                if (row > 0)
                                {
                                    model.id                 = row;
                                    entity.UserInfo          = model;
                                    entity.UserInfo.user_pwd = "";
                                    entity.UserInfo.salt     = "";
                                    entity.UserInfo.reg_ip   = "";

                                    BLL.user_tree tBll = new BLL.user_tree();
                                    //1 创建code
                                    string tree_code = string.Empty;
                                    do
                                    {
                                        tree_code = Utils.Number(6);
                                    } while (tBll.GetModel(" code = '" + tree_code + "'") != null);

                                    //添加关系
                                    #region 添加关系
                                    Model.user_tree tree = new Model.user_tree();
                                    tree.user_id     = row;
                                    tree.code        = tree_code;
                                    tree.parent_code = "0";
                                    tree.grand_code  = "0";

                                    int treeid = tBll.Add(tree);
                                    if (treeid > 0)
                                    {
                                        tree.id         = treeid;
                                        entity.UserTree = tree;
                                    }
                                    #endregion

                                    #region 添加认证信息
                                    Utils.StringToTxt("wxOAuth_wxLogin————用户信息:" + Newtonsoft.Json.JsonConvert.SerializeObject(model));

                                    Model.user_oauths model1 = new Model.user_oauths();
                                    model1.user_id = row;
                                    model1.type    = (int)EnumCollection.user_oauths.公众号微信登录;
                                    model1.name    = EnumCollection.user_oauths.公众号微信登录.ToString();
                                    model1.appid   = userInfo.openid;
                                    model1.unionid = userInfo.unionid;

                                    int oaid = new BLL.user_oauths().Add(model1);
                                    if (row > 0)
                                    {
                                        model1.id         = row;
                                        entity.UserOAuths = model1;

                                        Utils.StringToTxt("wxOAuth_wxLogin————新增的认证信息:" + Newtonsoft.Json.JsonConvert.SerializeObject(model1));
                                    }
                                    #endregion

                                    Response.Redirect(decodeurl);
                                    return;
                                }
                                else
                                {
                                    Utils.WriteCookie("wxOAuth_WeChatGrant", "True");
                                    string url = WeChatContext.GetRedirectCode("/html/wxOAuth.aspx", state, true);
                                    Response.Redirect(url);
                                    return;
                                }
                                #endregion
                            }
                            else
                            {
                                Utils.WriteCookie("wxOAuth_WeChatGrant", "True");
                                string url = WeChatContext.GetRedirectCode("/html/wxOAuth.aspx", state, true);
                                Response.Redirect(url);
                                return;
                            }
                        }
                    }
                    else
                    {
                        Response.Write("微信认证失败,请重试");
                        return;
                    }
                }
                else
                {
                    Response.Write("token获取失败");
                    return;
                }
            }
        }
Exemplo n.º 4
0
 public HomeController(WeChatContext context)
 {
     _context = context;
 }