public async Task <ActionResult> LoginUser([FromBody] Authentication auth)
        {
            TokenMessage msg = new TokenMessage();

            try
            {
                using (HttpClient client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    HttpResponseMessage res = await client.PostAsJsonAsync(new Uri("http://localhost:49939/api/Gateway/data"), auth);

                    if (res.IsSuccessStatusCode)
                    {
                        var Response = res.Content.ReadAsStringAsync().Result;
                        msg = Newtonsoft.Json.JsonConvert.DeserializeObject <TokenMessage>(Response);
                        HttpContext.Response.Cookies["access_token"].Value  = msg.AccessToken;
                        HttpContext.Response.Cookies["refresh_token"].Value = msg.RefreshToken;
                    }
                    else
                    {
                        var Response = res.Content.ReadAsStringAsync().Result;
                        var str      = Newtonsoft.Json.JsonConvert.DeserializeObject <string>(Response);
                        return(View("SorryPage", (object)str));
                    }
                }
            }
            catch
            {
                string str = "Now system is unavailable";
                return(View("SorryPage", (object)str));
            }
            return(View("Description"));
        }
예제 #2
0
        public async Task <IHttpActionResult> PostAccessToken([FromBody] AuthCodeModel codeModel)
        {
            Code code = new Code();

            try
            {
                code = await db.Codes.FirstOrDefaultAsync(x => x.AccessCode == codeModel.Code);
            }
            catch
            {
                return(Unauthorized());
            }

            if (code == null)
            {
                return(Unauthorized());
            }

            if (code.Timeofrelease <= DateTime.Now)
            {
                return(Unauthorized());
            }

            Owner owner = new Owner();

            try
            {
                owner = await db.Owners.FirstOrDefaultAsync(x => x.RedirectURI == codeModel.RedirectURI);
            }
            catch
            {
                return(Unauthorized());
            }

            Token token = new Token();

            try
            {
                token = await db.Tokens.FirstOrDefaultAsync(x => x.AccessCodeId == code.Id);
            }
            catch
            {
                return(Unauthorized());
            }
            if (token == null)
            {
                return(Unauthorized());
            }

            TokenMessage msg = new TokenMessage();

            msg.AccessToken  = token.AccessToken;
            msg.RefreshToken = token.RefreshToken;
            msg.TokenType    = "Bearer";
            return(Ok <TokenMessage>(msg));
        }
