/**
         * snsapi_userinfo
         * **/
        public async Task <ActionResult> OAuthSnsApiUserInfo()
        {
            string code = Request.QueryString["code"];

            try
            {
                if (!string.IsNullOrEmpty(code))
                {
                    OAuthToken oauthToken = await WeChatHepler.GetAsync <OAuthToken>(
                        $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={SettingsManager.WeiXin.AppId}&secret={SettingsManager.WeiXin.AppSecret}&code={code}&grant_type=authorization_code");


                    if (!string.IsNullOrEmpty(oauthToken?.openid) && !string.IsNullOrEmpty(oauthToken.access_token))
                    {
                        OAuthUserInfo userInfo = await WeChatHepler.GetAsync <OAuthUserInfo>(
                            $"https://api.weixin.qq.com/sns/userinfo?access_token={oauthToken.access_token}&openid={oauthToken.openid}&lang=zh_CN");

                        if (userInfo != null)
                        {
                            Log("获取到用户信息nickName:" + userInfo.nickname);
                            ViewData["headImage"] = userInfo.headimgurl;
                            ViewData["openid"]    = userInfo.Openid;
                            ViewData["nickName"]  = userInfo.nickname;
                            if (userInfo.sex == 0)
                            {
                                ViewData["sex"] = "未知";
                            }
                            else if (userInfo.sex == 1)
                            {
                                ViewData["sex"] = "男";
                            }
                            else
                            {
                                ViewData["sex"] = "女";
                            }
                            ViewData["province"] = userInfo.province;
                            ViewData["city"]     = userInfo.city;
                        }
                        else
                        {
                            Log("未获取到用户信息");
                        }
                    }
                    else
                    {
                        Log("access_token:" + oauthToken.access_token + ",openid:" + oauthToken.openid);
                    }
                }
                else
                {
                    return(Redirect(
                               $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={SettingsManager.WeiXin.AppId}&redirect_uri={Server.UrlEncode("http://" + Request.Url.Host + Url.Action("OAuthSnsApiUserInfo"))}&response_type=code&scope=snsapi_userinfo&state=123456#wechat_redirect"));
                }
            }
            catch (Exception ex)
            {
                Log(ex.Message);
                ViewData["errmsg"] = ex.Message;
            }

            return(View());
        }
        /**
         * snsapi_base
         * **/
        public async Task <ActionResult> OAuthSnsApiBase()
        {
            string code = Request.QueryString["code"];

            try
            {
                if (!string.IsNullOrEmpty(code))
                {
                    OAuthToken oauthToken = await WeChatHepler.GetAsync <OAuthToken>(
                        $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={SettingsManager.WeiXin.AppId}&secret={SettingsManager.WeiXin.AppSecret}&code={code}&grant_type=authorization_code");

                    string        accesstoken = string.Empty;
                    AccessTokenVM tokenVm     = await WeChatHepler.GetAccessTokenAsync(SettingsManager.WeiXin.AppId, SettingsManager.WeiXin.AppSecret);

                    if (!string.IsNullOrEmpty(tokenVm?.access_token))
                    {
                        accesstoken = tokenVm.access_token;
                    }

                    if (oauthToken != null && !string.IsNullOrEmpty(oauthToken.openid))
                    {
                        OAuthUserInfo userInfo = await WeChatHepler.GetAsync <OAuthUserInfo>(
                            $"https://api.weixin.qq.com/cgi-bin/user/info?access_token={accesstoken}&openid={oauthToken.openid}&lang=zh_CN");

                        if (userInfo != null)
                        {
                            Log("获取到用户信息nickName:" + userInfo.nickname);
                            // return View(userInfo);

                            //BatchSendMessagesVM message = new BatchSendMessagesVM { Touser = new string[] { userInfo.Openid, "oBjaPuA6nUCz6ufJFtse-3sDYB4I" }, Msgtype = "text", Text = new Message { Content = "测试消息!" } };
                            var message = new SingleSendMessagesVM {
                                ToUser = userInfo.Openid, MsgType = "text", Text = new Message {
                                    Content = "单发测试消息!"
                                }
                            };

                            string json = JsonConvert.SerializeObject(message, Newtonsoft.Json.Formatting.Indented,
                                                                      new JsonSerializerSettings {
                                ContractResolver = new LowercaseContractResolver()
                            });

                            Log("post:" + json);
                            HttpContent content = new StringContent(json);
                            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");


                            var oo = await WeChatHepler.SingleSendMessagesAsync(accesstoken, content);


                            Log("群发消息:" + oo.ErrMsg);

                            ViewData["headImage"] = userInfo.headimgurl;
                            ViewData["openid"]    = userInfo.Openid;
                            ViewData["nickName"]  = userInfo.nickname;
                            if (userInfo.sex == 0)
                            {
                                ViewData["sex"] = "未知";
                            }
                            else if (userInfo.sex == 1)
                            {
                                ViewData["sex"] = "男";
                            }
                            else
                            {
                                ViewData["sex"] = "女";
                            }
                            ViewData["province"] = userInfo.province;
                            ViewData["city"]     = userInfo.city;
                        }
                        else
                        {
                            Log("未获取到用户信息");
                        }
                    }
                    else
                    {
                        Log("access_token:" + oauthToken.access_token + ",openid:" + oauthToken.openid);
                    }
                }
                else
                {
                    return(Redirect(
                               $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={SettingsManager.WeiXin.AppId}&redirect_uri={"http://" + Request.Url.Host + Url.Action("OAuthSnsApiBase")}&response_type=code&scope=snsapi_base&state=123456#wechat_redirect"));
                }
            }
            catch (Exception ex)
            {
                Log(ex.Message);
                ViewData["errmsg"] = ex.Message;
            }

            return(View());
        }