Example #1
0
        public ActionResult GetPhoneNumberFromWeChat(string userID, string iv, string encryptedData)
        {
            var user = db.Users.FirstOrDefault(s => s.Id == userID);

            if (user == null)
            {
                return(Json(Comm.ToJsonResult("UserNoFound", "用户不存在")));
            }
            if (db.CardPersonals.Any(s => s.UserID == userID))
            {
                return(Json(Comm.ToJsonResult("CardPersonalHadCreate", "该用户已经个人名片已存在"), JsonRequestBehavior.AllowGet));
            }
            //把数据中的OpenID取出
            var     userOpenIDs = new Bll.Users.UserOpenID(user);
            IConfig config      = new ConfigMiniPersonal();
            var     openID      = userOpenIDs.SearchOpenID(config.AppID);

            if (openID == null)
            {
                return(Json(Comm.ToJsonResult("OpenIDIsNull", "OpenID不存在"), JsonRequestBehavior.AllowGet));
            }
            string session = null;

            try
            {
                session = Jscode2sessionResultList.GetSession(openID);
            }
            catch (Exception ex)
            {
                return(Json(Comm.ToJsonResult("GetSessionFail", ex.Message), JsonRequestBehavior.AllowGet));
            }

            string mobile = null;

            try
            {
                mobile = Jscode2sessionResultList.AESDecryptPhoneNumber(encryptedData, session, iv);
            }
            catch (Exception)
            {
                Comm.WriteLog("CreateByWeChatPhoneDecrypt", JsonConvert.SerializeObject(new { encryptedData, session, iv }), Common.Enums.DebugLogLevel.Error);
                return(Json(Comm.ToJsonResult("DecryptFail", "解密失败,SessionKey过期,需要重新调用登录接口")));
            }
            return(Json(Comm.ToJsonResult("Success", "成功", mobile), JsonRequestBehavior.AllowGet));
        }
Example #2
0
        /// <summary>
        /// 注册VIP
        /// </summary>
        /// <param name="userID">用户ID</param>
        /// <param name="iv">手机号</param>
        /// <param name="code"></param>
        /// <returns></returns>
        public ActionResult CreateByWeChatPhone(string userID, string iv, string encryptedData, string code)
        {
            var user = db.Users.FirstOrDefault(s => s.Id == userID);

            if (user == null)
            {
                return(Json(Comm.ToJsonResult("UserNoFound", "用户不存在")));
            }
            if (db.CardPersonals.Any(s => s.UserID == userID))
            {
                return(Json(Comm.ToJsonResult("CardPersonalHadCreate", "该用户已经个人名片已存在")));
            }
            //把数据中的OpenID取出
            var     userOpenIDs = new Bll.Users.UserOpenID(user);
            IConfig config      = new ConfigMiniPersonal();
            var     openID      = userOpenIDs.SearchOpenID(config.AppID);

            if (openID == null)
            {
                return(Json(Comm.ToJsonResult("OpenIDIsNull", "OpenID不存在")));
            }
            string session = null;

            try
            {
                session = Jscode2sessionResultList.GetSession(openID);
            }
            catch (Exception ex)
            {
                return(Json(Comm.ToJsonResult("GetSessionFail", ex.Message)));
            }

            string mobile = null;

            try
            {
                mobile = Jscode2sessionResultList.AESDecryptPhoneNumber(encryptedData, session, iv);
            }
            catch (Exception)
            {
                return(Json(Comm.ToJsonResult("DecryptFail", "解密失败,SessionKey过期,需要重新调用登录接口")));
            }

            if (db.Users.Any(s => s.PhoneNumber == mobile))
            {
                return(Json(Comm.ToJsonResult("MobileHadUsed", "手机号已被使用")));
            }

            //if (!Reg.IsMobile(mobile))
            //{
            //    return Json(Comm.ToJsonResult("Moblie Error", "手机号不正确"));
            //}


            Vip parentVip = null;

            if (!string.IsNullOrWhiteSpace(code))
            {
                //判断是否邀请码是否存在
                parentVip = db.Vips.FirstOrDefault(s => s.State == Common.Enums.VipState.Enable && s.Code == code);
                if (parentVip == null)
                {
                    return(Json(Comm.ToJsonResult("CodeNoFound", "邀请码不存在")));
                }
            }
            //保存用户手机号到用户表
            user.PhoneNumber = mobile;

            //把名片已知信息填到个人名片
            var card = new CardPersonal
            {
                UserID = userID,
                Avatar = user.Avatar,
                Enable = true,
                Gender = Common.Enums.Gender.NoSet,
                Name   = user.NickName,
                Mobile = mobile
            };

            db.CardPersonals.Add(card);
            db.SaveChanges();
            try
            {
                card.WeChatMiniQrCode = GetWeChatQrCode(card.ID);
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                Comm.WriteLog(this.GetType().ToString(), ex.Message, Common.Enums.DebugLogLevel.Error);
            }
            var result = new Bll.VipBLL().CreateVipRelation(userID, code);

            if (result.retCode == Comm.ReqResultCode.failed)
            {
                //回滚
                db.CardPersonals.Remove(card);
                db.SaveChanges();
                return(Json(Comm.ToJsonResult("Error", result.retMsg)));
            }
            return(Json(Comm.ToJsonResult("Success", "成功", new { PCardID = card.ID })));
        }