예제 #3
0
        public async Task <JsonResult> PaypalSetup(string cartId, decimal cartTotal, string carrier = null)
        {
            // this is the first part of a paypal transaction, which sends a request from P4M to Realex
            // when this returns we redirect the consumer to PP in a popup window
            var result = new TokenMessage();

            try
            {
                // validate that the cart total from the widget is correct to prevent cart tampering in the browser
                cartTotal = Math.Round(cartTotal, 2);
                var localCart = ShoppingCart.GetCart(HttpContext);
                localCart.CalcTax();
                //decimal cartTot = Convert.ToDecimal(cartTotal);
                if (cartTotal != localCart.Total)
                {
                    localCart.EmptyCart();
                    HttpContext.Session[ShoppingCart.CartSessionKey] = null;
                    throw new Exception("Your cart is invalid and has been cleared. We're sorry for any inconvenience. Please keep shopping");
                }

                var orderId = await CreateLocalOrderAsync(localCart);

                var token = Request.Cookies["p4mToken"].Value;
                _httpClient.SetBearerToken(token);
                _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                var purchaseMessage = new PostPurchaseMessage {
                    CartId = cartId, OrderId = orderId.ToString(), Carrier = carrier
                };
                var content   = new ObjectContent <PostPurchaseMessage>(purchaseMessage, new JsonMediaTypeFormatter());
                var apiResult = await _httpClient.PostAsync(_p4mConsts.BaseApiAddress + "paypalSetup", content);

                //var apiResult = await _httpClient.GetAsync(string.Format("{0}paypalSetup/{1}", _urls.BaseApiAddress, cartId));
                //apiResult.EnsureSuccessStatusCode();
                var messageString = await apiResult.Content.ReadAsStringAsync();

                var setupResult = JsonConvert.DeserializeObject <TokenMessage>(messageString);
                if (!setupResult.Success)
                {
                    if (setupResult.Error.Contains("has already been processed!"))
                    {
                        ShoppingCart.GetCart(this).EmptyCart();
                        HttpContext.Session[ShoppingCart.CartSessionKey] = null;
                    }
                    throw new Exception(setupResult.Error);
                }
                result.Token = setupResult.Token;
            }
            catch (Exception e)
            {
                result.Error = e.Message;
            }
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
예제 #4
0
        /// <summary>
        /// Send a message to specified target a registration token.
        /// </summary>
        /// <param name="isTest">If true, won't send the message to target. It'll just validate it.</param>
        /// <param name="message"></param>
        /// <returns>If successful, the response body contains an instance of T(MassageBase).</returns>
        public async Task <TokenMessage> SendMessage(bool isTest, TokenMessage message)
        {
            var result = await _fcmApi.SendHttpRequestToTokenAsync(_projectId, new SendRequestBody <TokenMessage>
            {
                ValidateOnly = isTest,
                Message      = message
            });

            message.Name = result.Name;
            return(message);
        }
        public async Task <int> Insert(string sender, string receiver, TokenMessage tokenMessage)
        {
            var p = PendingTokenMessage.Create(sender, receiver, tokenMessage);

            if (p == null)
            {
                return(-1);
            }
            var insertedRows = await _database.InsertAsync(p);

            return(insertedRows == 1 ? p.ID : -1);
        }
예제 #6
0
 public ActionResult Validate([FromBody] TokenMessage token)
 {
     try
     {
         parseToken(token.Token);
         return(Ok());
     }
     catch
     {
         return(Unauthorized());
     }
 }
예제 #7
0
        public TokenMessage addNewToken(string token_card, string customer_id)
        {
            ENDPOINT  = Constants.url_add_new_token;
            PARAMETER = body.getBodyAddNewToken(token_card, customer_id);
            string content = _request.Execute(
                ENDPOINT,
                "POST",
                _auxiliars.ConvertToBase64(_PUBLIC_KEY),
                PARAMETER);
            TokenMessage customer = JsonConvert.DeserializeObject <TokenMessage>(content);

            return(customer);
        }
예제 #8
0
 public override void OnClientSceneChanged(NetworkConnection conn)
 {
     if (SceneManager.GetActiveScene().name.StartsWith("Lobby"))
     {
         if (!string.IsNullOrEmpty(token))
         {
             //Enviamos mensaje de token
             TokenMessage msg = new TokenMessage();
             msg.Token = token;
             NetworkClient.Send <TokenMessage>(msg);
         }
     }
     base.OnClientSceneChanged(conn);
 }
예제 #9
0
 public ActionResult <TokenMessage> Renew([FromBody] TokenMessage token)
 {
     try
     {
         var username = parseToken(token.Token);
         return(Ok(new TokenMessage
         {
             Token = generateNewToken(username),
         }));
     }
     catch
     {
         return(Unauthorized());
     }
 }
예제 #10
0
        public async Task <JsonResult> GetNewShippingToken()
        {
            var result = new TokenMessage();

            try
            {
                var resp = await GetGFSTokenAsync();

                result.Token   = resp.AccessToken;
                result.Expires = DateTime.UtcNow.AddSeconds(resp.ExpiresIn).ToString("yyyy-MM-ddThh:mm:ssZ");
            }
            catch (Exception e)
            {
                result.Error = e.Message;
            }
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
예제 #11
0
        public HttpResponseMessage Post(UserDTO user)
        {
            AuthModel           auth = new AuthModel();
            HttpResponseMessage responseMessage;
            string response = auth.Authenticate(user.Username, user.Password);

            if (response != null)
            {
                string       role = auth.GetRole(user.Username);
                TokenMessage msg  = new TokenMessage(response, role);
                responseMessage = Request.CreateResponse(HttpStatusCode.OK, msg);
            }
            else
            {
                ErrorMessage msg = new ErrorMessage("Invalid username or password");
                responseMessage = Request.CreateResponse(HttpStatusCode.Forbidden, msg);
            }

            return(responseMessage);
        }
        public async Task <ActionResult> GenCodes(string code, string state)
        {
            TokenMessage  msg       = new TokenMessage();
            AuthCodeModel codeModel = new AuthCodeModel();

            codeModel.Code        = code;
            codeModel.RedirectURI = "http://localhost:53722/";
            codeModel.GrantType   = "code";
            codeModel.ClientId    = 1;

            try
            {
                using (HttpClient client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    HttpResponseMessage res = await client.PostAsJsonAsync(new Uri("http://localhost:49939/api/Gateway/code"), codeModel);

                    if (res.IsSuccessStatusCode)
                    {
                        var Response = res.Content.ReadAsStringAsync().Result;
                        msg = Newtonsoft.Json.JsonConvert.DeserializeObject <TokenMessage>(Response);
                        HttpContext.Response.Cookies["access_token"].Value  = msg.AccessToken;
                        HttpContext.Response.Cookies["refresh_token"].Value = msg.RefreshToken;
                    }
                    else
                    {
                        var Response = res.Content.ReadAsStringAsync().Result;
                        var str      = Newtonsoft.Json.JsonConvert.DeserializeObject <string>(Response);
                        return(View("SorryPage", (object)str));
                    }
                }
            }
            catch
            {
                string str = "Now system is unavailable";
                return(View("SorryPage", (object)str));
            }
            return(View("Description"));
        }
예제 #13
0
        public static PendingTokenMessage Create(string sender, string receiver, TokenMessage tokenMessage)
        {
            if (WalletAddress.Decode58Check(sender) == null)
            {
                throw new ArgumentException("invalid address", nameof(sender));
            }
            if (WalletAddress.Decode58Check(receiver) == null)
            {
                throw new ArgumentException("invalid address", nameof(receiver));
            }
            if (tokenMessage == null)
            {
                throw new ArgumentNullException(nameof(tokenMessage));
            }

            return(new PendingTokenMessage
            {
                Sender = sender,
                Receiver = receiver,
                Data = JsonConvert.SerializeObject(tokenMessage)
            });
        }
예제 #14
0
        /// <summary>
        /// Primire username si parola de la client
        /// </summary>
        /// <param name="user">obiect care contine username si parola</param>
        /// <returns>token</returns>
        public HttpResponseMessage Post(UserDTO user)
        {
            var auth = new AuthModel();
            HttpResponseMessage responseMessage;
            var response = auth.Authenticate(user.Username, user.Password);

            if (response != null)
            {
                // Username si parola valide
                var role = auth.GetRole(user.Username);
                var msg  = new TokenMessage(response, role);
                responseMessage = Request.CreateResponse(HttpStatusCode.OK, msg);
            }
            else
            {
                //invalid username and password
                var msg = new JSendMessage("fail", "Invalid username or password");
                responseMessage = Request.CreateResponse(HttpStatusCode.Forbidden, msg);
            }

            return(responseMessage);
        }
예제 #15
0
        public HttpResponseMessage Post(UserDTO user)
        {
            HttpResponseMessage responseMessage;
            string response = auth.Authenticate(user.Email, user.Password);

            //string response = "123";

            if (response != null)
            {
                // Username si parola valide
                string role = users.GetUserRole(user.Email);
                //string role = "admin";
                TokenMessage msg = new TokenMessage(response, role);
                responseMessage = Request.CreateResponse(HttpStatusCode.OK, msg);
            }
            else
            {
                //invalid username and password
                JSendMessage msg = new JSendMessage("fail", "Invalid username or password");
                responseMessage = Request.CreateResponse(HttpStatusCode.Forbidden, msg);
            }

            return(responseMessage);
        }
예제 #16
0
    private IEnumerator OnServerTokenMessageCoroutine(NetworkConnection conn, TokenMessage msg)
    {
        if (tokens.Contains(msg.Token)) // Si el token coincide con uno que nos hayan pasado
        {
            if (modoServidor == ServidorPartida)
            {
                ChangeUIMessage uimsg = new ChangeUIMessage(UI_Prepartida);
                conn.Send <ChangeUIMessage>(uimsg);

                KeyValuePair <string, NetworkConnection> dupla = new KeyValuePair <string, NetworkConnection>(msg.Token, conn);
                tokenConnection.Add(dupla);

                // Esto lo hago aquí porque es individual para cada uno
                // if (rondaAJugar == maxRondas) // Si toca el combate final
                // {
                //     int i = 0;
                //     while (!clasificacionActualizada && i < intentosConexion)
                //     {
                //         ++i;
                //         yield return new WaitForSeconds(tiempoEsperaConexion);
                //     }

                //     if (!clasificacionActualizada)
                //     {
                //         print("Agotado tiempo de espera, mensaje de clasificación no recibido");
                //     }
                //     else
                //     {
                //         int index = clasificacionOrdenada.FindIndex(p => p.Key == msg.Token);
                //         if (index >= 2) // Si no entra en la final
                //         {
                //             GameEndedMessage result = new GameEndedMessage();
                //             result.Puesto = index;
                //             conn.Send<GameEndedMessage>(result);
                //         }
                //     }
                // }

                // if(clasificacionActualizada)
                // {
                //     clasificacionOrdenada = managerClasification.GetClasificacionOrdenada();
                //     List<string> tokensOrdenados = new List<string>();
                //     List<int[]> resultados = new List<int[]>();
                //     foreach (var kvp in clasificacionOrdenada)
                //     {
                //         tokensOrdenados.Add(kvp.Key);
                //         resultados.Add(kvp.Value);
                //     }

                //     TablaClasificacionMessage result = new TablaClasificacionMessage();
                //     result.Tokens = tokensOrdenados;
                //     result.Resultados = resultados;
                //     conn.Send<TablaClasificacionMessage>(result);
                //     print("Mandamos mensaje de tablaclasificacion");
                // }

                /*
                 * ¿POR QUÉ HAGO ESTO?
                 *
                 * " O sea, me da igual que estén todos, no tengo que actualizarlos a todos a la vez.
                 * Si tengo la clasificación actualizada, puedo mandársela a cada uno cuando venga y ya está.
                 *
                 * Si me espero a todos, es "peor" porque va a haber un momento en el que tenga la clasificación toh mal. "
                 *
                 * MAL - Los primeros que lleguen no van a tener la clasificacion bien, se quedan en prepartida, necesito
                 * hacerlo de esta forma para asegurarme que les llega a todos.
                 *
                 * Curiosidad: Lo de antes funcionaba porque en el while de maxrondas==rondaajugar no habia un ++i
                 * así que esperaba para siempre en todos los clientes, por lo que siempre llegaba bien.
                 */
                serverPlayers++;
                print("OnServerTokenMessage: serverPlayers: " + serverPlayers + " --- MaxPlayers: " + maxPlayers);
                if (serverPlayers == maxPlayers) // Si estamos todos los jugadores
                {
                    int i = 0;
                    while (!clasificacionActualizada && i < intentosConexion) // Esperar a la clasificacion es mejor que esperar a los jugadores
                    {
                        ++i;
                        yield return(new WaitForSeconds(tiempoEsperaConexion));
                    }

                    if (!clasificacionActualizada)
                    {
                        print("Agotado tiempo de espera, mensaje de clasificación no recibido");
                        rondaAJugar--; // ¿Repetir la ronda?
                    }

                    clasificacionOrdenada = managerClasification.GetClasificacionOrdenada();
                    TablaClasificacionMessage clasificacionMessage = new TablaClasificacionMessage();
                    List <string>             tokensOrdenados      = new List <string>();
                    List <int[]> resultados = new List <int[]>();
                    foreach (var kvp in clasificacionOrdenada)
                    {
                        tokensOrdenados.Add(kvp.Key);
                        resultados.Add(kvp.Value);
                    }
                    clasificacionMessage.Tokens     = tokensOrdenados;
                    clasificacionMessage.Resultados = resultados;

                    if (rondaAJugar == maxRondas) // Toca la final
                    {
                        foreach (var tk in tokens)
                        {
                            int index = clasificacionOrdenada.FindIndex(p => p.Key == tk);
                            if (index >= 2) // Si no entra en la final
                            {
                                GameEndedMessage result = new GameEndedMessage();
                                result.Puesto = index;
                                NetworkConnection connection = tokenConnection.Find(p => p.Key == tk).Value;
                                connection.Send <GameEndedMessage>(result);
                            }
                            else if (index >= 0) //Entra en la final
                            {
                                NetworkConnection connection = tokenConnection.Find(p => p.Key == tk).Value;
                                connection.Send <TablaClasificacionMessage>(clasificacionMessage);
                            }
                            else
                            {
                                print("Usuario no encontrado");
                            }
                        }
                    }
                    else if (rondaAJugar > maxRondas) // Si estamos todos y ya no toca nada más, pasamos mensaje a los de la final
                    {
                        GameEndedMessage gameEndedMessage = new GameEndedMessage();
                        for (i = 0; i < maxPlayers; ++i) // maxPlayers es el maxPlayers original dividido por 2
                        {
                            gameEndedMessage.Puesto = i;
                            string            tk         = clasificacionOrdenada[i].Key;
                            NetworkConnection connection = tokenConnection.Find(p => p.Key == tk).Value;
                            connection.Send <GameEndedMessage>(gameEndedMessage);
                        }

                        partidaFinalizada = true; // Oficialmente hemos acabado la partida
                    }
                    else
                    {
                        NetworkServer.SendToAll <TablaClasificacionMessage>(clasificacionMessage);
                        print("Se envía mensaje de tabla de clasificación");
                    }
                }
            }
            else if (modoServidor == ServidorCombate)
            {
                KeyValuePair <string, NetworkConnection> dupla = new KeyValuePair <string, NetworkConnection>(msg.Token, conn);
                tokenConnection.Add(dupla);

                CombatUsersMessage cumsg = new CombatUsersMessage();
                cumsg.Users = users;
                conn.Send <CombatUsersMessage>(cumsg);
            }
        }
        else // Si no es correcto, conn.Disconnect()
        {
            print("Token no encontrado");
            conn.Disconnect();
        }
    }
예제 #17
0
    /****************************************************************************/
    /**************      FUNCIONES PARA MENSAJES EN SERVIDOR      ***************/
    /****************************************************************************/

    private void OnServerTokenMessageHandler(NetworkConnection conn, TokenMessage msg)
    {
        print("Recibido TokenMessage: (" + msg.Token + ")");
        StartCoroutine(OnServerTokenMessageCoroutine(conn, msg));
    }
        public async Task <ActionResult> DrawStatistic()
        {
            int i = 0;
            StatisticInformation Information = new StatisticInformation();

            try
            {
                using (HttpClient test = new HttpClient())
                {
                    bool flag = false;
                    while (!flag)
                    {
                        test.DefaultRequestHeaders.Clear();
                        test.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                        test.DefaultRequestHeaders.Add("Authorization", "Bearer " + HttpContext.Request.Cookies["access_token"].Value);
                        HttpResponseMessage res = await test.GetAsync("http://localhost:49939/api/gateway/GetStatistic");

                        if (res.IsSuccessStatusCode)
                        {
                            var Response = res.Content.ReadAsStringAsync().Result;
                            Information = Newtonsoft.Json.JsonConvert.DeserializeObject <StatisticInformation>(Response);
                            flag        = true;
                        }
                        else
                        {
                            var    EmpResponse = res.Content.ReadAsStringAsync().Result;
                            string str         = Newtonsoft.Json.JsonConvert.DeserializeObject <string>(EmpResponse);
                            if (str != null)
                            {
                                return(View("SorryPage", (object)str));
                            }
                            if ((res.StatusCode == System.Net.HttpStatusCode.Unauthorized) && (i == 0))
                            {
                                test.DefaultRequestHeaders.Clear();
                                test.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                                TokenMessage Message = new TokenMessage();
                                RefreshToken Refresh = new RefreshToken();
                                Refresh.Token = HttpContext.Request.Cookies["refresh_token"].Value;
                                res           = await test.PostAsJsonAsync("http://localhost:49939/api/gateway/refresh", Refresh);

                                if (res.IsSuccessStatusCode)
                                {
                                    var Response2 = res.Content.ReadAsStringAsync().Result;
                                    Message = Newtonsoft.Json.JsonConvert.DeserializeObject <TokenMessage>(Response2);
                                    HttpContext.Request.Cookies["access_token"].Value   = Message.AccessToken;
                                    HttpContext.Request.Cookies["refresh_token"].Value  = Message.RefreshToken;
                                    HttpContext.Response.Cookies["access_token"].Value  = Message.AccessToken;
                                    HttpContext.Response.Cookies["refresh_token"].Value = Message.RefreshToken;
                                    i++;
                                }
                                else
                                {
                                    return(View("SorryPage", (object)"Ошибка обновления токена. Пожалуйста повторите позже"));
                                }
                            }
                            return(View("SorryPage", (object)str));
                        }
                    }
                }
            }
            catch
            {
                string str = "Now system is unavailable";
                return(View("SorryPage", (object)str));
            }


            return(View(Information));
        }
예제 #19
0
        public async Task <IHttpActionResult> PostRefresh([FromBody] RefreshToken key)
        {
            Token token = new Token();

            try
            {
                token = await db.Tokens.FirstOrDefaultAsync(x => x.RefreshToken == key.Token);
            }
            catch
            {
                return(Unauthorized());
            }

            if (token == null)
            {
                return(Unauthorized());
            }

            if (token.TimeOfReleaseRefreshToken <= DateTime.Now)
            {
                return(Unauthorized());
            }
            token.TimeOfReleaseAccessToken  = token.TimeOfReleaseAccessToken.Value.AddYears(-1);
            token.TimeOfReleaseRefreshToken = token.TimeOfReleaseRefreshToken.Value.AddYears(-1);

            db.Entry(token).State = EntityState.Modified;
            try
            {
                await db.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                return(InternalServerError());
            }

            User TMP = new User();

            try
            {
                TMP = await db.Users.FindAsync(token.UserId);
            }
            catch
            {
                return(Unauthorized());
            }

            if (TMP == null)
            {
                return(Unauthorized());
            }

            string source1 = DateTime.Now.ToString() + "|" + TMP.UserName + "|" + TMP.UserRole;
            string source2 = DateTime.Now.ToString() + "|" + TMP.UserName + "|" + TMP.UserRole;

            string Tokenstr   = HashPassword(source1);
            string Refreshstr = HashPassword(source2);

            Token TempToken = new Token();

            TempToken.AccessToken               = Tokenstr;
            TempToken.RefreshToken              = Refreshstr;
            TempToken.TimeOfReleaseAccessToken  = DateTime.Now.AddMinutes(5);
            TempToken.TimeOfReleaseRefreshToken = DateTime.Now.AddMinutes(10);
            TempToken.UserId       = TMP.Id;
            TempToken.AccessCodeId = 2;
            db.Tokens.Add(TempToken);
            try
            {
                await db.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                return(InternalServerError());
            }

            TokenMessage msg = new TokenMessage();

            msg.AccessToken  = TempToken.AccessToken;
            msg.RefreshToken = TempToken.RefreshToken;
            msg.TokenType    = "Bearer";

            return(Ok <TokenMessage>(msg));
        }
 public async Task <int> AddAsync(string sender, string receiver, TokenMessage tokenMessage)
 {
     return(await _database.PendingTokenMessages.Insert(sender, receiver, tokenMessage));
 }
예제 #21
0
        public object LoginAndRrgister([FromBody] JObject obj)
        {
            string appid  = "wx4a873d58da246519";
            string secret = "65f3c061efbc76fe6a93a9c26c0fc9ef";

            byte[]         bs  = Encoding.ASCII.GetBytes(obj["Code"].ToString());                                                                                                                                                        //参数转化为ascii码
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + secret + "&code=" + obj["Code"].ToString() + "&grant_type=authorization_code"); //创建请求

            req.Method        = "POST";                                                                                                                                                                                                  //确定传值的方式,此处为post方式传值
            req.ContentType   = "application/x-www-form-urlencoded";
            req.ContentLength = bs.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(bs, 0, bs.Length);
            }

            using (WebResponse wr = req.GetResponse())
            {
                //在这里对接收到的页面内容进行处理(第一次 通过code查openid 和 access_token)
                //坑   这里需要把流数据解析出来再放到字符串


                string       codeVal  = new StreamReader(wr.GetResponseStream()).ReadToEnd();       //解析出来再放到字符串
                TokenMessage jsonData = JsonConvert.DeserializeObject <TokenMessage>(codeVal);      //反序列化成json
                TokenMessage tsave    = new TokenMessage();                                         //实例化一个接收两个参数的类
                tsave.openid       = jsonData.openid;                                               //赋值接收到的值
                tsave.access_token = jsonData.access_token;                                         //赋值接收到的值
                if (string.IsNullOrEmpty(tsave.openid) || string.IsNullOrEmpty(tsave.access_token)) //如果请求失败
                {
                    return(code.SystemError("微信Code第一步验证出问题了,有可能code过期,需要前端重新访问获取code的地址"));
                }
                //再次请求api
                HttpWebRequest req2 = (HttpWebRequest)HttpWebRequest.Create("https://api.weixin.qq.com/sns/userinfo?access_token=" + tsave.access_token + "&openid=" + tsave.openid + "&lang=zh_CN");

                req2.Method = "GET";
                using (WebResponse wr2 = req2.GetResponse())
                {
                    string codeVal2 = new StreamReader(wr2.GetResponseStream()).ReadToEnd(); //解析出来再放到字符串
                    if (string.IsNullOrEmpty(codeVal2))                                      //如果请求失败
                    {
                        return(code.SystemError("code第二步骤验证出问题了"));
                    }

                    //序列化成json
                    TokenMessage jsonval = JsonConvert.DeserializeObject <TokenMessage>(codeVal2);

                    var cc = jk.User_JK.Where(a => a.OpenID == jsonData.openid).FirstOrDefault();

                    if (cc == null) //如果没有注册
                    {
                        User_JK res = new User_JK();

                        res.OpenID     = jsonval.openid;
                        res.WeChatName = jsonval.nickname; //微信名字
                        res.HeadImg    = jsonval.headimgurl;
                        res.IsChou     = false;
                        jk.User_JK.Add(res);
                        jk.SaveChanges();

                        return(code.SussessV("201", "新用户注册成功", res));
                    }
                    else //如果注册了
                    {
                        return(code.Sussess("登录成功", cc));
                    }
                }
            }
        }