コード例 #1
0
ファイル: CourseOrderService.cs プロジェクト: 080779/USystem
        public async Task <long> AddAsync(long buyerId, string buyerName, long courseId, string imgUrl)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                int res = await dbc.GetAll <CourseOrderEntity>().Where(c => c.CourseId == courseId && c.BuyerId == buyerId && c.OrderStateId != (int)CourseOrderStateEnum.已取消).Select(c => c.OrderStateId).SingleOrDefaultAsync();

                //订单已经存在且状态不是已取消
                if (res > 0)
                {
                    return(-1);
                }
                CourseOrderEntity entity = new CourseOrderEntity();
                entity.Code       = CommonHelper.GetRandom3();
                entity.BuyerId    = buyerId;
                entity.BuyerName  = buyerName;
                entity.CourseId   = courseId;
                entity.PayTypeId  = 1;
                entity.CourseName = await dbc.GetParameterAsync <LinkEntity>(l => l.Id == courseId, l => l.Name);

                entity.Amount = await dbc.GetDecimalParameterAsync <LinkEntity>(l => l.Id == courseId, l => l.Link001);

                entity.ImgUrl = imgUrl;
                dbc.CourseOrders.Add(entity);
                await dbc.SaveChangesAsync();

                return(entity.Id);
            }
        }
コード例 #2
0
        public JsonResult Get([FromForm] string token, [FromForm] int courseId)
        {
            DataResult dr = new DataResult();

            try
            {
                if (courseId < 10000)
                {
                    dr.code = "201";
                    dr.msg  = "参数错误";
                    return(Json(dr));
                }

                UserEntity userEntity = this.GetUserByToken(token);

                CourseOrderEntity courseOrderEntity = courseOrderBLL.GetByCourseAndUserId(courseId, userEntity.userId);

                dr.code = "200";
                dr.msg  = "成功";
                dr.data = courseOrderEntity;
            }
            catch (Exception ex)
            {
                dr.code = "999";
                dr.msg  = ex.Message;
            }
            return(Json(dr));
        }
コード例 #3
0
        public async Task <long> AddAsync(long buyerId, string buyerName, long courseId)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                int res = await dbc.GetAll <CourseOrderEntity>().Where(c => c.CourseId == courseId && c.BuyerId == buyerId && c.OrderStateId != (int)CourseOrderStateEnum.已取消 && c.PayTypeId == 2).Select(c => c.OrderStateId).SingleOrDefaultAsync();

                //订单已经存在且状态不是已取消
                if (res > 0)
                {
                    return(-1);
                }
                decimal amount = await dbc.GetAll <LinkEntity>().Where(l => l.Id == courseId).Select(l => l.link002).SingleOrDefaultAsync();

                var user = await dbc.GetAll <UserEntity>().SingleOrDefaultAsync(u => u.Id == buyerId);

                if (user.Amount < amount)
                {
                    return(-2);
                }
                user.Amount = user.Amount - amount;


                CourseOrderEntity entity = new CourseOrderEntity();
                entity.Code         = CommonHelper.GetRandom3();
                entity.BuyerId      = buyerId;
                entity.BuyerName    = buyerName;
                entity.CourseId     = courseId;
                entity.PayTypeId    = 2;
                entity.OrderStateId = 2;
                entity.CourseName   = await dbc.GetParameterAsync <LinkEntity>(l => l.Id == courseId, l => l.Name);

                entity.Amount = amount;
                entity.ImgUrl = "";
                dbc.CourseOrders.Add(entity);

                JournalEntity journal = new JournalEntity();
                journal.UserId        = user.Id;
                journal.BalanceAmount = user.Amount;
                journal.OutAmount     = amount;
                journal.Remark        = "用户(" + user.Mobile + ")用碳积分购买课程";
                journal.JournalTypeId = (int)JournalTypeEnum.购买课程;
                journal.OrderCode     = entity.Code;
                journal.GoodsId       = entity.CourseId;//来至订单ID
                journal.CurrencyType  = (int)CurrencyEnums.碳积分;
                dbc.Journals.Add(journal);
                await dbc.SaveChangesAsync();

                //积分购买课程发放奖励
                //await IntegralBuyAsync(entity.Id);

                //积分购买课程升级
                await IntegralBuyUpAsync(dbc, buyerId);

                //积分购买课程奖励
                await IntegralBuyBonusAsync(dbc, entity.Id);

                return(entity.Id);
            }
        }
