Example #1
0
        public APIResult Add([FromBody] AddArgsModel args)
        {
            try
            {
                if (string.IsNullOrEmpty(args.Question))
                {
                    throw new ArgumentNullException("Question");
                }
                var isExit = wechatCoreDb.QueryRobotMessage()
                             .Where(m => m.Question == args.Question)
                             .Where(m => !m.IsDel)
                             .Count() > 0;
                if (isExit)
                {
                    throw new Exception("问题已经存在");
                }

                var model = new RobotMessage()
                {
                    Question     = args.Question,
                    QuestionType = args.QuestionType,
                    Answer       = args.Answer,
                    Status       = RobotMessageStatus.正常
                };
                wechatCoreDb.AddToRobotMessage(model);
                wechatCoreDb.SaveChanges();
                return(Success());
            }
            catch (Exception ex)
            {
                return(Error(ex.Message));
            }
        }
Example #2
0
        public ActionResult BindQRCodeSence()
        {
            var memberId = GetMemberId();
            var member   = wechatCoreDb.QueryMemberWechat()
                           .Where(m => !m.IsDel)
                           .Where(m => m.MemberId == memberId)
                           .FirstOrDefault();

            if (member != null)
            {
                throw new Exception("已经绑定微信");
            }
            var code = Common.CommonUtil.CreateNoncestr(15);

            WechatQRScene model = new WechatQRScene()
            {
                Category     = "BindMember",
                Status       = WechatQRSceneStatus.未处理,
                QrCodeTicket = ""
            };

            wechatCoreDb.AddToWechatQRScene(model);
            wechatCoreDb.SaveChanges();


            var b = model.Id / 4294967295;

            model.SceneId = (int)(model.Id - 4294967295 * b);

            var accessToken = GetAccessToken();
            var qrResult    = QrCodeApi.Create(accessToken, 60 * 5, model.SceneId, QrCode_ActionName.QR_SCENE);

            model.QrCodeTicket = qrResult.ticket;
            wechatCoreDb.AddToMemberWeChatBindTask(new MemberWeChatBindTask()
            {
                AddIp    = GetIp(),
                AddTime  = DateTime.Now,
                Code     = model.SceneId.ToString(),
                MemberId = GetMemberId(),
                OpenId   = "",
                Status   = MemberWeChatBindTaskStatus.未使用
            });
            wechatCoreDb.SaveChanges();

            using (var stream = new MemoryStream())
            {
                QrCodeApi.ShowQrCode(model.QrCodeTicket, stream);
                byte[] data = stream.ToArray();

                return(File(data, "image/jpeg"));
            }
        }
Example #3
0
        public void TestMethod1()
        {
            var wechatCoreDb = new WechatCoreDbContext(new Microsoft.EntityFrameworkCore.DbContextOptions <WechatCoreDbContext>());
            var memberDb     = new MemberDbContext(new Microsoft.EntityFrameworkCore.DbContextOptions <MemberDbContext>());
            var argsModel    = new BindCustomerPhoneByWxopenPhoneArgsModel()
            {
                EncryptedData = "Bbu3OZPldIdKPezC8druWzqZlIA5lhyDEFPpMR20vieOHUxIO+…xhv+IZaw1krTTqyXvikTO91cKGtfIPOBN0VbxIj2JshpsDQ==", Iv = "EPonbgT9+okCcL025u8boQ=="
            };
            var jwtFlag = "jwt";// User.Identity.Name;

            if (string.IsNullOrEmpty(argsModel.EncryptedData))
            {
                throw new ArgumentNullException("encryptedData");
            }
            var jwt = wechatCoreDb.GetSingleMemberLogin(jwtFlag);

            if (jwt == null)
            {
                throw new Exception("未找到登陆纪录");
            }
            var session_key = jwt.GetloginSettingValue <string>("sessionKey");
            var openId      = jwt.GetloginSettingValue <string>("openId");

            var json = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.DecodeEncryptedData(session_key, argsModel.EncryptedData, argsModel.Iv);
            // _logger.LogInformation(json);

            var args = Newtonsoft.Json.JsonConvert.DeserializeObject <Senparc.Weixin.WxOpen.Entities.DecodedPhoneNumber>(json);

            var customerPhone = wechatCoreDb.Query <CustomerPhone>()
                                .Where(m => !m.IsDel)
                                .Where(m => m.Status == CustomerPhoneStatus.已绑定 && m.OpenId == openId)
                                .FirstOrDefault();

            if (customerPhone == null)
            {
                customerPhone = new CustomerPhone()
                {
                    OpenId = openId,
                    Phone  = args.phoneNumber,
                    Status = CustomerPhoneStatus.已绑定
                };
                wechatCoreDb.Add <CustomerPhone>(customerPhone);
                wechatCoreDb.SaveChanges();
            }

            //var email = $"{customerPhone.Phone}@phone";
            //var member = memberDb.Query<Member>()
            //    .Where(m => !m.IsDel)
            //    .Where(m => m.Email == email)
            //    .FirstOrDefault();

            //if (member == null)
            //{
            //    member = new Member()
            //    {
            //        Email = email,
            //        Password = CommonUtil.CreateNoncestr(8),
            //        Status = MemberStatus.正常,
            //        Truename = customerPhone.Phone,
            //        LastLoginTime = DateTime.Now,
            //        RegTime = DateTime.Now
            //    };

            //    memberDb.AddToMember(member);
            //    memberDb.SaveChanges();
            //}

            //改为使用MemberPhone
            var memberId = memberDb.GetMemberIdByMemberPhone(customerPhone.Phone);

            if (memberId <= 0)//说明没有手机绑定的会员,则新建一个
            {
                var member = new Member()
                {
                    Email         = $"{customerPhone.Phone}@phone",
                    Password      = CommonUtil.CreateNoncestr(8),
                    Status        = MemberStatus.正常,
                    Truename      = customerPhone.Phone,
                    LastLoginTime = DateTime.Now,
                    RegTime       = DateTime.Now
                };
                memberDb.AddToMember(member);
                var memberPhone = new MemberPhone()
                {
                    Member = member,
                    Phone  = customerPhone.Phone,
                    State  = MemberPhoneState.已绑定
                };
                memberDb.Add <MemberPhone>(memberPhone);
                memberDb.SaveChanges();

                memberId = member.Id;
            }

            jwt.MemberId = memberId;
            wechatCoreDb.SaveChanges();
        }
