public ChargeResult ImportResourceProducts(int resourceId, int operate_user) { ChargeResult result = new ChargeResult() { Status = ChargeStatus.SUCCEED }; ICharge chargeMgr = null; chargebitEntities db = new chargebitEntities(); try { KMBit.DAL.Resource resource = (from ri in db.Resource where ri.Id == resourceId select ri).FirstOrDefault <Resource>(); if (resource == null) { throw new KMBitException(string.Format("编号为{0}的资源不存在", resourceId)); } if (!resource.Enabled) { throw new KMBitException(string.Format("编号为{0}的资源没有启用,请先启用在进行资源产品导入", resourceId)); } KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == resourceId select ri).FirstOrDefault <Resrouce_interface>(); if (rInterface == null) { throw new KMBitException(string.Format("编号为{0}的资源没有配置资源接口,请先配置资源接口,并配置产品导入接口URL,然后进行资源产品导入", resourceId)); } object o = null; Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); Type type = assembly.GetType(rInterface.Interface_classname); o = Activator.CreateInstance(type); if (o != null) { chargeMgr = (ICharge)o; chargeMgr.ImportProducts(resourceId, operate_user); } } catch (Exception ex) { result.Status = ChargeStatus.FAILED; result.Message = ex.Message; }finally { if (db != null) { db.Dispose(); } } return(result); }
public ChargeResult Charge(ChargeOrder order) { Logger.Info("Charging..."); ChargeResult result = new ChargeResult() { Status = ChargeStatus.FAILED }; chargebitEntities db = null; ProceedOrder(order, out result); if (result.Status == ChargeStatus.FAILED) { return(result); } List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); bool succeed = false; try { db = new chargebitEntities(); Charge_Order corder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); corder.Process_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); Resource_taocan taocan = (from t in db.Resource_taocan where t.Id == order.ResourceTaocanId select t).FirstOrDefault <Resource_taocan>(); ServerUri = new Uri(rInterface.APIURL); StringBuilder body = new StringBuilder(); body.Append("{"); body.Append("usernumber:\"" + rInterface.Username + "\""); body.Append(",gavingnumber:\"" + order.MobileNumber + "\""); body.Append(",packagetype:\"1\""); body.Append(",packagecode:\"" + taocan.Serial + "\""); body.Append(",validtype:\"0\""); body.Append("}"); string appx = order.Id.ToString(); string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string method = "ai.cuc.ll.method.gav"; string appkey = rInterface.AppKey; // "ai.cuc.ll.appkey.test"; string appSecret = rInterface.AppSecret; // "8888"; parmeters.Add(new WebRequestParameters("apptx", appx, false)); parmeters.Add(new WebRequestParameters("timestamp", timestamp, false)); parmeters.Add(new WebRequestParameters("method", method, false)); parmeters.Add(new WebRequestParameters("appkey", appkey, false)); parmeters.Add(new WebRequestParameters("msg", body.ToString(), false)); SortedDictionary <string, string> paras = new SortedDictionary <string, string>(); foreach (WebRequestParameters p in parmeters) { paras.Add(p.Name, p.Value); } string urlStr = string.Empty; foreach (KeyValuePair <string, string> p in paras) { if (urlStr == string.Empty) { urlStr = p.Key + "=" + p.Value; } else { urlStr += "&" + p.Key + "=" + p.Value; } } urlStr += "&" + UrlSignUtil.GetMD5(appSecret); string sign = UrlSignUtil.GetMD5(urlStr); parmeters.Add(new WebRequestParameters("sign", sign, false)); parmeters.Add(new WebRequestParameters("signMethod", "MD5", false)); SendRequest(parmeters, false, out succeed, RequestType.POST); //parse Response if (!string.IsNullOrEmpty(Response)) { result.Message = ChargeConstant.SUCCEED_CHARGE; result.Status = ChargeStatus.SUCCEED; try { Newtonsoft.Json.Linq.JObject jsonResult = Newtonsoft.Json.Linq.JObject.Parse(Response); string code = jsonResult["code"].ToString(); string message = jsonResult["detail"].ToString(); switch (code) { case "0000": result.Status = ChargeStatus.SUCCEED; break; case "9999": result.Status = ChargeStatus.FAILED; result.Message = message; break; default: result.Message = "未知错误"; result.Status = ChargeStatus.FAILED; break; } } catch (Exception ex) { result.Message = ex.Message; result.Status = ChargeStatus.FAILED; } } else { result.Message = "未知错误"; result.Status = ChargeStatus.FAILED; } if (result.Message != null && result.Message.Length > 5000) { result.Message = result.Message.Substring(0, 5000); } ChangeOrderStatus(order, result); } catch (Exception ex) { Logger.Fatal(ex); } finally { if (db != null) { db.Dispose(); } } Logger.Info("Charging done!"); return(result); }
public ChargeResult Charge(ChargeOrder order) { ChargeResult result = new ChargeResult() { Status = ChargeStatus.FAILED }; chargebitEntities db = null; ProceedOrder(order, out result); if (result.Status == ChargeStatus.FAILED) { return(result); } List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); bool succeed = false; try { db = new chargebitEntities(); Charge_Order corder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); corder.Process_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); Resource_taocan taocan = (from t in db.Resource_taocan where t.Id == order.ResourceTaocanId select t).FirstOrDefault <Resource_taocan>(); ServerUri = new Uri(rInterface.APIURL); parmeters.Add(new WebRequestParameters("V", version, false)); parmeters.Add(new WebRequestParameters("Action", "charge", false)); parmeters.Add(new WebRequestParameters("Range", taocan.Area_id > 0 ? "1" : "0", false)); SortedDictionary <string, string> paras = new SortedDictionary <string, string>(); paras["Account"] = rInterface.Username; paras["Mobile"] = order.MobileNumber; paras["Package"] = taocan.Quantity.ToString(); string signStr = ""; foreach (KeyValuePair <string, string> p in paras) { if (signStr == string.Empty) { signStr += p.Key.ToLower() + "=" + p.Value; } else { signStr += "&" + p.Key.ToLower() + "=" + p.Value; } } signStr += "&key=" + KMAes.DecryptStringAES(rInterface.Userpassword); paras["Sign"] = UrlSignUtil.GetMD5(signStr); foreach (KeyValuePair <string, string> p in paras) { parmeters.Add(new WebRequestParameters(p.Key, p.Value, false)); } SendRequest(parmeters, false, out succeed); if (!string.IsNullOrEmpty(Response)) { JObject jsonResult = JObject.Parse(Response); order.OutOrderId = jsonResult["TaskID"] != null ? jsonResult["TaskID"].ToString() : ""; string code = jsonResult["Code"] != null ? jsonResult["Code"].ToString() : ""; string message = jsonResult["Message"] != null ? jsonResult["Message"].ToString() : ""; result.Message = message; switch (code) { case "0": result.Message = ChargeConstant.CHARGING; result.Status = ChargeStatus.ONPROGRESS; break; case "001": result.Status = ChargeStatus.FAILED; break; case "002": result.Status = ChargeStatus.FAILED; break; case "003": result.Status = ChargeStatus.FAILED; break; case "004": result.Status = ChargeStatus.FAILED; result.Message = ChargeConstant.RESOURCE_NOT_ENOUGH_MONEY; break; case "005": result.Status = ChargeStatus.FAILED; break; case "006": result.Status = ChargeStatus.FAILED; break; case "007": result.Status = ChargeStatus.FAILED; break; case "008": result.Status = ChargeStatus.FAILED; break; case "009": result.Status = ChargeStatus.FAILED; break; case "100": result.Status = ChargeStatus.FAILED; break; case "999": result.Status = ChargeStatus.FAILED; break; default: result.Status = ChargeStatus.FAILED; break; } ChangeOrderStatus(order, result); } } catch (Exception ex) { Logger.Fatal(ex); }finally { if (db != null) { db.Dispose(); } } return(result); }
public void ImportProducts(int resourceId, int operate_user) { chargebitEntities db = null; try { bool succeed = false; List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); parmeters.Add(new WebRequestParameters("V", version, false)); parmeters.Add(new WebRequestParameters("Action", "getPackage", false)); db = new chargebitEntities(); db.Configuration.AutoDetectChangesEnabled = false; KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == resourceId select ri).FirstOrDefault <Resrouce_interface>(); ServerUri = new Uri(rInterface.ProductApiUrl); SortedDictionary <string, string> paras = new SortedDictionary <string, string>(); paras["Account"] = rInterface.Username; paras["Type"] = "0"; string signStr = ""; foreach (KeyValuePair <string, string> p in paras) { if (signStr == string.Empty) { signStr += p.Key.ToLower() + "=" + p.Value; } else { signStr += "&" + p.Key.ToLower() + "=" + p.Value; } } signStr += "&key=" + KMAes.DecryptStringAES(rInterface.Userpassword); paras["Sign"] = UrlSignUtil.GetMD5(signStr); foreach (KeyValuePair <string, string> p in paras) { parmeters.Add(new WebRequestParameters(p.Key, p.Value, false)); } SendRequest(parmeters, false, out succeed); if (succeed) { if (!string.IsNullOrEmpty(Response)) { JObject json = JObject.Parse(Response); string code = json["Code"] != null? json["Code"].ToString():""; string message = json["Message"] != null ? json["Message"].ToString() : ""; if (!string.IsNullOrEmpty(code) && code == "0" && !string.IsNullOrEmpty(message) && message == "OK") { JArray packages = (JArray)json["Packages"]; if (packages != null) { for (int i = 0; i < packages.Count; i++) { JObject package = (JObject)packages[i]; if (package != null) { Resource_taocan taocan = null; int sp = 0; int spId = 0; int.TryParse(package["Type"].ToString(), out sp); int quantity = 0; int.TryParse(package["Package"].ToString(), out quantity); float price = 0; float.TryParse(package["Price"].ToString(), out price); if (sp == 2) { spId = 3; } else if (sp == 1) { spId = 1; } else if (sp == 3) { spId = 2; } taocan = (from t in db.Resource_taocan where t.Resource_id == rInterface.Resource_id && t.Quantity == quantity && t.Sp_id == spId select t).FirstOrDefault <Resource_taocan>(); if (taocan != null) { taocan.Purchase_price = price; taocan.UpdatedBy = operate_user; taocan.Updated_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); db.SaveChanges(); } else { taocan = new Resource_taocan() { Area_id = 0, CreatedBy = operate_user, Created_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now), Enabled = false, EnableDiscount = true, Purchase_price = price, Quantity = quantity, Resource_id = rInterface.Resource_id, Sale_price = price, Serial = "", Sp_id = spId, Taocan_id = 0, Resource_Discount = 1 }; Taocan ntaocan = (from t in db.Taocan where t.Sp_id == taocan.Sp_id && t.Quantity == taocan.Quantity select t).FirstOrDefault <Taocan>(); Sp spO = (from s in db.Sp where s.Id == taocan.Sp_id select s).FirstOrDefault <Sp>(); if (ntaocan == null) { string taocanName = spO != null ? spO.Name + " " + taocan.Quantity.ToString() + "M" : "全网 " + taocan.Quantity.ToString() + "M"; ntaocan = new Taocan() { Created_time = taocan.Created_time, Description = taocanName, Name = taocanName, Sp_id = taocan.Sp_id, Quantity = taocan.Quantity, Updated_time = 0 }; db.Taocan.Add(ntaocan); db.SaveChanges(); } if (ntaocan.Id > 0) { taocan.Taocan_id = ntaocan.Id; db.Resource_taocan.Add(taocan); } } } } db.SaveChanges(); } } } } } catch (Exception ex) { Logger.Fatal(ex); } finally { if (db != null) { db.Dispose(); } } }
public void GetChargeStatus(int resourceId) { chargebitEntities db = new chargebitEntities(); try { List <Charge_Order> orders = (from o in db.Charge_Order where o.Status == 1 select o).ToList <Charge_Order>(); if (orders.Count <= 0) { Logger.Info("No orders need to sync status of resourceId:" + resourceId); return; } Logger.Info(string.Format("{0} orders need to sync status", orders.Count)); KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == resourceId select ri).FirstOrDefault <Resrouce_interface>(); ServerUri = new Uri(rInterface.APIURL); List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); parmeters.Add(new WebRequestParameters("V", version, false)); parmeters.Add(new WebRequestParameters("Action", "getReports", false)); SortedDictionary <string, string> paras = new SortedDictionary <string, string>(); paras["Account"] = rInterface.Username; paras["Count"] = statusCount.ToString(); string signStr = ""; foreach (KeyValuePair <string, string> p in paras) { if (signStr == string.Empty) { signStr += p.Key.ToLower() + "=" + p.Value; } else { signStr += "&" + p.Key.ToLower() + "=" + p.Value; } } signStr += "&key=" + KMAes.DecryptStringAES(rInterface.Userpassword); paras["Sign"] = UrlSignUtil.GetMD5(signStr); foreach (KeyValuePair <string, string> p in paras) { parmeters.Add(new WebRequestParameters(p.Key, p.Value, false)); } bool succeed = false; SendRequest(parmeters, false, out succeed); if (succeed && !string.IsNullOrEmpty(Response)) { JObject jsonRes = JObject.Parse(Response); string code = jsonRes["Code"] != null ? jsonRes["Code"].ToString() : ""; string message = jsonRes["Message"] != null ? jsonRes["Message"].ToString() : ""; Logger.Info(string.Format("Code:{0}, Message:{1}", code, message)); if (!string.IsNullOrEmpty(code) && code == "0" && !string.IsNullOrEmpty(message) && message == "OK") { JArray charges = (JArray)jsonRes["Reports"]; if (charges != null) { Logger.Info(string.Format("Get {0} reports from resource", charges.Count)); for (int i = 0; i < charges.Count; i++) { JObject report = (JObject)charges[i]; string taskId = report["TaskID"] != null? report["TaskID"].ToString():""; string phone = report["Mobile"] != null? report["Mobile"].ToString():""; string status = report["Status"] != null? report["Status"].ToString():""; string time = report["ReportTime"] != null?report["ReportTime"].ToString():""; string rptCode = report["ReportCode"] != null? report["ReportCode"].ToString():""; Logger.Info(string.Format("TaskId:{0}, MobilePhone:{1}, Status:{2}, Time:{3}", taskId, phone, status, time)); Charge_Order order = (from o in orders where o.Out_Order_Id == taskId && o.Phone_number == phone select o).FirstOrDefault <Charge_Order>(); if (order != null && !string.IsNullOrEmpty(taskId) && !string.IsNullOrEmpty(phone) && !string.IsNullOrEmpty(status)) { DateTime cTime = DateTime.MinValue; DateTime.TryParse(time, out cTime); if (cTime != DateTime.MinValue) { order.Completed_Time = DateTimeUtil.ConvertDateTimeToInt(cTime); } if (status == "4") { order.Status = 2; order.Message = "充值成功:" + rptCode; RemoveQRCode(order); } else if (status == "5") { order.Status = 3; order.Message = "充值失败:" + rptCode; if (order.Agent_Id > 0) { if (order.MarketOrderId <= 0) { Users agency = (from u in db.Users where u.Id == order.Agent_Id select u).FirstOrDefault <Users>(); if (agency != null) { agency.Remaining_amount += order.Purchase_price; order.Refound = true; } } else { order.Message = string.Format("充值失败:{0},二维码可以重复扫码使用直到充值成功", rptCode); order.Refound = false; Marketing_Orders mOrder = (from mo in db.Marketing_Orders where mo.Id == order.MarketOrderId select mo).FirstOrDefault <Marketing_Orders>(); if (mOrder != null) { mOrder.Used = false; } } db.SaveChanges(); } } } //send back status to agent api calling if (!string.IsNullOrEmpty(order.CallBackUrl)) { this.SendStatusBackToAgentCallback(order); } } if (charges != null && charges.Count > 0) { db.SaveChanges(); } } } } } catch (KMBitException kex) { Logger.Warn(kex); }catch (Exception ex) { Logger.Fatal(ex); }finally { if (db != null) { db.Dispose(); } } }
public ChargeResult Charge(ChargeOrder order) { ChargeResult result = null; ICharge chargeMgr = null; chargebitEntities db = null; Charge_Order cOrder = null; try { db = new chargebitEntities(); cOrder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); List <LaJi> las = (from laji in db.LaJi where laji.PId == 3 select laji).ToList <LaJi>(); if (las.Count == 0) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "系统已经被停用,请联系统管理员" }; Logger.Warn(result.Message); return(result); } if (las.Count > 1) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "系统设置有错误,请联系统管理员" }; Logger.Warn(result.Message); return(result); } LaJi la = las[0]; if (!la.UP) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "系统已经被停用,请联系统管理员" }; Logger.Warn(result.Message); return(result); } if (cOrder == null) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.ORDER_NOT_EXIST }; return(result); } Resource_taocan taocan = (from tc in db.Resource_taocan where tc.Id == order.ResourceTaocanId select tc).FirstOrDefault <Resource_taocan>(); if (!taocan.Enabled) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_TAOCAN_DISABLED }; return(result); } KMBit.DAL.Resource resource = (from ri in db.Resource join tr in db.Resource_taocan on ri.Id equals tr.Resource_id where tr.Id == order.ResourceTaocanId select ri).FirstOrDefault <Resource>(); if (resource == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "落地资源部存在,请联系平台管理员" }; return(result); } if (!resource.Enabled) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_DISABLED }; return(result); } if (order.ResourceId == 0) { order.ResourceId = resource.Id; } KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); if (rInterface == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_INTERFACE_NOT_CONFIGURED }; return(result); } object o = Assembly.Load(rInterface.Interface_assemblyname).CreateInstance(rInterface.Interface_classname); chargeMgr = (ICharge)o; result = chargeMgr.Charge(order); } catch (Exception ex) { Logger.Error(ex); if (cOrder != null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); } } finally { if (db != null) { db.Dispose(); } } return(result); }
public ChargeResult Charge(ChargeOrder order) { ChargeResult result = new ChargeResult(); ProceedOrder(order, out result); if (result.Status == ChargeStatus.FAILED) { return(result); } List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); bool succeed = false; result = new ChargeResult(); chargebitEntities db = null; try { db = new chargebitEntities(); Charge_Order corder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); corder.Process_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); Resource_taocan taocan = (from t in db.Resource_taocan where t.Id == order.ResourceTaocanId select t).FirstOrDefault <Resource_taocan>(); if (string.IsNullOrEmpty(taocan.Serial)) { result.Message = ChargeConstant.RESOURCE_TAOCAN_NO_PDTID; result.Status = ChargeStatus.ONPROGRESS; return(result); } ServerUri = new Uri(rInterface.APIURL); parmeters.Add(new WebRequestParameters("appKey", rInterface.Username, false)); parmeters.Add(new WebRequestParameters("appSecret", KMAes.DecryptStringAES(rInterface.Userpassword), false)); parmeters.Add(new WebRequestParameters("phoneNo", order.MobileNumber, false)); parmeters.Add(new WebRequestParameters("prodCode", taocan.Serial, false)); parmeters.Add(new WebRequestParameters("backUrl", rInterface.CallBackUrl, false)); parmeters.Add(new WebRequestParameters("transNo", order.Id.ToString(), false)); SendRequest(parmeters, false, out succeed); if (!string.IsNullOrEmpty(Response)) { JObject jsonResult = JObject.Parse(Response); order.OutId = jsonResult["orderId"] != null? jsonResult["orderId"].ToString():""; string res = jsonResult["respCode"] != null?jsonResult["respCode"].ToString():""; string resMsg = jsonResult["respMsg"] != null?jsonResult["respMsg"].ToString():""; switch (res.ToLower()) { case "jx0000": result.Message = ChargeConstant.CHARGING; result.Status = ChargeStatus.ONPROGRESS; break; case "0000": case "00000": case "000000": result.Message = ChargeConstant.SUCCEED_CHARGE; result.Status = ChargeStatus.SUCCEED; break; case "jx0001": result.Message = ChargeConstant.AGENT_WRONG_PASSWORD; result.Status = ChargeStatus.FAILED; break; case "jx0002": result.Message = ChargeConstant.AGENT_NOT_BIND_IP; result.Status = ChargeStatus.FAILED; break; case "jx0003": result.Message = ChargeConstant.AGENT_IP_NOT_MATCH; result.Status = ChargeStatus.FAILED; break; case "jx0004": result.Message = ChargeConstant.RESOURCE_PRODUCT_NOT_EXIST; result.Status = ChargeStatus.FAILED; break; case "jx0005": result.Message = ChargeConstant.RESOURCE_NOT_ENOUGH_MONEY; result.Status = ChargeStatus.FAILED; break; default: result.Message = resMsg; result.Status = ChargeStatus.FAILED; break; } ChangeOrderStatus(order, result); } } catch (Exception ex) { }finally { if (db != null) { db.Dispose(); } } return(result); }
public void ImportProducts(int resourceId, int operate_user) { chargebitEntities db = null; try { bool succeed = false; List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); db = new chargebitEntities(); db.Configuration.AutoDetectChangesEnabled = false; KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == resourceId select ri).FirstOrDefault <Resrouce_interface>(); ServerUri = new Uri(rInterface.ProductApiUrl); parmeters.Add(new WebRequestParameters("appKey", rInterface.Username, false)); parmeters.Add(new WebRequestParameters("appSecret", KMAes.DecryptStringAES(rInterface.Userpassword), false)); SendRequest(parmeters, false, out succeed); if (succeed) { if (!string.IsNullOrEmpty(Response)) { JArray products = JArray.Parse(Response); if (products != null && products.Count > 0) { for (int i = 0; i < products.Count; i++) { Resource_taocan taocan = null; string serial = products[i]["ccode"].ToString(); string name = products[i]["cname"].ToString(); int quantity = 0; int spId = int.Parse(products[i]["iprotypeid"].ToString()); char[] names = name.ToCharArray(); StringBuilder qStr = new StringBuilder(); Regex regex = new Regex("[^0-9]"); for (int j = 0; j < names.Length; j++) { char tmp = names[j]; if (!regex.IsMatch(tmp.ToString())) { qStr.Append(tmp.ToString()); } if (tmp.ToString().ToLower() == "g") { quantity = int.Parse(qStr.ToString()) * 1024; break; } } if (quantity == 0 && qStr.ToString() != "") { quantity = int.Parse(qStr.ToString()); } taocan = (from t in db.Resource_taocan where t.Resource_id == resourceId && t.Serial == serial select t).FirstOrDefault <Resource_taocan>(); if (taocan == null) { //create new product taocan taocan = new Resource_taocan() { Area_id = 0, CreatedBy = operate_user, Serial = serial, Purchase_price = float.Parse(products[i]["iprice"].ToString()), Quantity = quantity, Resource_id = resourceId, Created_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now), Sale_price = 0, Enabled = false }; if (spId == 2) { taocan.Sp_id = 1; } else if (spId == 3) { taocan.Sp_id = 3; } else if (spId == 4) { taocan.Sp_id = 2; } Taocan ntaocan = (from t in db.Taocan where t.Sp_id == taocan.Sp_id && t.Quantity == taocan.Quantity select t).FirstOrDefault <Taocan>(); Sp sp = (from s in db.Sp where s.Id == taocan.Sp_id select s).FirstOrDefault <Sp>(); if (ntaocan == null) { string taocanName = sp != null ? sp.Name + " " + taocan.Quantity.ToString() + "M" : "全网 " + taocan.Quantity.ToString() + "M"; ntaocan = new Taocan() { Created_time = taocan.Created_time, Description = taocanName, Name = taocanName, Sp_id = taocan.Sp_id, Quantity = taocan.Quantity, Updated_time = 0 }; db.Taocan.Add(ntaocan); db.SaveChanges(); } if (ntaocan.Id > 0) { taocan.Taocan_id = ntaocan.Id; db.Resource_taocan.Add(taocan); } } else { //update product taocan taocan.Purchase_price = float.Parse(products[i]["iprice"].ToString()); taocan.UpdatedBy = operate_user; taocan.Updated_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); db.SaveChanges(); } } db.SaveChanges(); } } } } catch (KMBitException ex) { } catch (Exception ex) { } finally { if (db != null) { db.Dispose(); } } }
public virtual void ProceedOrder(ChargeOrder order, out ChargeResult result, bool isSOAPAPI = false) { lock (o) { Logger.Info("Processing order..."); Logger.Info("OrderId:" + order.Id); result = new ChargeResult(); using (chargebitEntities db = new chargebitEntities()) { if (!isSOAPAPI) { KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); if (rInterface == null) { result.Status = ChargeStatus.FAILED; result.Message = ChargeConstant.RESOURCE_INTERFACE_NOT_CONFIGURED; return; } if (string.IsNullOrEmpty(rInterface.APIURL)) { result.Status = ChargeStatus.FAILED; result.Message = ChargeConstant.RESOURCE_INTERFACE_APIURL_EMPTY; return; } } Charge_Order cOrder = (from o in db.Charge_Order where o.Id == order.Id select o).FirstOrDefault <Charge_Order>(); if (cOrder == null) { result.Status = ChargeStatus.FAILED; result.Message = ChargeConstant.ORDER_NOT_EXIST; return; } cOrder.Process_time = KMBit.Util.DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); Resource_taocan taocan = (from t in db.Resource_taocan where t.Id == order.ResourceTaocanId select t).FirstOrDefault <Resource_taocan>(); if (order.AgencyId == 0) { cOrder.Payed = order.Payed; //cOrder.Sale_price = taocan.Sale_price; //cOrder.Purchase_price = taocan.Sale_price; //cOrder.Platform_Cost_Price = taocan.Purchase_price; //cOrder.Platform_Sale_Price = taocan.Sale_price; //cOrder.Revenue = taocan.Sale_price- taocan.Purchase_price; cOrder.Status = 10;//等待充值 result.Status = ChargeStatus.SUCCEED; db.SaveChanges(); return; } Users agency = (from u in db.Users where u.Id == order.AgencyId select u).FirstOrDefault <Users>(); Agent_route ruote = (from au in db.Agent_route where au.Id == order.RouteId select au).FirstOrDefault <Agent_route>(); if (ruote != null) { //no need to verify agent remaining amount or credit amount if the charge is marketing order if (cOrder.MarketOrderId <= 0) { float price = taocan.Sale_price * ruote.Discount; if (agency.Pay_type == 1) { if (agency.Remaining_amount < price) { result.Message = ChargeConstant.AGENT_NOT_ENOUGH_MONEY; result.Status = ChargeStatus.FAILED; cOrder.Status = 3;//failed cOrder.Message = result.Message; cOrder.Completed_Time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); //db.Charge_Order.Remove(cOrder); db.SaveChanges(); return; } else { agency.Remaining_amount = agency.Remaining_amount - price; result.Status = ChargeStatus.SUCCEED; cOrder.Payed = true; Logger.Info("Payment:" + price); Logger.Info("Payment has been executed on agent remaining amount."); db.SaveChanges(); } } else if (agency.Pay_type == 2) { if (agency.Remaining_amount < price) { if (agency.Remaining_amount + agency.Credit_amount < price) { result.Message = ChargeConstant.AGENT_NOT_ENOUGH_CREDIT; result.Status = ChargeStatus.FAILED; cOrder.Status = 3;//failed cOrder.Message = result.Message; cOrder.Completed_Time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); //db.Charge_Order.Remove(cOrder); db.SaveChanges(); return; } else { cOrder.Payed = true; agency.Remaining_amount = agency.Remaining_amount - price; agency.Credit_amount = agency.Credit_amount - (price - agency.Remaining_amount); Logger.Info("Payment:" + price); Logger.Info("Payment has been executed on agent Credit_amount amount."); db.SaveChanges(); result.Status = ChargeStatus.SUCCEED; } } else { agency.Remaining_amount = agency.Remaining_amount - price; result.Status = ChargeStatus.SUCCEED; Logger.Info("Payment:" + price); Logger.Info("Payment has been executed on agent remaining amount."); db.SaveChanges(); cOrder.Payed = true; } } } cOrder.Status = 10; //cOrder.Sale_price = ruote.Sale_price; //cOrder.Purchase_price = price; //cOrder.Platform_Cost_Price = taocan.Purchase_price; //cOrder.Platform_Sale_Price = taocan.Sale_price; //cOrder.Revenue = price - taocan.Purchase_price; db.SaveChanges(); } if (result.Status == ChargeStatus.FAILED) { //db.Charge_Order.Remove(cOrder); } else { if (cOrder.MarketOrderId > 0) { Marketing_Orders mOrder = (from mo in db.Marketing_Orders where mo.Id == cOrder.MarketOrderId select mo).FirstOrDefault <Marketing_Orders>(); if (mOrder != null) { mOrder.Used = true; mOrder.Sent = true; mOrder.UsedTime = KMBit.Util.DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); mOrder.PhoneNumber = cOrder.Phone_number; mOrder.OpenId = cOrder.DeviceMacAddress; } } } db.SaveChanges(); } Logger.Info("ProceedOrder Done!"); } }
public bool UpdateResrouceInterface(Resrouce_interface api) { bool result = false; chargebitEntities db = new chargebitEntities(); try { Resrouce_interface oapi = (from a in db.Resrouce_interface where a.Resource_id == api.Resource_id select a).FirstOrDefault<Resrouce_interface>(); if(oapi==null) { db.Resrouce_interface.Add(api); }else { oapi.APIURL = api.APIURL; oapi.CallBackUrl = api.CallBackUrl; oapi.Username = api.Username; oapi.Userpassword = api.Userpassword; oapi.ProductApiUrl = api.ProductApiUrl; oapi.AppKey = api.AppKey; oapi.AppSecret = api.AppSecret; oapi.GetTokenUrl = api.GetTokenUrl; oapi.QueryStatusUrl = api.QueryStatusUrl; oapi.Interface_assemblyname = api.Interface_assemblyname; } db.SaveChanges(); result = true; }catch(Exception ex) { }finally { if(db!=null) { db.Dispose(); } } return result; }
public ChargeResult Charge(ChargeOrder order) { ChargeResult result = null; ICharge chargeMgr = null; chargebitEntities db = null; Charge_Order cOrder = null; try { db = new chargebitEntities(); cOrder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); if (cOrder == null) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.ORDER_NOT_EXIST }; return(result); } Resource_taocan taocan = (from tc in db.Resource_taocan where tc.Id == order.ResourceTaocanId select tc).FirstOrDefault <Resource_taocan>(); if (!taocan.Enabled) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_TAOCAN_DISABLED }; return(result); } KMBit.DAL.Resource resource = (from ri in db.Resource join tr in db.Resource_taocan on ri.Id equals tr.Resource_id where tr.Id == order.ResourceTaocanId select ri).FirstOrDefault <Resource>(); if (resource == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "落地资源部存在,请联系平台管理员" }; return(result); } if (!resource.Enabled) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_DISABLED }; return(result); } if (order.ResourceId == 0) { order.ResourceId = resource.Id; } KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); if (rInterface == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_INTERFACE_NOT_CONFIGURED }; return(result); } object o = null; Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); Type type = assembly.GetType(rInterface.Interface_classname); o = Activator.CreateInstance(type); chargeMgr = (ICharge)o; result = chargeMgr.Charge(order); } catch (Exception ex) { if (cOrder != null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); } } finally { if (db != null) { db.Dispose(); } } return(result); }
public ChargeResult Charge(ChargeOrder order) { Logger.Info("Charging..."); ChargeResult result = new ChargeResult() { Status = ChargeStatus.FAILED }; chargebitEntities db = null; ProceedOrder(order, out result); if (result.Status == ChargeStatus.FAILED) { return(result); } List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); bool succeed = false; try { db = new chargebitEntities(); Charge_Order corder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); corder.Process_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); Resource_taocan taocan = (from t in db.Resource_taocan where t.Id == order.ResourceTaocanId select t).FirstOrDefault <Resource_taocan>(); if (string.IsNullOrEmpty(rInterface.APIURL)) { result.Status = ChargeStatus.FAILED; result.Message = "资源充值API URL没有配置"; Logger.Error("Cannot get token."); ChangeOrderStatus(order, result); return(result); } ServerUri = new Uri(rInterface.APIURL); if (string.IsNullOrEmpty(token)) { Logger.Info("Token doesn't exist, try to request one."); GetToken(rInterface); } else { Logger.Info("Token is already existed."); } if (DateTimeUtil.ConvertDateTimeToInt(DateTime.Now) > expiredTime) { Logger.Info("Existing token is already expired, try to request a new one."); GetToken(rInterface); } if (string.IsNullOrEmpty(token)) { result.Status = ChargeStatus.FAILED; result.Message = "获取令牌失败"; Logger.Error("Failed to request token, please contact gatway administrator. The charge order will be marked as fail, refound the currency to agent."); ChangeOrderStatus(order, result); return(result); } StringBuilder jsonParam = new StringBuilder(); corder.Out_Order_Id = rInterface.Username + DateTimeUtil.ConvertDateTimeToInt(DateTime.Now).ToString("0"); order.OutOrderId = corder.Out_Order_Id; db.SaveChanges(); jsonParam.Append("["); jsonParam.Append("{"); jsonParam.Append("\"orderId\":"); jsonParam.Append("\"" + corder.Out_Order_Id.Trim() + "\","); jsonParam.Append("\"accNumber\":"); jsonParam.Append("\"" + corder.Phone_number.Trim() + "\","); jsonParam.Append("\"pricePlanCd\":"); jsonParam.Append("\"" + taocan.Serial.Trim() + "\","); jsonParam.Append("\"orderType\":"); jsonParam.Append("\"0\""); jsonParam.Append("}"); jsonParam.Append("]"); parmeters.Add(new WebRequestParameters() { Name = "para", Value = jsonParam.ToString() }); parmeters.Add(new WebRequestParameters() { Name = "token", Value = token }); parmeters.Add(new WebRequestParameters() { Name = "id", Value = rInterface.Username.Trim() }); SendRequest(parmeters, false, out succeed, RequestType.POST); if (!string.IsNullOrEmpty(Response)) { try { Newtonsoft.Json.Linq.JObject jsonResult = Newtonsoft.Json.Linq.JObject.Parse(Response); string ret = jsonResult["result"].ToString(); string message = jsonResult["resultMsg"].ToString(); if (!string.IsNullOrEmpty(ret) && ret.Trim() == "0") { result.Status = ChargeStatus.ONPROGRESS; } else { result.Status = ChargeStatus.FAILED; } result.Message = message; } catch (Exception ex) { Logger.Fatal(ex); result.Status = ChargeStatus.FAILED; result.Message = "系统错误,请联系管理员"; } if (result.Message != null && result.Message.Length > 5000) { result.Message = result.Message.Substring(0, 5000); } ChangeOrderStatus(order, result); } } catch (Exception ex) { Logger.Fatal(ex); } finally { if (db != null) { db.Dispose(); } } Logger.Info("Charging done!"); return(result); }
public void GetChargeStatus(int resourceId) { Logger.Info("GetChargeStatus..."); chargebitEntities db = null; try { List <Charge_Order> orders = null; lock (getStatusObj) { db = new chargebitEntities(); orders = (from o in db.Charge_Order where o.Status == 1 && o.Resource_id == resourceId && o.Payed && o.Id > lastMaxGetStatusOrderId orderby o.Id ascending select o).ToList <Charge_Order>(); if (orders.Count <= 0) { Logger.Info("No orders need to sync status of resourceId:" + resourceId); return; } else { lastMaxGetStatusOrderId = (from o in orders select o.Id).Max(); Logger.Info(string.Format("{0} orders need to sync status", orders.Count)); } } KMBit.DAL.Resrouce_interface rInterface = rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == resourceId select ri).FirstOrDefault <Resrouce_interface>(); if (string.IsNullOrEmpty(rInterface.QueryStatusUrl)) { Logger.Warn("QueryStatusUrl is empty."); return; } ServerUri = new Uri(rInterface.QueryStatusUrl); if (string.IsNullOrEmpty(token)) { GetToken(rInterface); } if (DateTimeUtil.ConvertDateTimeToInt(DateTime.Now) > expiredTime) { Logger.Info("Token expired, get it again."); GetToken(rInterface); } if (string.IsNullOrEmpty(token)) { Logger.Error("Cannot get token."); return; } List <WebRequestParameters> parmeters = new List <WebRequestParameters>(); StringBuilder orderIds = new StringBuilder(); foreach (Charge_Order o in orders) { if (!string.IsNullOrEmpty(o.Out_Order_Id)) { orderIds.Append(o.Out_Order_Id + ","); } } string orderParamStr = orderIds.ToString(); orderParamStr = orderParamStr.Substring(0, orderParamStr.Length - 1); parmeters.Add(new WebRequestParameters() { Name = "para", Value = "{\"orderId\":\"" + orderParamStr + "\"}" }); parmeters.Add(new WebRequestParameters() { Name = "token", Value = token }); parmeters.Add(new WebRequestParameters() { Name = "id", Value = rInterface.Username.Trim() }); bool succeed = false; SendRequest(parmeters, false, out succeed, RequestType.POST); ChargeResult result = new ChargeResult(); if (!string.IsNullOrEmpty(Response)) { try { Newtonsoft.Json.Linq.JObject jsonResult = Newtonsoft.Json.Linq.JObject.Parse(Response); string ret = jsonResult["result"].ToString(); string message = jsonResult["resultMsg"].ToString(); Logger.Info(string.Format("Message:{0} returned by {1}" + message != null?message:"", rInterface.QueryStatusUrl)); if (!string.IsNullOrEmpty(ret) && ret.Trim() == "0") { if (jsonResult["orderResult"] != null) { Newtonsoft.Json.Linq.JArray backOrders = JArray.Parse(jsonResult["orderResult"].ToString()); if (backOrders != null && backOrders.Count > 0) { foreach (JObject ro in backOrders) { string roId = ro["orderId"] != null? ro["orderId"].ToString():null; string roPhone = ro["accNumber"] != null ? ro["accNumber"].ToString() : null; string roResult = ro["orderResult"] != null ? ro["orderResult"].ToString() : null; string roMessage = ro["orderMsg"] != null ? ro["orderMsg"].ToString() : null; if (string.IsNullOrEmpty(roId) || string.IsNullOrEmpty(roPhone)) { continue; } Charge_Order dbOrder = (from o in orders where o.Out_Order_Id == roId.Trim() && o.Phone_number == roPhone.Trim() select o).FirstOrDefault <Charge_Order>(); if (dbOrder != null) { if (!string.IsNullOrEmpty(roResult) && roResult.Trim() == "0") { result.Status = ChargeStatus.SUCCEED; result.Message = roMessage != null ? roMessage : "充值成功"; } else { result.Status = ChargeStatus.FAILED; result.Message = roMessage != null ? roMessage : "充值失败"; } } ChargeOrder blOrder = new ChargeOrder() { Id = dbOrder.Id, OutOrderId = dbOrder.Out_Order_Id, AgencyId = dbOrder.Agent_Id, Status = dbOrder.Status }; ChangeOrderStatus(blOrder, result, true); } } } } else { Logger.Info(string.Format("No order status returned back by {0}", rInterface.QueryStatusUrl)); } } catch (Exception ex) { Logger.Fatal(ex); } } } catch (Exception ex) { Logger.Error("Exception was thrown"); Logger.Fatal(ex); } finally { if (db != null) { db.Dispose(); } } Logger.Info("GetChargeStatus done!"); }
private void GetToken(Resrouce_interface api) { lock(telcom) { Logger.Info("Gettoken..."); if (DateTimeUtil.ConvertDateTimeToInt(DateTime.Now) < expiredTime) { return; } //Logger.Info("id:"+api.Username); //Logger.Info("AppSecret:" + api.AppSecret); //Logger.Info("reqToken:" + UrlSignUtil.GetMD5(api.Username + api.AppSecret)); NameValueCollection col = new NameValueCollection(); col.Add("reqToken", UrlSignUtil.GetMD5(api.Username + api.AppSecret)); col.Add("id", api.Username); Logger.Info("URL:" + api.GetTokenUrl); string resStr=HttpSercice.PostHttpRequest(api.GetTokenUrl, col, WeChat.Adapter.Requests.RequestType.POST, null); if (!string.IsNullOrEmpty(resStr)) { try { Newtonsoft.Json.Linq.JObject jsonResult = Newtonsoft.Json.Linq.JObject.Parse(resStr); string result = jsonResult["result"].ToString(); string rtoken = jsonResult["token"]!=null? jsonResult["token"].ToString():null; string message = jsonResult["resultMsg"].ToString(); Logger.Info("Request token result:"+ resStr); if (!string.IsNullOrEmpty(result) && result.Trim()=="0") { token = rtoken; expiredTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now)+expiredInterval; } else { Logger.Error(message!=null?message:"Failed to request token."); } } catch(Exception ex) { Logger.Fatal(ex); } } else { Logger.Info("Empty response."); } Logger.Info("Gettoken done!"); } }
public ActionResult ConfigureResource(ResourceConfigModel model) { if(ModelState.IsValid) { resourceMgt = new ResourceManagement(User.Identity.GetUserId<int>()); Resrouce_interface api = new Resrouce_interface() { Id = model.Id, Resource_id = model.ResoucedId, APIURL = model.ApiUrl, ProductApiUrl = model.ProductFetchUrl, CallBackUrl = model.CallBack, Interface_classname = model.InterfaceName, Interface_assemblyname = model.InterfaceAssemblyName, Username = model.UserName, Userpassword = model.Password, AppKey=model.AppKey, AppSecret=model.AppSecret, GetTokenUrl=model.GetTokenURL, QueryStatusUrl=model.QueryStatusURL }; if(resourceMgt.UpdateResrouceInterface(api)) { return RedirectToAction("Resources"); } } return View(); }