Example #3
0
        /// <summary>
        /// 创建升级支付订单
        /// </summary>
        /// <param name="code"></param>
        /// <param name="userID"></param>
        /// <returns></returns>
        public object CreateUpGradeOrder(string code, string userID)
        {
            //1.调用小程序登录API,获取openID
            IConfig              config       = new ConfigMiniPersonal();
            WeChatMinApi         miniApi      = new WeChatMinApi(config);
            Jscode2sessionResult openIDResule = miniApi.Jscode2session(code);

            if (openIDResule == null || string.IsNullOrWhiteSpace(openIDResule.OpenID))
            {
                return(new { retCode = "Error", retMsg = "无法获取openID,请确认code是否正确", objectData = "" });
            }
            //using (ApplicationDbContext db = new ApplicationDbContext())
            //{
            //    //防止用户重复提交订单,把Vip状态设为升级中
            //    var vip = db.Vips.FirstOrDefault(s => s.UserID == userID);
            //    vip.State = Common.Enums.VipState.Uploading;
            //    db.SaveChanges();
            //}
            string  OrderCode = CreateOrderCode(userID); //创建订单号
            decimal Amount    = Comm.UpGradeAmount();    //升级费用

            if (string.IsNullOrEmpty(OrderCode))
            {
                return(new { retCode = "Error", retMsg = "订单号生成失败", objectData = "" });
            }
            //2.调用支付统一下单API
            #region 调用支付统一下单API
            UnifiedPayData payData = new UnifiedPayData()
            {
                attach       = string.Empty,
                body         = "个人升级成为VIP,提交支付费用",
                goods_tag    = string.Empty,
                openid       = openIDResule.OpenID,
                out_trade_no = OrderCode,
                total_fee    = (int)Amount * 100,
                //total_fee = 1,//测试10分订单
                trade_type = "JSAPI"
            };

            RequestResult payResult     = payment.GetUnifiedOrderResult(payData);
            WxPayData     payreturnData = payResult.objectData;
            if (payResult.retCode != ReqResultCode.success || payreturnData == null)
            {
                return(new { retCode = "Error", retMsg = "请求微信支付统一下单失败", objectData = "" });
            }
            #endregion

            //3.生成商户订单
            #region 生成商户订单
            int rows = 0;
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                //2.生成商户订单
                Order order = new Order()
                {
                    Amount           = 0,
                    Code             = OrderCode,
                    ReceivableAmount = Amount,
                    State            = Common.Enums.OrderState.UnHandle,
                    Channel          = Common.Enums.PayChannel.WxPay,
                    Type             = Common.Enums.OrderType.Receivable,
                    UserID           = userID,
                    CreateDateTime   = DateTime.Now,
                    PayCode          = string.Empty,
                    PayInput         = JsonConvert.SerializeObject(payData)
                };
                db.Orders.Add(order);
                rows = db.SaveChanges();
            }
            if (rows <= 0)
            {
                return(new { retCode = "Error", retMsg = "保存订单数据失败", objectData = "" });
            }
            #endregion
            //4.返回支付参数:5个参数,生成签名再返回
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
            long            ts        = (long)(DateTime.Now - startTime).TotalSeconds;                         // 相差秒数

            System.Text.StringBuilder paySignpar = new System.Text.StringBuilder();
            paySignpar.Append($"appId={payreturnData.GetValue("appid")?.ToString()}");
            paySignpar.Append($"&nonceStr={payreturnData.GetValue("nonce_str")?.ToString()}");
            paySignpar.Append($"&package=prepay_id={payreturnData.GetValue("prepay_id")?.ToString()}");
            paySignpar.Append($"&signType=MD5");
            paySignpar.Append($"&timeStamp={ts.ToString()}");
            paySignpar.Append($"&key={ConfigurationManager.AppSettings["wxPayKey"] ?? string.Empty}");
            string strPaySignpar = paySignpar.ToString();

            var     sign     = GetMd5Hash(strPaySignpar).ToUpper();
            dynamic retModel = new
            {
                timeStamp = ts.ToString(),
                nonceStr  = payreturnData.GetValue("nonce_str")?.ToString(),
                package   = "prepay_id=" + payreturnData.GetValue("prepay_id")?.ToString(),
                signType  = "MD5",
                paySign   = sign,
                total_fee = payData.total_fee / 100m,
            };
            return(new { retCode = "Success", retMsg = "成功", objectData = retModel });
        }