Example #4
0
        public APIResult <string> GetLoginQRCodeUrl([FromBody] GetLoginQRCodeUrlArgsModel args)
        {
            if (string.IsNullOrEmpty(args.ClientId))
            {
                throw new ArgumentNullException("clientId");
            }
            WechatQRScene model = new WechatQRScene()
            {
                Category     = "Login",
                Status       = WechatQRSceneStatus.未处理,
                QrCodeTicket = ""
            };

            wechatCoreDb.AddToWechatQRScene(model);
            wechatCoreDb.SaveChanges();


            var b = model.Id / 4294967295;

            model.SceneId = (int)(model.Id - 4294967295 * b);

            var accessToken = GetAccessToken();
            var qrResult    = QrCodeApi.Create(accessToken, 60 * 5, model.SceneId, QrCode_ActionName.QR_SCENE);

            model.QrCodeTicket = qrResult.ticket;
            wechatCoreDb.AddToMemberWeChatLoginTask(new MemberWeChatLoginTask()
            {
                AddIp    = GetIp(),
                AddTime  = DateTime.Now,
                Code     = model.SceneId.ToString(),
                OpenId   = "",
                ClientId = args.ClientId,
                Status   = MemberWeChatLoginTaskStatus.扫二维码进行中
            });
            wechatCoreDb.SaveChanges();

            var url = QrCodeApi.GetShowQrCodeUrl(model.QrCodeTicket);

            return(Success <string>(url));
        }
Example #5
0
        public ActionResult Login(string code, string state)
        {
            try
            {
                if (string.IsNullOrEmpty(code))
                {
                    throw new ArgumentNullException("code");
                }
                if (string.IsNullOrEmpty(state) || state != wechatOptions.State)
                {
                    throw new Exception("验证失败!请从正规途径进入!");
                }

                var openId = "string";
                openId = getOpenId(code);
                //判定是否已经绑定手机号
                int?memberId      = null;
                var customerPhone = wechatCoreDb.Query <CustomerPhone>()
                                    .Where(m => !m.IsDel)
                                    .Where(m => m.Status == CustomerPhoneStatus.已绑定 && m.OpenId == openId)
                                    .FirstOrDefault();

                if (customerPhone != null)
                {
                    var email = $"{customerPhone.Phone}@phone";
                    memberId = base.memberDb.Query <Member>()
                               .Where(m => !m.IsDel)
                               .Where(m => m.Email == email)
                               .Select(m => m.Id)
                               .FirstOrDefault();
                    if (memberId <= 0)
                    {
                        throw new Exception("有错误发生,没有找到Member,请重新绑定手机号");
                    }
                }


                var jwt = new MemberLogin()
                {
                    Flag      = CommonUtil.CreateNoncestr(18),
                    LoginType = "Wechat",
                    MemberId  = memberId
                };
                jwt.SetloginSettingValue("openId", openId);
                wechatCoreDb.Add <MemberLogin>(jwt);

                var expiration = TimeSpan.FromMinutes(30 * 2 * 2);
                var encodedJwt = MemberLogin.CreateJwtToken(jwt, expiration);
                wechatCoreDb.SaveChanges();

                var response = new
                {
                    access_token = encodedJwt,
                    expires_in   = (int)expiration.TotalSeconds,
                    isBindPhone  = jwt.MemberId.HasValue,
                    phone        = customerPhone != null ? customerPhone.Phone : ""
                };

                return(Json(response));
            }
            catch (Exception ex)
            {
                return(Json(new { error = ex.Message }));
            }
        }