using System; using System.Collections.Generic; using System.Linq; using System.Web; using WeiSha.Common; using Song.ServiceInterfaces; using Song.Extend; namespace Song.Site.Ajax { /// /// BuySubmit 的摘要说明 /// public class CourseBuySubmit : IHttpHandler { protected HttpContext Context { get; private set; } //验证码 private string veriCode = WeiSha.Common.Request.Form["veriCode"].MD5; //价格项的id,课程id private int cpid = WeiSha.Common.Request.Form["cpid"].Int32 ?? 0; private int couid = WeiSha.Common.Request.Form["couid"].Int32 ?? 0; //返回的url地址 private string return_url = WeiSha.Common.Request.Form["return_url"].String; //是否免费购买 private bool isFree = (WeiSha.Common.Request.Form["isfree"].Int16 ?? 0) == 0 ? true : false; //是否试用课程 private bool isTry = (WeiSha.Common.Request.Form["istry"].Int16 ?? 0) == 0 ? false : true; public void ProcessRequest(HttpContext context) { this.Context = context; Context.Response.ContentType = "text/plain"; //如果未登录 if (!Extend.LoginState.Accounts.IsLogin) { Context.Response.Write(getBackJson(1, null, null)); return; } //当前学员 Song.Entities.Accounts st = Extend.LoginState.Accounts.CurrentUser; //当前课程 Song.Entities.Course course = Business.Do().CourseSingle(couid); if (course == null) { Context.Response.Write(getBackJson(4, null, null)); return; } //生成学员与课程的关联 Song.Entities.Student_Course sc = new Entities.Student_Course(); //是否试用 if (isTry) Try(course, st); //如果免费购买 if (!isTry && isFree) FreeBuy(course, st); //如果不是免费课程,花钱买课程 if (!isTry && !isFree) Buy(course, st); } /// /// 试用课程 /// private void Try(Song.Entities.Course course, Song.Entities.Accounts st) { //如果不可以试用 if (!course.Cou_IsFree && !course.Cou_IsTry) { //当课程不可以试用,直接退出 Context.Response.Write(getBackJson(7, null, null)); return; } else { try { Song.Entities.Student_Course sc = Business.Do().Tryout(st.Ac_ID, couid); Extend.LoginState.Accounts.Course(course); Context.Response.Write(getBackJson(0, sc, null)); return; } catch(Exception ex) { Context.Response.Write(getBackJson(6, null, ex)); return; } } } /// /// 免费购买 /// /// /// private void FreeBuy(Song.Entities.Course course, Song.Entities.Accounts st) { //如果不是免费课程 if (!course.Cou_IsFree) { //当课程不是免费的,直接退出 Context.Response.Write(getBackJson(7, null, null)); return; } else { try { //生成学员与课程的关联 Song.Entities.Student_Course sc = Business.Do().FreeStudy(st.Ac_ID, couid); Extend.LoginState.Accounts.Course(course); Context.Response.Write(getBackJson(0, sc, null)); return; } catch(Exception ex) { Context.Response.Write(getBackJson(6, null, ex)); return; } } } /// /// 购买 /// /// /// private void Buy(Song.Entities.Course course, Song.Entities.Accounts st) { ////取图片验证码 //string imgCode = WeiSha.Common.Request.Cookies["buycode"].ParaValue; ////验证码不正确 //if (veriCode != imgCode) //{ // Context.Response.Write(getBackJson(2, null, null)); // return; //} //价格项 Song.Entities.CoursePrice price = Business.Do().PriceSingle(cpid); if (price == null) { Context.Response.Write(getBackJson(3, null,null)); return; } //余额是否充足 decimal money = st.Ac_Money; //资金余额 int coupon = st.Ac_Coupon; //卡券余额 int mprice = price.CP_Price; //价格,所需现金 int cprice = price.CP_Coupon; //价格,可以用来抵扣的卡券 bool tm = money >= mprice || money >= (mprice - (coupon > cprice ? cprice : coupon)); if (!tm) { Context.Response.Write(getBackJson(5, null, null)); return; } //WeiSha.Common.Log.Write //开始实现购买 try { Song.Entities.Student_Course sc = Business.Do().Buy(st.Ac_ID, couid, price); Extend.LoginState.Accounts.Course(course); Context.Response.Write(getBackJson(0, sc, null)); return; } catch (Exception ex) { Context.Response.Write(getBackJson(6, null, ex)); return; } } /// /// 返回状态结果 /// /// /// /// 如果报错,记录错误信息 /// private string getBackJson(int status, Song.Entities.Student_Course sc, Exception ex) { string json = "{"; json += "'status':'" + status + "',"; json += "'couid':'" + couid + "',"; //当前学员的剩余钱数 Song.Entities.Accounts st = Extend.LoginState.Accounts.CurrentUser; json += "'money':'" + (st != null ? st.Ac_Money : -1) + "',"; //返回不为空 if (sc != null) { json += "'startTime':'" + WeiSha.Common.Server.getTime(sc.Stc_StartTime) + "',"; json += "'endTime':'" + WeiSha.Common.Server.getTime(sc.Stc_EndTime) + "',"; } if (ex != null) { //写入错误日志,并返回所在路径 string path = WeiSha.Common.Log.Error("Course", ex); json += "'logfile':'" + path + "',"; json += "'errinfo':'" + ex.Message + "',"; } json += "'return_url':'" + return_url + "'"; return json + "}"; } public bool IsReusable { get { return false; } } } }