コード例 #4
0
ファイル: WeChatController.cs プロジェクト: 13232989155/A6
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        private bool Notify_PaySucceed(object sender, PaySucceedEventArgs e)
        {
            if (e.GatewayType == typeof(PaySharp.Wechatpay.WechatpayGateway))
            {
                var alipayNotifyResponse = (NotifyResponse)e.NotifyResponse;

                //校验订单信息
                string payNO      = alipayNotifyResponse.TradeNo;                //微信订单号
                string orderNO    = alipayNotifyResponse.OutTradeNo;             //商户订单号
                string orderTotal = alipayNotifyResponse.TotalAmount.ToString(); //订单金额
                string payDate    = alipayNotifyResponse.TimeEnd;                //支付完成时间

                CourseOrderBLL    courseOrderBLL    = new CourseOrderBLL();
                CourseOrderEntity courseOrderEntity = courseOrderBLL.GetByOrderNO(orderNO);

                //校验订单是否存在
                if (courseOrderEntity == null)
                {
                    return(false);
                }

                if (courseOrderEntity.orderTotal * 100 == Convert.ToDecimal(orderTotal))
                {
                    //2.更新订单的相关状态
                    if (courseOrderEntity.state == 1)
                    {
                        courseOrderEntity.payNo      = payNO;
                        courseOrderEntity.payDate    = DateTime.ParseExact(payDate, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);
                        courseOrderEntity.state      = 2;
                        courseOrderEntity.modifyDate = DateTime.Now;
                        courseOrderEntity.realTotal  = Convert.ToDecimal(orderTotal) / 100;
                        courseOrderEntity.payChannel = "微信支付-APP";
                        int rows = courseOrderBLL.ActionDal.ActionDBAccess.Updateable(courseOrderEntity).ExecuteCommand();

                        //3.返回一个xml格式的结果给微信服务器
                        if (rows > 0)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            //处理成功返回true
            return(false);
        }
コード例 #5
0
ファイル: CourseOrderService.cs プロジェクト: 080779/USystem
        public CourseOrderDTO ToDTO(CourseOrderEntity entity)
        {
            CourseOrderDTO dto = new CourseOrderDTO();

            dto.Id             = entity.Id;
            dto.Amount         = entity.Amount;
            dto.AuditMobile    = entity.AuditMobile;
            dto.AuditTime      = entity.AuditTime;
            dto.BuyerId        = entity.BuyerId;
            dto.BuyerName      = entity.BuyerName;
            dto.Code           = entity.Code;
            dto.CourseId       = entity.CourseId;
            dto.CourseName     = entity.CourseName;
            dto.CreateTime     = entity.CreateTime;
            dto.DiscountAmount = entity.DiscountAmount;
            dto.ImgUrl         = entity.ImgUrl;
            dto.OrderStateName = entity.OrderStateId.GetEnumName <CourseOrderStateEnum>();
            return(dto);
        }
コード例 #6
0
        public CourseOrderDTO ToDTO(CourseOrderEntity entity, string url)
        {
            CourseOrderDTO dto = new CourseOrderDTO();

            dto.Id             = entity.Id;
            dto.Amount         = entity.Amount;
            dto.AuditMobile    = entity.AuditMobile;
            dto.AuditTime      = entity.AuditTime;
            dto.BuyerId        = entity.BuyerId;
            dto.BuyerName      = entity.BuyerName;
            dto.Code           = entity.Code;
            dto.CourseId       = entity.CourseId;
            dto.CourseName     = entity.CourseName;
            dto.CreateTime     = entity.CreateTime;
            dto.DiscountAmount = entity.DiscountAmount;
            dto.ImgUrl         = entity.ImgUrl;
            dto.Url            = string.IsNullOrEmpty(url) ? url : url.Contains("http://") ? url : "http://" + url;
            dto.OrderStateName = entity.OrderStateId.GetEnumName <CourseOrderStateEnum>();
            return(dto);
        }
コード例 #7
0
ファイル: CourseController.cs プロジェクト: 13232989155/A6
        public JsonResult GetDetailById([FromForm] string token, [FromForm] int courseId)
        {
            DataResult dr = new DataResult();

            try
            {
                UserEntity        userEntity        = this.GetUserByToken(token);
                CourseOrderBLL    courseOrderBLL    = new CourseOrderBLL();
                CourseOrderEntity courseOrderEntity = courseOrderBLL.GetByCourseAndUserId(courseId, userEntity.userId);

                if (courseOrderEntity == null)
                {
                    dr.code = "201";
                    dr.msg  = "未购买该课程";
                    return(Json(dr));
                }

                CourseBLL    courseBLL    = new CourseBLL();
                CourseEntity courseEntity = courseBLL.GetById(courseId);

                CourseSectionBLL courseSectionBLL = new CourseSectionBLL();
                courseEntity.courseSectionEntities = courseSectionBLL.ListByCourseId(courseId);

                TeacherBLL teacherBLL = new TeacherBLL();
                courseEntity.teacherEntity = teacherBLL.GetById(courseEntity.teacherId);

                courseEntity.countSold = courseOrderBLL.GetCountByCourseId(courseEntity.courseId);

                dr.code = "200";
                dr.data = courseEntity;
            }
            catch (Exception ex)
            {
                dr.code = "999";
                dr.msg  = ex.Message;
            }

            return(Json(dr));
        }
コード例 #8
0
ファイル: WxPay.cs プロジェクト: 13232989155/A6
        /// <summary>
        /// 课程支付
        /// </summary>
        /// <param name="courseOrder"></param>
        /// <returns></returns>
        public static PayResult PayCourse(CourseOrderEntity courseOrder)
        {
            PayResult payResult = new PayResult();

            try
            {
                //获取请求数据
                Dictionary <string, string> strParam = new Dictionary <string, string>();
                //小程序ID
                strParam.Add("appid", LoginHelper.AppID);
                //附加数据
                strParam.Add("attach", PayEntity.attach);
                //商品描述
                strParam.Add("body", PayEntity.body);
                //商户号
                strParam.Add("mch_id", PayEntity.MchId);
                //随机字符串
                strParam.Add("nonce_str", PayEntity.nonceStr);
                //通知地址 (异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。)
                strParam.Add("notify_url", PayEntity.notifyUrl);
                //商户订单号
                string outTradeNo = courseOrder.orderNo;
                strParam.Add("out_trade_no", outTradeNo);
                //终端IP
                strParam.Add("spbill_create_ip", PayEntity.ip);
                //标价金额
                string totalFee = Convert.ToInt32(courseOrder.orderTotal * 100).ToString();
                strParam.Add("total_fee", totalFee);
                //交易类型
                strParam.Add("trade_type", PayEntity.tradeType);
                strParam.Add("sign", PayHelper.GetSignInfo(strParam));
                //获取预支付ID
                string preInfo = sendPost(PayHelper.CreateXmlParam(strParam));
                string strCode = PayHelper.GetXmlValue(preInfo, "return_code");
                string strMsg  = PayHelper.GetXmlValue(preInfo, "return_msg");

                if (strCode == "SUCCESS")
                {
                    //再次签名
                    string nonecStr  = PayEntity.nonceStr;
                    string timeStamp = PayHelper.getTime().ToString();
                    Dictionary <string, string> singInfo = new Dictionary <string, string>();
                    singInfo.Add("appId", LoginHelper.AppID);
                    singInfo.Add("nonceStr", nonecStr);
                    singInfo.Add("package", PayEntity.packageStr);
                    singInfo.Add("signType", "MD5");
                    singInfo.Add("timeStamp", timeStamp);
                    //返回参数

                    payResult.timestamp = timeStamp;
                    payResult.noncestr  = PayEntity.nonceStr;
                    payResult.package   = PayEntity.packageStr;
                    payResult.sign      = PayHelper.GetSignInfo(singInfo);
                    payResult.partnerid = PayEntity.MchId;
                    payResult.prepayid  = PayHelper.GetXmlValue(preInfo, "prepay_id");
                    payResult.appid     = LoginHelper.AppID;
                    payResult.code      = "200";
                    return(payResult);
                }
                else
                {
                    payResult.msg  = "获取预支付ID失败";
                    payResult.code = "201";
                    return(payResult);
                }
            }
            catch (Exception ex)
            {
                payResult.msg  = ex.Message;
                payResult.code = "999";
                return(payResult);
            }
        }
コード例 #9
0
ファイル: WxPay.cs プロジェクト: 13232989155/A6
        /// <summary>
        /// 处理结果通知
        /// </summary>
        /// <param name="strXml"></param>
        /// <returns></returns>
        public static string CourseNotify(string strXml)
        {
            string strResult = string.Empty;

            //判断是否请求成功
            if (PayHelper.GetXmlValue(strXml, "return_code") == "SUCCESS")
            {
                //判断是否支付成功
                if (PayHelper.GetXmlValue(strXml, "result_code") == "SUCCESS")
                {
                    //获得签名
                    string getSign = PayHelper.GetXmlValue(strXml, "sign");

                    //进行签名
                    string sign = PayHelper.GetSignInfo(PayHelper.GetFromXml(strXml));
                    if (sign == getSign)
                    {
                        //校验订单信息
                        string payNO      = PayHelper.GetXmlValue(strXml, "transaction_id"); //微信订单号
                        string orderNO    = PayHelper.GetXmlValue(strXml, "out_trade_no");   //商户订单号
                        string orderTotal = PayHelper.GetXmlValue(strXml, "total_fee");      //订单金额
                        string payDate    = PayHelper.GetXmlValue(strXml, "time_end");       //支付完成时间

                        CourseOrderBLL    courseOrderBLL    = new CourseOrderBLL();
                        CourseOrderEntity courseOrderEntity = courseOrderBLL.GetByOrderNO(orderNO);
                        //校验订单是否存在
                        if (courseOrderEntity.orderTotal * 100 == Convert.ToDecimal(orderTotal))
                        {
                            //2.更新订单的相关状态
                            if (courseOrderEntity.state == 1)
                            {
                                courseOrderEntity.payNo      = payNO;
                                courseOrderEntity.payDate    = DateTime.ParseExact(payDate, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);
                                courseOrderEntity.state      = 2;
                                courseOrderEntity.modifyDate = DateTime.Now;
                                courseOrderEntity.realTotal  = Convert.ToDecimal(orderTotal) / 100;
                                courseOrderEntity.payChannel = "微信支付-APP";
                                int rows = courseOrderBLL.ActionDal.ActionDBAccess.Updateable(courseOrderEntity).ExecuteCommand();

                                //3.返回一个xml格式的结果给微信服务器
                                if (rows > 0)
                                {
                                    strResult = PayHelper.GetReturnXml("SUCCESS", "OK");
                                }
                                else
                                {
                                    strResult = PayHelper.GetReturnXml("FAIL", "订单状态更新失败");
                                }
                            }
                            else
                            {
                                strResult = PayHelper.GetReturnXml("SUCCESS", "OK");
                            }
                        }
                        else
                        {
                            strResult = PayHelper.GetReturnXml("FAIL", "支付结果中微信订单号数据库不存在!");
                        }
                    }
                    else
                    {
                        strResult = PayHelper.GetReturnXml("FAIL", "签名不一致!");
                    }
                }
                else
                {
                    strResult = PayHelper.GetReturnXml("FAIL", "支付通知失败!");
                }
            }
            else
            {
                strResult = PayHelper.GetReturnXml("FAIL", "支付通知失败!");
            }

            return(strResult);
        }
コード例 #10
0
        public async Task <JsonResult> Create([FromForm] string token, [FromForm] int courseId)
        {
            DataResult dr = new DataResult();

            try
            {
                if (courseId < 10000)
                {
                    dr.code = "201";
                    dr.msg  = "参数错误";
                    return(Json(dr));
                }

                UserEntity userEntity = this.GetUserByToken(token);

                CourseEntity courseEntity = courseOrderBLL.ActionDal.ActionDBAccess.Queryable <CourseEntity>().InSingle(courseId);

                if (courseEntity == null)
                {
                    dr.code = "201";
                    dr.msg  = "不存在该课程";
                    return(Json(dr));
                }

                CourseOrderEntity courseOrderEntity = new CourseOrderEntity()
                {
                    courseId   = courseEntity.courseId,
                    createDate = DateTime.Now,
                    modifyDate = DateTime.Now,
                    orderNo    = "WX" + userEntity.userId.ToString() + DateTime.Now.ToString("yyyyMMddHHmmss"),
                    orderTotal = courseEntity.price,
                    payChannel = "",
                    payDate    = Helper.ConvertHelper.DEFAULT_DATE,
                    payNo      = "",
                    realTotal  = 0,
                    state      = 1,
                    userId     = userEntity.userId
                };

                CourseOrderEntity courseOrder = await courseOrderBLL.ActionDal.ActionDBAccess.Insertable(courseOrderEntity).ExecuteReturnEntityAsync();

                if (courseOrder == null)
                {
                    dr.code = "201";
                    dr.msg  = "创建订单失败";
                    return(Json(dr));
                }

                CoursePayResult coursePayResult = new CoursePayResult();
                coursePayResult.courseOrderEntity = courseOrder;

                var request = new AppPayRequest();
                request.AddGatewayData(new AppPayModel()
                {
                    Body        = "购买课程" + courseEntity.name,
                    TotalAmount = Convert.ToInt32(courseOrder.orderTotal * 100),
                    OutTradeNo  = courseOrder.orderNo
                });

                var response = _gateway.Execute(request);
                coursePayResult.payResult = response.OrderInfo;

                dr.code = "200";
                dr.msg  = "成功";
                dr.data = coursePayResult;
            }
            catch (Exception ex)
            {
                dr.code = "999";
                dr.msg  = ex.Message;
            }
            return(Json(dr));
        }