public NotifyPage() { if (EPayments.CheckPayment(DNTRequest.GetString("notify_id")))//验证请求是否来自支付宝,或者是伪造的 { //获取需要的信息 int orderStatus = EPayments.ConvertAlipayTradeStatus(DNTRequest.GetString("trade_status")); string orderCode = DNTRequest.GetString("out_trade_no", true); string tradeNo = DNTRequest.GetString("trade_no", true); if (string.IsNullOrEmpty(orderCode) || string.IsNullOrEmpty(tradeNo) || orderStatus <= 0) { return; } CreditOrderInfo orderInfo = CreditOrders.GetCreditOrderInfoByOrderCode(orderCode); //如果订单状态为未成功交易 if (orderInfo != null && orderInfo.OrderStatus < 2) { float[] extcredits = new float[8]; extcredits[orderInfo.Credit - 1] = orderInfo.Amount; if (UserCredits.UpdateUserExtCredits(orderInfo.Uid, extcredits, true) != 1) { orderStatus = 0; } CreditsLogs.AddCreditsLog(orderInfo.Uid, orderInfo.Uid, orderInfo.Credit, orderInfo.Credit, 0, orderInfo.Amount, Utils.GetDateTime(), 3);//添加积分兑换转账和充值记录 NoticeInfo notice = new NoticeInfo(); notice.Postdatetime = Utils.GetDateTime(); notice.Type = NoticeType.GoodsTradeNotice; notice.Poster = "系统"; notice.Posterid = 0; notice.Uid = orderInfo.Uid; notice.Note = string.Format("您购买的积分 {0} 已经成功充值,请<a href=\"usercpcreaditstransferlog.aspx\">查收</a>!(支付宝订单号:{1})", ForumUtils.ConvertCreditAndAmountToWord(orderInfo.Credit, orderInfo.Amount), tradeNo); Notices.CreateNoticeInfo(notice); CreditOrders.UpdateCreditOrderInfo(orderInfo.OrderId, tradeNo, orderStatus, Utils.GetDateTime());//修改积分订单记录状态 } //判断当前请求是支付宝GET式(直接跳转)或者是服务器POST式(需返回success使得支付宝停止继续发送通知) if (DNTRequest.IsPost()) { HttpContext.Current.Response.Write("success"); } else { HttpContext.Current.Response.Redirect("../usercpcreaditstransferlog.aspx?paysuccess=true"); } } else { HttpContext.Current.Response.Write("fail"); } }
/// <summary> /// 通过ordercode获取积分订单信息 /// </summary> /// <param name="orderCode">订单外部订单号</param> /// <returns></returns> public static CreditOrderInfo GetCreditOrderByOrderCode(string orderCode) { IDataReader reader = DatabaseProvider.GetInstance().GetCreditOrderByOrderCode(orderCode); CreditOrderInfo orderInfo = new CreditOrderInfo(); if (reader.Read()) { orderInfo = LoadCreditOrderInfo(reader); } reader.Close(); return(orderInfo); }
private static CreditOrderInfo LoadCreditOrderInfo(IDataReader reader) { CreditOrderInfo orderInfo = new CreditOrderInfo(); orderInfo.Amount = TypeConverter.ObjectToInt(reader["amount"]); orderInfo.Buyer = reader["buyer"].ToString(); orderInfo.CreatedTime = reader["createdtime"].ToString(); orderInfo.ConfirmedTime = reader["confirmedtime"].ToString(); orderInfo.Credit = TypeConverter.ObjectToInt(reader["credit"]); orderInfo.OrderCode = reader["ordercode"].ToString(); orderInfo.OrderId = TypeConverter.ObjectToInt(reader["orderid"]); orderInfo.OrderStatus = TypeConverter.ObjectToInt(reader["orderstatus"]); orderInfo.PayType = TypeConverter.ObjectToInt(reader["paytype"]); orderInfo.Price = (decimal)TypeConverter.ObjectToFloat(reader["price"]); orderInfo.TradeNo = reader["tradeno"].ToString(); orderInfo.Uid = TypeConverter.ObjectToInt(reader["uid"]); return(orderInfo); }
/// <summary> /// 创建积分订单记录 /// </summary> /// <param name="uId">用户uid</param> /// <param name="buyer">用户登录名</param> /// <param name="credit">操作积分类型(扩展积分1-8)</param> /// <param name="amount">操作积分数量</param> /// <param name="paytype">支付种类(支付宝或其他)</param> /// <param name="outTradeNo">外部订单号(支付宝要求的形如:20080104140009iwGampfQkzFgMZ0yoT)</param> /// <returns></returns> public static int CreateCreditOrder(int uId, string buyer, int credit, int amount, int paytype, string outTradeNo) { if (uId < 0 || string.IsNullOrEmpty(buyer) || credit < 1 || credit > 8 || amount < 1 || string.IsNullOrEmpty(outTradeNo)) { return(0); } CreditOrderInfo order = new CreditOrderInfo(); order.Uid = uId; order.OrderCode = outTradeNo; order.Amount = amount; order.Credit = credit; order.Buyer = buyer; order.OrderStatus = 0; order.PayType = paytype; order.Price = decimal.Round(((decimal)amount / (decimal)GeneralConfigs.GetConfig().Cashtocreditrate), 2); return(Data.CreditOrders.CreateCreditOrder(order)); }
/// <summary> /// 创建积分订单信息 /// </summary> /// <param name="creditOrderInfo"></param> /// <returns></returns> public static int CreateCreditOrder(CreditOrderInfo creditOrderInfo) { return(DatabaseProvider.GetInstance().CreateCreditOrder(creditOrderInfo)); }