Example #4
0
        private ApplicationUser CreateByWeChat(Common.WeChat.UserInfoResult model)
        {
            string  username, nickname, avart, unionId = model.UnionID;
            var     user   = db.Users.FirstOrDefault(s => s.WeChatID == unionId);
            IConfig config = null;

            switch (model.Type)
            {
            case WeChatAccount.AiCardMini:
                config = new ConfigMini();
                break;

            case WeChatAccount.AiCardPersonalMini:
                config = new ConfigMiniPersonal();
                break;

            default:
            case WeChatAccount.PC:
                config = new ConfigWeChatWork();
                break;
            }
            if (user != null)
            {
                string appID = config.AppID;
                var    op1   = new Bll.Users.UserOpenID(user);
                op1.AddOpenID(appID, model.OpenID);
                db.SaveChanges();
                return(user);
            }
            nickname = model.NickName;

            avart = model.HeadImgUrl;
            if (!string.IsNullOrWhiteSpace(avart))
            {
                try
                {
                    avart = this.Download(avart);
                }
                catch (Exception)
                {
                    avart = "~/Content/Images/404/avatar.png";
                }
            }
            unionId = model.UnionID;

            #region 把图片传到七牛
            var path = Server.MapPath(avart);
            avart = new Common.Qiniu.QinQiuApi().UploadFile(path, true);
            #endregion


            do
            {
                username = $"wc{DateTime.Now:yyyyMMddHHmmss}{Comm.Random.Next(1000, 9999)}";
            } while (db.Users.Any(s => s.UserName == username));
            if (string.IsNullOrWhiteSpace(nickname))
            {
                nickname = username;
            }
            user = new ApplicationUser
            {
                WeChatID          = unionId,
                UserName          = username,
                NickName          = nickname,
                Avatar            = avart,
                RegisterDateTime  = DateTime.Now,
                LastLoginDateTime = DateTime.Now,
                UserType          = UserType.Personal
            };
            var option = new Bll.Users.UserOpenID(user);
            option.AddOpenID(config.AppID, model.OpenID);
            var r = UserManager.Create(user);
            user = db.Users.FirstOrDefault(s => s.WeChatID == unionId);

            db.SaveChanges();
            if (!r.Succeeded)
            {
                throw new Exception(r.Errors.FirstOrDefault());
            }

            return(user);
        }