public ApiMessage ChargeBack() { ApiMessage message = new ApiMessage(); try { this.IniRequest(); SortedDictionary<string, string> sArray = GetRequestParameters(); ChargeBridge bridge = new ChargeBridge(); ChargeResult result = bridge.ChargeCallBack(sArray); message.Message = result.Message; message.Status = "OK"; if (result.Status!= ChargeStatus.SUCCEED) { message.Status = "ERROR"; } } catch (KMBitException kex) { message.Status = "ERROR"; message.Message = kex.Message; } catch (Exception ex) { message.Status = "ERROR"; message.Message = "未知错误"; } return message; }
/// <summary> /// This method is only applied to platform direct charge /// </summary> /// <param name="orderId"></param> public ChargeResult ProcessOrderAfterPaid(int paymentId, string tradeNo, string buyerAccount) { ChargeResult result = new ChargeResult(); using (chargebitEntities db = new chargebitEntities()) { Payment_history payment = (from p in db.Payment_history where p.Id == paymentId select p).FirstOrDefault <Payment_history>(); if (payment == null) { result.Status = ChargeStatus.FAILED; result.Message = string.Format("编号为:{0}的支付编号不存在", paymentId); return(result); } payment.Pay_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); payment.PaymentAccount = buyerAccount != null?buyerAccount:""; payment.PaymentTradeId = tradeNo != null ? tradeNo : ""; db.SaveChanges(); //前台用户直充网络支付成功之后,提交订单到资源充值 if (payment.PayType == 0) { if (payment.ChargeOrderId <= 0) { result.Status = ChargeStatus.FAILED; result.Message = string.Format("编号为:{0}的支付编号没有相关充值订单", paymentId); return(result); } Charge_Order corder = (from o in db.Charge_Order where o.Id == payment.ChargeOrderId select o).FirstOrDefault <Charge_Order>(); corder.Payed = true; db.SaveChanges(); ChargeOrder order = new ChargeOrder() { Payed = true, ChargeType = corder.Charge_type, AgencyId = corder.Agent_Id, Id = corder.Id, Province = corder.Province, City = corder.City, MobileSP = corder.MobileSP, MobileNumber = corder.Phone_number, OutId = "", ResourceId = 0, ResourceTaocanId = corder.Resource_taocan_id, RouteId = corder.RuoteId, CreatedTime = corder.Created_time }; ChargeBridge cb = new ChargeBridge(); result = cb.Charge(order); } } return(result); }
public APIChargeResult Charge(int agentId,int routeId,string mobile,string spname,string province,string city,string callBackUrl,string client_order_id) { if(string.IsNullOrEmpty(mobile)) { throw new KMBitException("手机号码不能为空"); } if (string.IsNullOrEmpty(spname)) { throw new KMBitException("手机号归属运行商不能为空"); } if (string.IsNullOrEmpty(province)) { throw new KMBitException("手机号归属省份不能为空"); } //if (string.IsNullOrEmpty(city)) //{ // throw new KMBitException("手机号归属城市不能为空"); //} ChargeResult result = null; ChargeBridge cb = new ChargeBridge(); ChargeOrder order = new ChargeOrder() { ClientOrderId = client_order_id, Payed = false, OperateUserId = 0, AgencyId = agentId, Id = 0, Province = province, City = city!=null? city:"", MobileNumber = mobile, MobileSP=spname, OutOrderId = "", ResourceId = 0, ResourceTaocanId = 0, RouteId = routeId, CreatedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now), CallbackUrl = callBackUrl }; chargebitEntities db = null; OrderManagement orderMgt = new OrderManagement(); try { db = new chargebitEntities(); Users agent = (from u in db.Users where u.Id == agentId select u).FirstOrDefault<Users>(); if(agent==null) { throw new KMBitException(string.Format("编号为{0}的代理商不存在",agentId)); } if(!agent.Enabled) { throw new KMBitException(string.Format("代理商{0}已经被关闭禁用",agent.Name)); } //verify mobile sp Agent_route route = (from r in db.Agent_route where r.Id == routeId && r.User_id == agentId select r).FirstOrDefault<Agent_route>(); if(route==null) { throw new KMBitException(string.Format("代理商 {1} 编号为{0}的路由不存在", routeId,agent.Name)); } if(!route.Enabled) { throw new KMBitException(string.Format("代理商 {1} 编号为{0}的路由已经被关闭", routeId, agent.Name)); } Resource_taocan taocan = (from t in db.Resource_taocan where t.Id==route.Resource_taocan_id select t).FirstOrDefault<Resource_taocan>(); int spId = (from sp in db.Sp where sp.Name.Contains(spname.Trim()) select sp.Id).FirstOrDefault<int>(); if(spId==0) { throw new KMBitException("手机运营商的值必须是-中国移动,中国联通或者中国电信"); } int provinceId = (from area in db.Area where area.Name.Contains(province) select area.Id).FirstOrDefault<int>(); if(provinceId==0) { throw new KMBitException("手机号码归属省份值不正确,例如 河南,海南,江苏,请以此种格式传入"); } if(taocan.NumberProvinceId>0 && provinceId>0) { if(provinceId!=taocan.NumberProvinceId) { throw new KMBitException(string.Format("当前路由不能充{0}-{1}的手机号码",spname,province)); } } order = orderMgt.GenerateOrder(order); //result = cb.Charge(order); if(order.Id>0) { result = new ChargeResult(); result.Status = ChargeStatus.SUCCEED; result.Message = "充值信息已提交到充值系统"; } } catch(KMBitException kex) { throw kex; } catch (Exception ex) { logger.Error(ex); result = new ChargeResult(); result.Status = ChargeStatus.FAILED; result.Message = "未知错误,请联系平台管理员"; } APIChargeResult apiResult = new APIChargeResult(); //apiResult.Message = result.Message; apiResult.OrderId = order.Id; switch (result.Status) { case ChargeStatus.SUCCEED: apiResult.Status = ChargeStatus.SUCCEED.ToString(); apiResult.Message = result.Message; break; case ChargeStatus.FAILED: apiResult.Status = ChargeStatus.FAILED.ToString(); break; case ChargeStatus.ONPROGRESS: apiResult.Status = ChargeStatus.SUCCEED.ToString(); break; case ChargeStatus.PENDIND: apiResult.Status = ChargeStatus.SUCCEED.ToString(); break; } return apiResult; }
public ChargeResult MarketingCharge(BMarketOrderCharge orderCharge) { logger.Info("MarketingCharge"); ChargeResult result = new ChargeResult(); if (orderCharge == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } if (orderCharge.AgentId == 0 || orderCharge.CustomerId == 0 || orderCharge.ActivityId == 0) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } if (string.IsNullOrEmpty(orderCharge.SPName)) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } if (string.IsNullOrEmpty(orderCharge.Phone)) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } int sp = 0; if (orderCharge.SPName.Contains("联通")) { sp = 3; } else if (orderCharge.SPName.Contains("移动")) { sp = 1; } else if (orderCharge.SPName.Contains("电信")) { sp = 2; } chargebitEntities db = new chargebitEntities(); Marketing_Activity_Taocan mtaocan = null; Marketing_Orders mOrder = null; try { Marketing_Activities activity = (from a in db.Marketing_Activities where a.Id == orderCharge.ActivityId select a).FirstOrDefault <Marketing_Activities>(); if (activity == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } if (activity.CustomerId != orderCharge.CustomerId) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } if (activity.AgentId != orderCharge.AgentId) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } //非直接扫码活动,必须传入特定的marketing order id if (activity.ScanType != 1 && orderCharge.ActivityOrderId == 0) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return(result); } ChargeOrder order = new ChargeOrder() { AgencyId = orderCharge.AgentId, ChargeType = 1, City = orderCharge.City, CreatedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now), IsMarket = true, MacAddress = orderCharge.OpenId, MobileNumber = orderCharge.Phone, MobileSP = orderCharge.SPName, Payed = true, Province = orderCharge.Province, }; //direct scan if (activity.ScanType == 1 && orderCharge.ActivityOrderId <= 0) { //判断是否还有可用marketing order List <Marketing_Activity_Taocan> rTaocans = (from mt in db.Marketing_Activity_Taocan join t in db.Resource_taocan on mt.ResourceTaocanId equals t.Id where mt.ActivityId == orderCharge.ActivityId && t.Sp_id == sp select mt).ToList <Marketing_Activity_Taocan>(); if (rTaocans.Count == 0) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动" + orderCharge.SPName + "不能扫码充值"; return(result); } mtaocan = rTaocans[0]; mOrder = (from o in db.Marketing_Orders where o.ActivityId == orderCharge.ActivityId && o.Sent == false && o.Used == false && o.ActivityTaocanId == mtaocan.Id select o).FirstOrDefault <Marketing_Orders>(); if (mOrder == null) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动的流量充值额度已经全部被扫完,尽请期待下次活动"; return(result); } if (mOrder.Used) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动的流量充值额度已经全部被扫完,尽请期待下次活动"; return(result); } mOrder.Used = true; mOrder.Sent = true; //db.SaveChanges(); order.MarketOrderId = mOrder.Id; order.ResourceTaocanId = mtaocan.ResourceTaocanId; }//weichat push else if (activity.ScanType == 2 && orderCharge.ActivityOrderId > 0) { mOrder = (from o in db.Marketing_Orders where o.Id == orderCharge.ActivityOrderId select o).FirstOrDefault <Marketing_Orders>(); if (mOrder == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return(result); } if (mOrder.Used) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动的流量充值额度已经全部被扫完,尽请期待下次活动"; return(result); } mtaocan = (from mt in db.Marketing_Activity_Taocan where mt.Id == mOrder.ActivityTaocanId select mt).FirstOrDefault <Marketing_Activity_Taocan>(); if (mtaocan == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return(result); } Resource_taocan rT = (from r in db.Resource_taocan where r.Id == mtaocan.ResourceTaocanId select r).FirstOrDefault <Resource_taocan>(); if (rT == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return(result); } if (rT.Sp_id != sp) { string tmpSPName = ""; if (rT.Sp_id == 1) { tmpSPName = "中国移动"; } else if (rT.Sp_id == 2) { tmpSPName = "中国电信"; } else if (rT.Sp_id == 3) { tmpSPName = "中国联通"; } result.Status = ChargeStatus.FAILED; result.Message = string.Format("此二维码链接不能充值{0}的手机号码的流量,只能充值{1}的号码的流量", orderCharge.SPName, tmpSPName); return(result); } order.ResourceTaocanId = mtaocan.ResourceTaocanId; order.MarketOrderId = orderCharge.ActivityOrderId; mOrder.Used = true; mOrder.Sent = true; } else if (activity.ScanType == 1 && orderCharge.ActivityOrderId > 0) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return(result); } else if (activity.ScanType == 2 && orderCharge.ActivityOrderId <= 0) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return(result); } OrderManagement orderMgr = new OrderManagement(CurrentLoginUser); order = orderMgr.GenerateOrder(order); ChargeBridge chargeBridge = new ChargeBridge(); if (order.Id > 0) { db.SaveChanges(); result = chargeBridge.Charge(order); if (result.Status == ChargeStatus.FAILED) { //Rollback, the order cannot be used next time mOrder.UsedTime = 0; mOrder.Used = false; if (activity.ScanType == 1) { mOrder.Sent = false; } db.SaveChanges(); } else { mOrder.UsedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); } db.SaveChanges(); } } catch (KMBitException kex) { logger.Warn(kex); result.Status = ChargeStatus.FAILED; result.Message = kex.Message; if (mOrder != null) { mOrder.Used = false; db.SaveChanges(); } } catch (Exception ex) { logger.Fatal(ex); result.Status = ChargeStatus.FAILED; result.Message = "系统错误,稍后再试"; if (mOrder != null) { mOrder.Used = false; db.SaveChanges(); } } finally { if (db != null) { db.Dispose(); } } logger.Info("Finished MarketingCharge"); return(result); }
public ChargeResult MarketingCharge(BMarketOrderCharge orderCharge) { logger.Info("MarketingCharge"); ChargeResult result = new ChargeResult(); if (orderCharge == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } if (orderCharge.AgentId == 0 || orderCharge.CustomerId == 0 || orderCharge.ActivityId == 0) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } if (string.IsNullOrEmpty(orderCharge.SPName)) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } if (string.IsNullOrEmpty(orderCharge.Phone)) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } int sp = 0; if (orderCharge.SPName.Contains("联通")) { sp = 3; } else if (orderCharge.SPName.Contains("移动")) { sp = 1; } else if (orderCharge.SPName.Contains("电信")) { sp = 2; } chargebitEntities db = new chargebitEntities(); Marketing_Activity_Taocan mtaocan = null; Marketing_Orders mOrder = null; try { Marketing_Activities activity = (from a in db.Marketing_Activities where a.Id==orderCharge.ActivityId select a).FirstOrDefault<Marketing_Activities>(); if(activity==null) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } if(activity.CustomerId!=orderCharge.CustomerId) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } if (activity.AgentId != orderCharge.AgentId) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } //非直接扫码活动,必须传入特定的marketing order id if(activity.ScanType!=1 && orderCharge.ActivityOrderId==0) { result.Status = ChargeStatus.FAILED; result.Message = "参数不正确"; return result; } ChargeOrder order = new ChargeOrder() { AgencyId = orderCharge.AgentId, ChargeType = 1, City = orderCharge.City, CreatedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now), IsMarket = true, MacAddress = orderCharge.OpenId, MobileNumber = orderCharge.Phone, MobileSP = orderCharge.SPName, Payed = true, Province = orderCharge.Province, }; //direct scan if (activity.ScanType==1 && orderCharge.ActivityOrderId<=0) { //判断是否还有可用marketing order List<Marketing_Activity_Taocan> rTaocans = (from mt in db.Marketing_Activity_Taocan join t in db.Resource_taocan on mt.ResourceTaocanId equals t.Id where mt.ActivityId == orderCharge.ActivityId && t.Sp_id == sp select mt).ToList<Marketing_Activity_Taocan>(); if (rTaocans.Count==0) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动" + orderCharge.SPName + "不能扫码充值"; return result; } mtaocan = rTaocans[0]; mOrder = (from o in db.Marketing_Orders where o.ActivityId== orderCharge.ActivityId && o.Sent==false && o.Used==false && o.ActivityTaocanId== mtaocan.Id select o).FirstOrDefault<Marketing_Orders>(); if(mOrder==null) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动的流量充值额度已经全部被扫完,尽请期待下次活动"; return result; } if(mOrder.Used) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动的流量充值额度已经全部被扫完,尽请期待下次活动"; return result; } mOrder.Used = true; mOrder.Sent = true; //db.SaveChanges(); order.MarketOrderId = mOrder.Id; order.ResourceTaocanId = mtaocan.ResourceTaocanId; }//weichat push else if(activity.ScanType==2 && orderCharge.ActivityOrderId>0) { mOrder = (from o in db.Marketing_Orders where o.Id==orderCharge.ActivityOrderId select o).FirstOrDefault<Marketing_Orders>(); if (mOrder == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return result; } if(mOrder.Used) { result.Status = ChargeStatus.FAILED; result.Message = "本次活动的流量充值额度已经全部被扫完,尽请期待下次活动"; return result; } mtaocan = (from mt in db.Marketing_Activity_Taocan where mt.Id==mOrder.ActivityTaocanId select mt).FirstOrDefault<Marketing_Activity_Taocan>(); if(mtaocan == null) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return result; } Resource_taocan rT = (from r in db.Resource_taocan where r.Id == mtaocan.ResourceTaocanId select r).FirstOrDefault<Resource_taocan>(); if(rT==null) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return result; } if(rT.Sp_id!=sp) { string tmpSPName = ""; if(rT.Sp_id==1) { tmpSPName = "中国移动"; }else if(rT.Sp_id==2) { tmpSPName = "中国电信"; } else if (rT.Sp_id == 3) { tmpSPName = "中国联通"; } result.Status = ChargeStatus.FAILED; result.Message = string.Format("此二维码链接不能充值{0}的手机号码的流量,只能充值{1}的号码的流量",orderCharge.SPName,tmpSPName); return result; } order.ResourceTaocanId = mtaocan.ResourceTaocanId; order.MarketOrderId = orderCharge.ActivityOrderId; mOrder.Used = true; mOrder.Sent = true; }else if(activity.ScanType==1 && orderCharge.ActivityOrderId>0) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return result; } else if(activity.ScanType==2 && orderCharge.ActivityOrderId<=0) { result.Status = ChargeStatus.FAILED; result.Message = "参数有误"; return result; } OrderManagement orderMgr = new OrderManagement(CurrentLoginUser); order=orderMgr.GenerateOrder(order); ChargeBridge chargeBridge = new ChargeBridge(); if(order.Id>0) { db.SaveChanges(); result=chargeBridge.Charge(order); if(result.Status== ChargeStatus.FAILED) { //Rollback, the order cannot be used next time mOrder.UsedTime = 0; mOrder.Used = false; if(activity.ScanType==1) { mOrder.Sent = false; } db.SaveChanges(); }else { mOrder.UsedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now); } db.SaveChanges(); } } catch (KMBitException kex) { logger.Warn(kex); result.Status = ChargeStatus.FAILED; result.Message = kex.Message; if(mOrder!=null) { mOrder.Used = false; db.SaveChanges(); } } catch (Exception ex) { logger.Fatal(ex); result.Status = ChargeStatus.FAILED; result.Message = "系统错误,稍后再试"; if (mOrder != null) { mOrder.Used = false; db.SaveChanges(); } } finally { if(db!=null) { db.Dispose(); } } logger.Info("Finished MarketingCharge"); return result; }
public ActionResult Charge(AgentChargeModel model) { if (ModelState.IsValid) { try { ChargeBridge cb = new ChargeBridge(); ChargeOrder order = new ChargeOrder() { Payed = false, OperateUserId = 0, AgencyId = User.Identity.GetUserId<int>(), Id = 0, Province = model.Province, City = model.City, MobileSP =model.SPName, MobileNumber = model.Mobile, OutOrderId = "", ResourceId = 0, ResourceTaocanId = model.ResourceTaocanId, RouteId = model.RouteId, CreatedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now) }; OrderManagement orderMgt = new OrderManagement(); order = orderMgt.GenerateOrder(order); //ChargeResult result = cb.Charge(order); ViewBag.Message = "成功提交到充值系统,等待充值,可以到流量充值查询里查看充值状态..."; } catch (KMBitException ex) { ViewBag.Message = ex.Message; }finally { model = new AgentChargeModel(); } } return View(model); }
public ActionResult ImportProduct(int resourceId) { if (resourceId <= 0) { ViewBag.Message = "落地资源编号不正确"; return View("Error"); } resourceMgt = new ResourceManagement(User.Identity.GetUserId<int>()); if (!resourceMgt.CurrentLoginUser.Permission.CONFIGURE_RESOURCE) { ViewBag.Message = "没有权限配置落地资源接口信息"; return View("Error"); } try { ChargeBridge bridge = new ChargeBridge(); bridge.ImportResourceProducts(resourceId,User.Identity.GetUserId<int>()); return Redirect("/Admin/ViewResourceTaoCan?resourceId=" + resourceId); } catch(KMBitException ex) { ViewBag.Message = ex.Message; return View("Error"); } }
public ActionResult Charge(ChargeModel model) { BaseManagement baseMgt = new BaseManagement(User.Identity.GetUserId<int>()); if (!baseMgt.CurrentLoginUser.Permission.CHARGE_BYTE) { ViewBag.Message = "没有权限充值流量"; return View("Error"); } if (ModelState.IsValid) { ChargeBridge cb = new ChargeBridge(); ChargeOrder order = new ChargeOrder() { ChargeType=2, Payed=true, OperateUserId=User.Identity.GetUserId<int>(), AgencyId = 0, Id = 0, Province=model.Province,City=model.City, MobileSP = model.SPName, MobileNumber = model.Mobile, OutOrderId = "", ResourceId = 0, ResourceTaocanId = model.ResourceTaocanId, RouteId = 0, CreatedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now) }; OrderManagement orderMgt = new OrderManagement(); try { order = orderMgt.GenerateOrder(order); ViewBag.Message = "成功提交到充值系统,等待充值,可以到流量充值查询里查看充值状态..."; } catch(KMBitException kex) { ViewBag.Message = kex.Message; } catch(Exception ex) { ViewBag.Message = ex.Message; } //ChargeResult result = cb.Charge(order); } return View(); }