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); } }
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)); }
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); } }
/// <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); }
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); }
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); }
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)); }
/// <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); } }
/// <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); }
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)); }