Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public ChargeResult ChargeCallBack(SortedDictionary <string, string> paras)
        {
            ChargeResult result = new ChargeResult();

            if (paras == null)
            {
                result.Status  = ChargeStatus.FAILED;
                result.Message = "回调参数错误";
                return(result);
            }

            string orderStrId = null;

            if (paras.ContainsKey("transNo"))
            {
                orderStrId = paras["transNo"];
                ICharge chargeMgr = new ChongBaCharge();
                List <WebRequestParameters> paramters = new List <WebRequestParameters>();
                //paramters.Add(new WebRequestParameters("orderId", parameters["orderId"], false));
                //paramters.Add(new WebRequestParameters("respCode", parameters["respCode"], false));
                //paramters.Add(new WebRequestParameters("respMsg", parameters["respMsg"], false));
                //paramters.Add(new WebRequestParameters("transNo", parameters["transNo"], false));
                if (paras != null)
                {
                    foreach (KeyValuePair <string, string> para in paras)
                    {
                        paramters.Add(new WebRequestParameters(para.Key, para.Value, false));
                    }
                }
                chargeMgr.CallBack(paramters);
                result.Status  = ChargeStatus.SUCCEED;
                result.Message = "回调成功";
            }
            return(result);
        }
Exemplo n.º 3
0
        private string AskCustomerCharge(string shop, string token)
        {
            //create charged
            var recurring = new Recurring();

            recurring.Charge = new ChargeDetails
            {
                Name      = "Fulfillment App Pro",
                Price     = "20.00",
                ReturnUrl = string.Format("https://{0}/fulfillment/chargeresult?shop={1}", appUrl, shop),
                TrialDays = "2",
                Test      = "true"
            };

            var chargeResultDetails = CreateCharged(token, shop, recurring);

            if (chargeResultDetails.StatusCode == HttpStatusCode.Created)
            {
                ChargeResult chargeResult = JsonConvert.DeserializeObject <ChargeResult>(chargeResultDetails.Content);

                //save to DB


                //send to charge link for customer to accept or declined charge

                return(chargeResult.recurring_application_charge.confirmation_url);
            }
            return("");
        }
Exemplo n.º 4
0
        private async void Client_OnSuccess(object sender, string e)
        {
            await Navigation.PopAsync();

            RestForms restclient = new RestForms();
            var       response   = await restclient.Post <ChargeResult, Charge>($"{_baseurl}/Payment/AddChargeToCard/{_customerid}/{App.IdCliente}", new Charge
            {
                amount            = _amount,
                capture           = false,
                currency          = "MXN",
                cvv2              = _card.cvv2,
                description       = _description,
                device_session_id = e,
                source_id         = _token,
                order_id          = $"{_token}_droidshop",
                method            = "card"
            });

            if (response != null && response.status == Openpay.ChargeResult.completed)
            {
                ChargeResult?.Invoke(this, response);
                Instance = null;
            }
            else
            {
                await DisplayAlert("Pago con tarjeta", "Tuvimos un problema para realizar la transaccion con esta tarjeta, verifica el cvv, intenta de nuevo o intenta con otra tarjeta", "Aceptar");

                Device.BeginInvokeOnMainThread(() =>
                {
                    ProgressIndicator.IsVisible = false;
                    StackListCards.IsVisible    = true;
                    FormCvvCard.IsVisible       = false;
                });
            }
        }
Exemplo n.º 5
0
        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, OutId = "", 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 = result.Message;
                }
                catch (KMBitException ex)
                {
                    ViewBag.Message = ex.Message;
                }finally
                {
                    model = new AgentChargeModel();
                }
            }

            return(View(model));
        }
Exemplo n.º 6
0
        public ChargeResult ChargeCreditCard(string CCNumber, Int32 Amount, string FirstName, string LastName, string Address, string City, string Zip, string State, string Country, string Telephone, string DOB, string EmailAddress, string CardHolderName, string ExpiryMonth, string ExpiryYear, string CVC2, string Currency)
        {
            Stripe StripeGateway = new Stripe();

            ChargeResult chargeresult = StripeGateway.DoPayment(CCNumber, Amount, FirstName, LastName, Address, City, Zip, State, Country, Telephone, DOB, EmailAddress, CardHolderName, ExpiryMonth, ExpiryYear, CVC2, Currency);

            return(chargeresult);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        public APIChargeResult Charge(int agendId, int routeId, string mobile, string province, string city, string callBackUrl)
        {
            ChargeResult result = null;
            ChargeBridge cb     = new ChargeBridge();
            ChargeOrder  order  = new ChargeOrder()
            {
                Payed = false, OperateUserId = 0, AgencyId = agendId, Id = 0, Province = province, City = city, MobileNumber = mobile, OutId = "", ResourceId = 0, ResourceTaocanId = 0, RouteId = routeId, CreatedTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now), CallbackUrl = callBackUrl
            };

            OrderManagement orderMgt = new OrderManagement();

            try
            {
                order  = orderMgt.GenerateOrder(order);
                result = cb.Charge(order);
            }
            catch (KMBitException kex)
            {
                result         = new ChargeResult();
                result.Status  = ChargeStatus.FAILED;
                result.Message = kex.Message;
            }catch (Exception 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 = 2;
                break;

            case ChargeStatus.FAILED:
                apiResult.Status = 2;
                break;

            case ChargeStatus.ONPROGRESS:
                apiResult.Status = 1;
                break;

            case ChargeStatus.PENDIND:
                apiResult.Status = 10;
                break;
            }

            return(apiResult);
        }
Exemplo n.º 9
0
        public ChargeResult DoPayment(string CCNumber, Int32 Amount, string FirstName, string LastName, string Address, string City, string Zip, string State, string Country, string Telephone, string DOB, string EmailAddress, string CardHolderName, string ExpiryMonth, string ExpiryYear, string CVC2, string Currency)
        {
            // StripeConfiguration.SetApiKey("sk_test_tZluxZhcmbz0AfuvoYm60ic9");
            StripeConfiguration.SetApiKey("sk_live_J8Hzr3keqlfOtLn5zYAJp62S");


            var myCharge = new StripeChargeCreateOptions();

            // always set these properties
            myCharge.Amount   = Amount;
            myCharge.Currency = Currency;

            // set this if you want to
            myCharge.Description = "";

            // set this property if using a token
            // myCharge.TokenId = *tokenId*;

            // set these properties if passing full card details
            // (do not set these properties if you have set a TokenId)
            myCharge.CardNumber          = CCNumber;
            myCharge.CardExpirationYear  = ExpiryYear;
            myCharge.CardExpirationMonth = ExpiryMonth;
            myCharge.CardAddressCountry  = Country;        // optional
            myCharge.CardAddressLine1    = Address;        // optional
            myCharge.CardAddressLine2    = "";             // optional
            myCharge.CardAddressState    = State;          // optional
            myCharge.CardAddressZip      = Zip;            // optional
            myCharge.CardName            = CardHolderName; // optional
            myCharge.CardCvc             = CVC2;           // optional

            // set this property if using a customer
            // myCharge.CustomerId = *customerId*;

            // if using a customer, you may also set this property to charge
            // a card other than the customer's default card
            // myCharge.Card = *cardId*;

            // set this if you have your own application fees (you must have your application configured first within Stripe)
            // myCharge.ApplicationFee = 25;

            // (not required) set this to false if you don't want to capture the charge yet - requires you call capture later
            myCharge.Capture = true;

            var          chargeService = new StripeChargeService();
            StripeCharge stripeCharge  = chargeService.Create(myCharge);
            ChargeResult chargeresult  = new ChargeResult();

            chargeresult.Id              = stripeCharge.Id;
            chargeresult.failure_code    = stripeCharge.FailureCode;
            chargeresult.failure_message = stripeCharge.FailureMessage;
            return(chargeresult);
        }
Exemplo n.º 10
0
        public string ChargeCallBack(SortedDictionary <string, string> paras, ResourceType type)
        {
            Logger.Info(this.GetType().ToString() + ".ChargeCallBack......................");
            ChargeResult result = new ChargeResult();

            if (paras == null)
            {
                Logger.Error("No parameters included in the callback request.");
                result.Status  = ChargeStatus.FAILED;
                result.Message = "回调参数错误";
                return(result.Status.ToString());
            }
            ICharge chargeMgr = null;

            try
            {
                switch (type)
                {
                case ResourceType.BeiBeiFlow:
                    Logger.Info("Beibeiflow callback");
                    chargeMgr = new BeiBeiFlowCharge();
                    break;
                }
                if (chargeMgr != null)
                {
                    List <WebRequestParameters> paramters = new List <WebRequestParameters>();
                    if (paras != null)
                    {
                        foreach (KeyValuePair <string, string> para in paras)
                        {
                            paramters.Add(new WebRequestParameters(para.Key, para.Value, false));
                        }
                    }
                    chargeMgr.CallBack(paramters);
                    Logger.Info("Beibeiflow callback is completed.");
                    result.Status  = ChargeStatus.SUCCEED;
                    result.Message = "回调成功";
                }
            }
            catch (KMBitException kex)
            {
                result.Status  = ChargeStatus.FAILED;
                result.Message = kex.Message;
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex);
            }
            Logger.Info(this.GetType().ToString() + ".ChargeCallBack done.");
            return(result.Status.ToString());
        }
Exemplo n.º 11
0
        public ChargeResult DoPayment(string CCNumber, Int32 Amount, string FirstName, string LastName, string Address, string City, string Zip, string State, string Country, string Telephone, string DOB, string EmailAddress, string CardHolderName, string ExpiryMonth, string ExpiryYear, string CVC2, String Currency)
        {
            // CreditCardDetailsType cardDetails = MapCardDetails(CCNumber, FirstName, LastName, Address, City, Zip, State, Country, Telephone, DOB, EmailAddress, CardHolderName, ExpiryMonth, ExpiryYear, CVC2);
            DoDirectPaymentResponseType result;

            using (var _client = new PayPalAPIAAInterfaceClient())
            {
                DoDirectPaymentRequestType pp_Request = new DoDirectPaymentRequestType();
                pp_Request.Version = "TODO set Version";
                pp_Request.DoDirectPaymentRequestDetails           = new DoDirectPaymentRequestDetailsType();
                pp_Request.DoDirectPaymentRequestDetails.IPAddress = "115.187.229.184";
                //  pp_Request.DoDirectPaymentRequestDetails.CreditCard = cardDetails;

                // NOTE: The only currency supported by the Direct Payment API at this time is US dollars (USD)..
                pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.currencyID = CurrencyCodeType.USD;
                pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.Value      = Amount.ToString();

                var dp = new DoDirectPaymentReq
                {
                    DoDirectPaymentRequest = pp_Request
                };

                var credentials = new CustomSecurityHeaderType
                {
                    Credentials = new UserIdPasswordType
                    {
                        Username  = "******",
                        Password  = "******",
                        Signature = "signature",
                        AppId     = "ApiId"
                    }
                };

                result = _client.DoDirectPayment(ref credentials, dp);
            }
            var chargeResult = new ChargeResult();

            if (result != null && result.Errors.Count() > 0)
            {
                chargeResult.failure_code    = result.Errors[0].ErrorCode;
                chargeResult.failure_message = result.Errors[0].ShortMessage;
            }

            chargeResult.Id = result.TransactionID;

            return(chargeResult);
        }
Exemplo n.º 12
0
        public ActionResult chargeresult(string shop, string charge_id)
        {
            string token     = GetShopToken(shop);
            string shopAdmin = string.Format("https://{0}/admin/", shop);

            //FIND OUT IF THE CUSTOMER ACCEPT THE CHARGE OR NOT
            var values = CheckChargeStatus(token, shop, charge_id);

            //UPDATE DETAILS


            //SEE THE STATUS
            if (values.recurring_application_charge.status == "declined")
            {
                //send customer somewere
                return(RedirectToAction("Contact", "Home"));
            }
            else if (values.recurring_application_charge.status == "accepted")
            {
                //save charge id


                //activate charge
                ChargeResult copyValues = values;
                copyValues.recurring_application_charge.confirmation_url = null;

                var active = ActivateCharge(token, shop, charge_id, copyValues);

                if (active == HttpStatusCode.OK)
                {
                    //CUSTOMER ACCEPTED CHARGE GO TO APP
                    return(RedirectToAction("About", "Home"));
                }
                else
                {
                    //fail to actived

                    //send customer to error page
                    return(RedirectToAction("Contact", "Home"));
                }
            }
            else
            {
                return(RedirectToAction("Contact", "Home"));
            }
        }
Exemplo n.º 13
0
        /// <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);
        }
Exemplo n.º 14
0
        private async void Paymentpage_ChargeResult(object sender, ChargeResult e)
        {
            try { await Navigation.PopAsync(); } catch { }
            if (_ticketstatus == null)
            {
                return;
            }
            await DisplayAlert(App.AppName, "Tu compra se realizo con exito, en breve nos pondremos en contacto contigo", "Aceptar");

            if (CrossConnectivity.Current.IsConnected)
            {
                var standarresult = await App.RestClient.Post <StandarResult>($"{App.BaseUrl}/Ticket/UpdateData/{_ticketstatus.TicketNumber}", new Dictionary <string, object>
                {
                    { "verificado", 1 },
                    { "notificacion", 3 }
                });

                if (standarresult != null)
                {
                    if (standarresult.Code == 100)
                    {
                        // se completo la compra
                    }
                    else
                    {
                        // debemos guardar para procesar mas tarde
                    }
                }
            }
            else
            {
                // debemos guardar para procesar despues...
            }

            try { await Navigation.PopAsync(); } catch { }

            CompraContainer.IsVisible = true;
            Progress.IsVisible        = false;
            BtnComprar.IsEnabled      = true;
        }
        public ChargeResult charge(string amount)
        {
            DoDirectPaymentRequestType request = new DoDirectPaymentRequestType();
            request.Version = settings.Version;
            request.DoDirectPaymentRequestDetails = new DoDirectPaymentRequestDetailsType();
            // todo (Huascar) not idea what this value is for us...
            // from here
            request.DoDirectPaymentRequestDetails.IPAddress = "10.244.43.106";
            request.DoDirectPaymentRequestDetails.MerchantSessionId = "1X911810264059026";
            // to here
            request.DoDirectPaymentRequestDetails.PaymentAction = creditCard.PaymentActionCode;
            request.DoDirectPaymentRequestDetails.CreditCard = new CreditCardDetailsType();
            request.DoDirectPaymentRequestDetails.CreditCard.CreditCardNumber = creditCard.CreditCardNumber;

            switch (creditCard.CreditCardType)
            {
                case CreditCardType.Visa:
                    request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.Visa;
                    break;
                case CreditCardType.MasterCard:
                    request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.MasterCard;
                    break;
                case CreditCardType.Discover:
                    request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.Discover;
                    break;
                case CreditCardType.Amex:
                    request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.Amex;
                    break;
            }

            // todo (Huascar) implement the rest....to the point when we call the Paypal api
            ChargeResult result = new ChargeResult();
            return result;
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        public ChargeResult ExportExcel(DateTime?from, DateTime?to, string type = "")
        {
            var rs   = new ChargeResult();
            var data = new List <ChargeItem>();
            var sql  = "";

            if (string.IsNullOrEmpty(type) || type == "card")
            {
                sql += "SELECT b.id AS 'user_id', b.username,b.fullname,'card' as 'type', cardNumber, cardSerial, cp,cardPrice, refNo, tranNo, source, dateCreated FROM [portal].[dbo].a_paycard a inner join [portal].[dbo].user b on a.username=b.id where a.cardPrice > 0";
                if (from != null && to != null)
                {
                    sql += " and a.dateCreated >= '" + from.Value.ToString("yyyy-MM-dd HH:mm:ss") + "' and a.dateCreated <= '" + to.Value.ToString("yyyy-MM-dd HH:mm:ss") + "'";
                }
            }


            if (string.IsNullOrEmpty(type))
            {
                sql += " union all ";
            }

            if (string.IsNullOrEmpty(type) || type == "sms")
            {
                sql += "SELECT b.id AS 'user_id', b.username, b.fullname, 'sms' AS 'type', '' as 'cardNumber','' as 'cardSerial', telco as 'cp',amount as 'cardPrice', '' as 'refNo', '' as 'tranNo', '' as 'source' , responeTime as 'dateCreated' FROM [portal].[dbo].a_smsplus a INNER JOIN [portal].[dbo].user b ON a.targetUser=b.username WHERE amount > 0";
                if (from != null && to != null)
                {
                    sql += " and responeTime >= '" + from.Value.ToString("yyyy-MM-dd HH:mm:ss") + "' and responeTime <= '" + to.Value.ToString("yyyy-MM-dd HH:mm:ss") + "'";
                }
            }


            sql += " ORDER BY dateCreated DESC";

            var conn      = new SqlConnection(Constants.DBConnection);
            var myCommand = new SqlCommand(sql, conn);

            conn.Open();
            var MyReader = myCommand.ExecuteReader();
            var stt      = 1;

            while (MyReader.Read())
            {
                var item1 = new ChargeItem
                {
                    Stt        = stt,
                    uid        = MyReader.GetInt64(MyReader.GetOrdinal("user_id")),
                    username   = MyReader.GetString(MyReader.GetOrdinal("username")),
                    fullname   = MyReader.GetString(MyReader.GetOrdinal("fullname")),
                    type       = MyReader.GetString(MyReader.GetOrdinal("type")),
                    cardNumber = MyReader.GetString(MyReader.GetOrdinal("cardNumber")),
                    cardSerial = MyReader.GetString(MyReader.GetOrdinal("cardSerial")),
                    telco      = MyReader.GetString(MyReader.GetOrdinal("cp")),
                    Price      = MyReader.GetInt64(MyReader.GetOrdinal("cardPrice")),
                    refNo      = MyReader.GetString(MyReader.GetOrdinal("refNo")),
                    tranNo     = MyReader.GetString(MyReader.GetOrdinal("tranNo")),
                    source     = MyReader.GetString(MyReader.GetOrdinal("source")),
                    time       = MyReader.GetDateTime(MyReader.GetOrdinal("dateCreated"))
                };
                item1.timeString = item1.time.ToString("dd-MM-yyyy");

                data.Add(item1);
                stt++;
            }
            MyReader.Close();

            rs.data = data;
            return(rs);
        }
Exemplo n.º 18
0
        /// <summary>
        /// Danh sách user nạp thẻ, sms
        /// </summary>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="skip"></param>
        /// <param name="take"></param>
        /// <returns></returns>
        public ChargeResult GetCharged(DateTime from, DateTime to, int skip, int take)
        {
            var             rs          = new ChargeResult();
            var             data        = new List <ChargeItem>();
            int             totalRecord = 0;
            string          sql         = "SELECT b.id AS 'user_id', b.username,b.fullname,'card' as 'type', cardNumber, cardSerial, cp,cardPrice, refNo, tranNo, source, dateCreated FROM portal.a_paycard a inner join portal.user b on a.username=b.id where a.cardPrice > 0 and a.dateCreated >= @date1 and dateCreated <= @date2 union all SELECT b.id AS 'user_id', b.username, b.fullname, 'sms' AS 'type', '' as 'cardNumber','' as 'cardSerial', telco as 'cp',amount as 'cardPrice', '' as 'refNo', '' as 'tranNo', '' as 'source' , responeTime as 'dateCreated' FROM portal.a_smsplus a INNER JOIN portal.user b ON a.targetUser=b.username WHERE amount > 0 AND a.responeTime >= @date3 AND a.responeTime <= @date4 ORDER BY dateCreated DESC LIMIT @skip, @take";
            MySqlConnection conn        = new MySqlConnection(Constants.DBConnection);
            MySqlCommand    MyCommand   = new MySqlCommand(sql, conn);

            MyCommand.Parameters.AddWithValue("date1", from.ToString(Constants.DateFormat));
            MyCommand.Parameters.AddWithValue("date2", to.ToString(Constants.DateFormat));
            MyCommand.Parameters.AddWithValue("date3", from.ToString(Constants.DateFormat));
            MyCommand.Parameters.AddWithValue("date4", to.ToString(Constants.DateFormat));
            MyCommand.Parameters.AddWithValue("skip", skip);
            MyCommand.Parameters.AddWithValue("take", take);
            MySqlDataReader MyReader;

            conn.Open();
            MyReader = MyCommand.ExecuteReader();
            int stt = 1;

            while (MyReader.Read())
            {
                ChargeItem item1 = new ChargeItem();
                item1.Stt        = stt;
                item1.uid        = MyReader.GetInt64("user_id");
                item1.username   = MyReader.GetString("username");
                item1.fullname   = MyReader.GetString("fullname");
                item1.type       = MyReader.GetString("type");
                item1.cardNumber = MyReader.GetString("cardNumber");
                item1.cardSerial = MyReader.GetString("cardSerial");
                item1.telco      = MyReader.GetString("cp");
                item1.Price      = MyReader.GetInt64("cardPrice");
                item1.refNo      = MyReader.GetString("refNo");
                item1.tranNo     = MyReader.GetString("tranNo");
                item1.source     = MyReader.GetString("source");
                item1.time       = MyReader.GetDateTime("dateCreated");
                item1.timeString = item1.time.ToString("dd-MM-yyyy");

                data.Add(item1);
                stt++;
            }
            MyReader.Close();
            sql       = "Select count(*) as totalRecord from portal.a_paycard where cardPrice > 0 and dateCreated >= @date1 and dateCreated <= @date2";
            MyCommand = new MySqlCommand(sql, conn);
            MyCommand.Parameters.AddWithValue("date1", from.ToString(Constants.DateFormat));
            MyCommand.Parameters.AddWithValue("date2", to.ToString(Constants.DateFormat));
            MyReader = MyCommand.ExecuteReader();
            while (MyReader.Read())
            {
                totalRecord += MyReader.GetInt32("totalRecord");
            }
            MyReader.Close();
            sql       = "Select count(*) as totalRecord from portal.a_smsplus WHERE amount > 0 AND responeTime >= @date3 AND responeTime <= @date4";
            MyCommand = new MySqlCommand(sql, conn);
            MyCommand.Parameters.AddWithValue("date3", from.ToString(Constants.DateFormat));
            MyCommand.Parameters.AddWithValue("date4", to.ToString(Constants.DateFormat));
            MyReader = MyCommand.ExecuteReader();
            while (MyReader.Read())
            {
                totalRecord += MyReader.GetInt32("totalRecord");
            }
            MyReader.Close();
            conn.Close();
            rs.data        = data;
            rs.totalRecord = totalRecord;
            return(rs);
        }
Exemplo n.º 19
0
        public ChargeResult GetAll(string type = "", string username = "", int currentRecord = 0, int numberRecord = 10)
        {
            var rs          = new ChargeResult();
            var data        = new List <ChargeItem>();
            var totalRecord = 0;
            var sql         = "";

            if (string.IsNullOrEmpty(type) || type == "card")
            {
                sql += "SELECT b.id AS 'user_id', b.username,b.fullname,'card' as 'type', cardNumber, cardSerial, cp,cardPrice, refNo, tranNo, source, dateCreated FROM [portal].[dbo].a_paycard a inner join [portal].[dbo].user b on a.username=b.id where a.cardPrice > 0";
                if (!string.IsNullOrEmpty(username))
                {
                    sql += " and b.username like '%" + username + "%' ";
                }
            }

            if (string.IsNullOrEmpty(type))
            {
                sql += " union all ";
            }

            if (string.IsNullOrEmpty(type) || type == "sms")
            {
                sql += "SELECT b.id AS 'user_id', b.username, b.fullname, 'sms' AS 'type', '' as 'cardNumber','' as 'cardSerial', telco as 'cp',amount as 'cardPrice', '' as 'refNo', '' as 'tranNo', '' as 'source' , responeTime as 'dateCreated' FROM [portal].[dbo].a_smsplus a INNER JOIN [portal].[dbo].user b ON a.targetUser=b.username WHERE amount > 0";
                if (!string.IsNullOrEmpty(username))
                {
                    sql += " and b.username like '%" + username + "%' ";
                }
            }

            sql += " ORDER BY dateCreated DESC OFFSET @skip ROWS FETCH NEXT @take ROWS ONLY";

            var conn      = new SqlConnection(Constants.DBConnection);
            var myCommand = new SqlCommand(sql, conn);

            myCommand.Parameters.AddWithValue("skip", currentRecord);
            myCommand.Parameters.AddWithValue("take", numberRecord);
            conn.Open();
            var MyReader = myCommand.ExecuteReader();
            var stt      = 1;

            while (MyReader.Read())
            {
                var item1 = new ChargeItem
                {
                    Stt        = stt,
                    uid        = MyReader.GetInt64(MyReader.GetOrdinal("user_id")),
                    username   = MyReader.GetString(MyReader.GetOrdinal("username")),
                    fullname   = MyReader.GetString(MyReader.GetOrdinal("fullname")),
                    type       = MyReader.GetString(MyReader.GetOrdinal("type")),
                    cardNumber = MyReader.GetString(MyReader.GetOrdinal("cardNumber")),
                    cardSerial = MyReader.GetString(MyReader.GetOrdinal("cardSerial")),
                    telco      = MyReader.GetString(MyReader.GetOrdinal("cp")),
                    Price      = MyReader.GetInt64(MyReader.GetOrdinal("cardPrice")),
                    refNo      = MyReader.GetString(MyReader.GetOrdinal("refNo")),
                    tranNo     = MyReader.GetString(MyReader.GetOrdinal("tranNo")),
                    source     = MyReader.GetString(MyReader.GetOrdinal("source")),
                    time       = MyReader.GetDateTime(MyReader.GetOrdinal("dateCreated"))
                };
                item1.timeString = item1.time.ToString("dd-MM-yyyy");

                data.Add(item1);
                stt++;
            }
            MyReader.Close();
            sql = "Select count(*) as totalRecord from [portal].[dbo].a_paycard where cardPrice > 0";
            if (!String.IsNullOrEmpty(username))
            {
                sql += " and username like '%" + username + "%' ";
            }
            myCommand = new SqlCommand(sql, conn);
            MyReader  = myCommand.ExecuteReader();
            while (MyReader.Read())
            {
                totalRecord += MyReader.GetInt32(MyReader.GetOrdinal("totalRecord"));
            }
            MyReader.Close();
            sql = "Select count(*) as totalRecord from [portal].[dbo].a_smsplus WHERE amount > 0";
            if (!String.IsNullOrEmpty(username))
            {
                sql += " and targetUser like '%" + username + "%' ";
            }
            myCommand = new SqlCommand(sql, conn);
            MyReader  = myCommand.ExecuteReader();
            while (MyReader.Read())
            {
                totalRecord += MyReader.GetInt32(MyReader.GetOrdinal("totalRecord"));
            }
            MyReader.Close();
            conn.Close();
            rs.data        = data;
            rs.totalRecord = totalRecord;
            return(rs);
        }
Exemplo n.º 20
0
        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);
        }
Exemplo n.º 21
0
        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);
        }
Exemplo n.º 22
0
        public virtual void ChangeOrderStatus(ChargeOrder order, ChargeResult result, bool needCallBack = false)
        {
            lock (o)
            {
                int beforeStaus = order.Status;
                using (chargebitEntities db = new chargebitEntities())
                {
                    Charge_Order cOrder = (from o in db.Charge_Order where o.Id == order.Id select o).FirstOrDefault <Charge_Order>();
                    if (cOrder != null)
                    {
                        switch (result.Status)
                        {
                        case ChargeStatus.ONPROGRESS:
                            cOrder.Out_Order_Id = order.OutOrderId;
                            cOrder.Status       = 1;
                            cOrder.Message      = result.Message;
                            order.Status        = 1;
                            break;

                        case ChargeStatus.SUCCEED:
                            if (string.IsNullOrEmpty(cOrder.Out_Order_Id))
                            {
                                cOrder.Out_Order_Id = order.OutOrderId;
                            }
                            cOrder.Status         = 2;
                            order.Status          = 2;
                            cOrder.Message        = result.Message + ",落地充值成功";
                            cOrder.Out_Order_Id   = order.OutOrderId;
                            cOrder.Completed_Time = KMBit.Util.DateTimeUtil.ConvertDateTimeToInt(DateTime.Now);
                            //remove qrcode picture
                            RemoveQRCode(cOrder);
                            break;

                        case ChargeStatus.FAILED:
                            if (string.IsNullOrEmpty(cOrder.Out_Order_Id))
                            {
                                cOrder.Out_Order_Id = order.OutOrderId;
                            }
                            order.Status          = 3;
                            cOrder.Status         = 3;
                            cOrder.Completed_Time = KMBit.Util.DateTimeUtil.ConvertDateTimeToInt(DateTime.Now);
                            //Refound the money
                            if (cOrder.Agent_Id > 0)
                            {
                                Users agency = (from u in db.Users where u.Id == cOrder.Agent_Id select u).FirstOrDefault <Users>();
                                if (agency != null)
                                {
                                    //marketing scan, no need to refound, just re-enable the scan
                                    if (cOrder.MarketOrderId == 0)
                                    {
                                        cOrder.Message           = result.Message + ",充值订单金额:" + cOrder.Purchase_price + "已经退回代理商账户";
                                        agency.Remaining_amount += cOrder.Purchase_price;
                                        cOrder.Refound           = true;
                                        db.SaveChanges();
                                    }
                                    else
                                    {
                                        //no need to refound for scanning
                                        cOrder.Message = result.Message + ",二维码可以重复扫码使用直到充值成功";
                                        cOrder.Refound = false;
                                        Marketing_Orders mOrder = (from mo in db.Marketing_Orders where mo.Id == cOrder.MarketOrderId select mo).FirstOrDefault <Marketing_Orders>();
                                        if (mOrder != null)
                                        {
                                            mOrder.Used = false;
                                            db.SaveChanges();
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (cOrder.Operate_User > 0)
                                {
                                    cOrder.Message = result.Message + ",管理员后台充值,无需退款";
                                }
                                else
                                {
                                    cOrder.Message = result.Message + ",用户前台直充失败,需要手动退款给用户";
                                }
                            }

                            break;
                        }

                        db.SaveChanges();
                        if (needCallBack && beforeStaus == 1 && cOrder.Received == false && cOrder.PushedTimes < 4)
                        {
                            this.SendStatusBackToAgentCallback(cOrder);
                        }
                    }
                }
            }
        }
Exemplo n.º 23
0
        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!");
            }
        }
Exemplo n.º 24
0
        public static void ProcessOrders()
        {
            logger.Info("Going to process orders...");
            chargebitEntities db = null;

            try
            {
                List <Charge_Order> orders = null;
                db = new chargebitEntities();
                db.Configuration.AutoDetectChangesEnabled = true;
                if (resources == null)
                {
                    resources = (from r in db.Resource where r.Enabled == true select r).ToList <Resource>();
                }
                if (resourceAPIs == null)
                {
                    resourceAPIs = (from r in db.Resrouce_interface select r).ToList <Resrouce_interface>();
                }
                lock (o)
                {
                    logger.Info("Last Max Order Id:" + lastOrderId);
                    orders = (from o in db.Charge_Order where o.Id > lastOrderId && ((o.Payed == true && o.Charge_type == 0 && o.Status == 10) || (o.Charge_type == 1 && o.Status != 3 && o.Status != 2) || (o.Charge_type == 2 && o.Status != 3 && o.Status != 2)) orderby o.Charge_type ascending orderby o.Id ascending select o).ToList <Charge_Order>();
                    logger.Info(string.Format("Get {0} unprocessed orders", orders.Count));
                    if (orders.Count == 0)
                    {
                        logger.Info("No unprocessed orders, thread will exit!");
                        return;
                    }

                    lastOrderId = (from o in orders select o.Id).Max();
                    logger.Info("Max Order Id updated to:" + lastOrderId);
                }

                List <int>   agentIds = (from o in orders where o.Agent_Id > 0 select o.Agent_Id).ToList <int>();
                List <Users> agents   = new List <Users>();
                if (agentIds != null && agentIds.Count > 0)
                {
                    int[] ids = agentIds.ToArray <int>();
                    agents = (from u in db.Users where ids.Contains(u.Id) select u).ToList <Users>();
                }
                List <Charge_Order> frontEndOrders = (from o in orders where o.Payed == true && o.Charge_type == 0 && o.Status == 10 select o).ToList <Charge_Order>();
                List <Charge_Order> agentOrders    = (from o in orders where o.Charge_type == 1 && o.Status != 3 && o.Status != 2 select o).ToList <Charge_Order>();
                List <Charge_Order> backendOrders  = (from o in orders where o.Charge_type == 2 && o.Status != 3 && o.Status != 2 select o).ToList <Charge_Order>();
                //logger.Info(string.Format("{0} unprocessed frontend orders", frontEndOrders.Count));
                //logger.Info(string.Format("{0} unprocessed agent orders", agentOrders.Count));
                //logger.Info(string.Format("{0} unprocessed backend orders", backendOrders.Count));
                ChargeResult result = null;
                logger.Info("");
                foreach (Charge_Order corder in orders)
                {
                    Resource           resource    = (from r in resources where r.Id == corder.Resource_id select r).FirstOrDefault <Resource>();
                    Resrouce_interface resourceAPI = null;
                    if (resource != null)
                    {
                        resourceAPI = (from api in resourceAPIs where api.Resource_id == corder.Resource_id select api).FirstOrDefault <Resrouce_interface>();
                    }
                    logger.Info(string.Format("Processing order Id-{0}, Phone-{1}, Agent-{2}, ChargeType-{3}", corder.Id.ToString(), corder.Phone_number, corder.Agent_Id, corder.Charge_type));
                    ChargeOrder order = new ChargeOrder()
                    {
                        Payed            = corder.Payed,
                        ChargeType       = corder.Charge_type,
                        AgencyId         = corder.Agent_Id,
                        OperateUserId    = corder.Operate_User,
                        Id               = corder.Id,
                        Province         = corder.Province,
                        City             = corder.City,
                        MobileSP         = corder.MobileSP,
                        MobileNumber     = corder.Phone_number,
                        OutOrderId       = "",
                        ResourceId       = 0,
                        ResourceTaocanId = corder.Resource_taocan_id,
                        RouteId          = corder.RuoteId,
                        CreatedTime      = corder.Created_time
                    };

                    result = cb.Charge(order);
                    Users agent = (from u in agents where corder.Agent_Id > 0 && corder.Agent_Id == u.Id select u).FirstOrDefault <Users>();
                    logger.Info("Order status - " + order.Status);

                    //just for Synchronized resources
                    if (!string.IsNullOrEmpty(corder.CallBackUrl) && corder.Agent_Id > 0 &&
                        agent != null &&
                        resourceAPI != null &&
                        (resourceAPI.Synchronized == true || result.Status == ChargeStatus.FAILED)
                        )
                    {
                        logger.Info("Synchronized resource api or failed resource api submission.");
                        //send back the status to agent system
                        NameValueCollection col = new NameValueCollection();
                        SortedDictionary <string, string> param = new SortedDictionary <string, string>();
                        param.Add("OrderId", corder.Id.ToString());
                        param.Add("ClientOrderId", corder.Client_Order_Id != null?corder.Client_Order_Id.ToString():"");
                        param.Add("Message", result.Message);
                        param.Add("Status", result.Status.ToString());
                        string querystr = "";
                        foreach (KeyValuePair <string, string> p in param)
                        {
                            col.Add(p.Key, p.Value != null ? p.Value : "");
                            if (querystr == "")
                            {
                                querystr = p.Key + "=" + (p.Value != null ? p.Value : "");
                            }
                            else
                            {
                                querystr += "&" + p.Key + "=" + (p.Value != null ? p.Value : "");
                            }
                        }
                        logger.Info(string.Format("Post data to callback url - {0}", corder.CallBackUrl));
                        logger.Info(string.Format("Data - {0}", querystr));
                        querystr += "&key=" + agent.SecurityStamp;
                        string sign = UrlSignUtil.GetMD5(querystr);
                        col.Add("Sign", sign);
                        //logger.Info("sign=" + sign);
                        string resStr = HttpSercice.PostHttpRequest(corder.CallBackUrl, col, WeChat.Adapter.Requests.RequestType.POST, null);
                        if (resStr == null)
                        {
                            corder.PushedTimes += 1;
                            corder.Received     = true;
                        }
                        else if (resStr.ToLower() == "fail")
                        {
                            corder.PushedTimes += 1;
                            corder.Received     = false;
                        }
                        db.SaveChanges();
                    }
                    logger.Info(string.Format("Order ID:{2} - {0} - {1}", result.Status, result.Message, corder.Id));
                    logger.Info("");
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
            finally
            {
                if (db != null)
                {
                    db.Dispose();
                }
            }
        }
Exemplo n.º 25
0
        // GET: PayBack此方法仅供直冲用户支付宝支付完成回调以及支付宝充值账户回调
        public ActionResult AlipayBack()
        {
            SortedDictionary <string, string> sPara = GetRequestGet();
            ChargeResult result = new ChargeResult()
            {
                Status = ChargeStatus.FAILED
            };

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                AlipayConfig config       = new AlipayConfig(System.IO.Path.Combine(Request.PhysicalApplicationPath, "Config\\AliPayConfig.xml"));
                Notify       aliNotify    = new Notify(config);
                bool         verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);

                if (verifyResult)//验证成功
                {
                    //本地系统支付号
                    string out_trade_no = Request.QueryString["out_trade_no"];
                    int    paymentId    = 0;
                    int.TryParse(out_trade_no, out paymentId);

                    //支付宝交易号
                    string trade_no = Request.QueryString["trade_no"];

                    //买家支付宝账户
                    string buyerAccount = Request.QueryString["buyer_email"];
                    //交易状态
                    string trade_status = Request.QueryString["trade_status"];
                    if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                        OrderManagement   orderMgr = new OrderManagement(0);
                        PaymentManagement payMgr   = new PaymentManagement(0);
                        if (paymentId > 0)
                        {
                            try
                            {
                                BPaymentHistory        payment  = null;
                                int                    total    = 0;
                                List <BPaymentHistory> payments = payMgr.FindPayments(paymentId, 0, 0, out total);
                                if (payments != null && payments.Count == 1)
                                {
                                    payment = payments[0];
                                    if (payment.PayType == 0)//直冲用户支付
                                    {
                                        result         = orderMgr.ProcessOrderAfterPaid(paymentId, trade_no, buyerAccount);
                                        result.Status  = ChargeStatus.SUCCEED;
                                        result.Message = "支付成功,已经提交到充值系统,请耐心等待...";
                                        return(Redirect("/Product/Charge?message=" + result.Message));
                                    }
                                    else if (payment.PayType == 1)//代理商用户充值账户
                                    {
                                        payMgr.UpdateAccountMoneyAfterPayment(payment);
                                        return(Redirect("/Agent/ChargeAccount?message=" + result.Message));
                                    }
                                }
                                else
                                {
                                    result.Status  = ChargeStatus.FAILED;
                                    result.Message = string.Format("支付号{0}在本系统中不存在", paymentId);
                                }
                            }
                            catch (KMBitException e)
                            {
                                result.Message = e.Message;
                                result.Status  = ChargeStatus.FAILED;
                            }
                            catch (Exception ex)
                            {
                                result.Message = ex.Message;
                                result.Status  = ChargeStatus.FAILED;
                            }
                        }
                    }
                    else
                    {
                        result.Message = string.Format("支付宝支付失败:{0}", Request.QueryString["trade_status"]);
                        result.Status  = ChargeStatus.FAILED;

                        //需要删除本地系统内的支付记录或者充值订单记录TBD
                    }
                }
                else//验证失败
                {
                    result.Message = "支付宝返回数据验证失败,请不要串改支付宝返回的数据";
                    result.Status  = ChargeStatus.FAILED;
                    //需要删除本地系统内的支付记录或者充值订单记录TBD
                }
            }
            else
            {
                result.Message = "支付宝没有返回任何数据,充值失败";
                result.Status  = ChargeStatus.FAILED;
            }
            return(Redirect("/Product/Charge?message=" + result.Message));
        }
Exemplo n.º 26
0
        public HttpResponseMessage WeChatPayBack()
        {
            var    resp      = new HttpResponseMessage(HttpStatusCode.OK);
            string returnXML = null;

            logger.Info("PaymentController.WeChatPayBack is being called by Wechat payment notify service.........................");
            Stream stream = Request.InputStream;

            if (stream != null)
            {
                StreamReader rs = null;
                try
                {
                    rs = new StreamReader(stream);
                    string result = rs.ReadToEnd();
                    if (!string.IsNullOrEmpty(result))
                    {
                        logger.Info("Below is the data posted by wechat payment service");
                        logger.Info(result);
                        string paraValues = WeChatPaymentWrapper.ParsePaymentNotifySignParas(result);
                        logger.Info(string.Format("{0} needs to be signed", paraValues));
                        BaseResponse          baseresponse = WeChatPaymentWrapper.ParsePaymentNotify(result);
                        PaymentNotifyResponse response     = null;
                        if (baseresponse != null)
                        {
                            response = (PaymentNotifyResponse)baseresponse;
                        }
                        logger.Info(string.Format("Signature sent by wechat is {0}", response.sign));
                        WeChatPayConfig config = PersistentValueManager.config;
                        paraValues += "&key=" + config.ShopSecret;
                        string sign = UrlSignUtil.GetMD5(paraValues).ToUpper();
                        logger.Info(string.Format("Signature caculated by localsystem is {0}", sign));
                        if (sign != response.sign)
                        {
                            logger.Error("Two signatures are different, the request was not sent by wechat payment system.");
                            returnXML    = "<xml><return_code>FAIL</return_code><return_msg>签名不正确</return_msg></xml>";
                            resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                        }
                        logger.Info("Sign verification passed");
                        OrderManagement   orderMgr = new OrderManagement(0);
                        PaymentManagement payMgr   = new PaymentManagement(0);
                        int paymentId = 0;
                        int.TryParse(response.out_trade_no, out paymentId);
                        if (paymentId > 0)
                        {
                            logger.Info("Going to process payment id" + paymentId);
                            ChargeResult cResult = null;
                            try
                            {
                                BPaymentHistory        payment  = null;
                                int                    total    = 0;
                                List <BPaymentHistory> payments = payMgr.FindUnProcessedOnLinePayments(paymentId, 0, 0, out total);
                                if (payments != null && payments.Count == 1)
                                {
                                    payment = payments[0];
                                    if (payment.PayType == 0)//直冲用户支付
                                    {
                                        logger.Info("OpenId:" + response.openid);
                                        logger.Info("OpenTradeNo:" + response.transaction_id);
                                        cResult = orderMgr.ProcessOrderAfterPaid(paymentId, response.transaction_id, response.openid);
                                        logger.Info(cResult.Status.ToString());
                                        logger.Info(cResult.Message);
                                        if (cResult.Status == ChargeStatus.SUCCEED)
                                        {
                                            logger.Info("The payment status has been successfully synced to local system.");
                                            returnXML    = "<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>";
                                            resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                            return(resp);
                                        }
                                        else
                                        {
                                            logger.Error(cResult.Message);
                                            returnXML    = "<xml><return_code>FAIL</return_code><return_msg>unexpected error</return_msg></xml>";
                                            resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                            return(resp);
                                        }
                                    }
                                }
                                else
                                {
                                    logger.Warn("Didn't find payment by id:" + paymentId);
                                    returnXML    = "<xml><return_code>FAIL</return_code><return_msg>out_trade_no is wrong</return_msg></xml>";
                                    resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                }
                            }
                            catch (KMBitException e)
                            {
                                returnXML    = "<xml><return_code>FAIL</return_code><return_msg>unexpected error</return_msg></xml>";
                                resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                logger.Error(e);
                            }
                            catch (Exception ex)
                            {
                                returnXML    = "<xml><return_code>FAIL</return_code><return_msg>unexpected error</return_msg></xml>";
                                resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                logger.Fatal(ex);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                }
            }
            logger.Info("Done...................");
            return(resp);
        }
Exemplo n.º 27
0
        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);
        }
Exemplo n.º 28
0
 public ServiceRequestResult Charge(Charge request, out ChargeResult result)
 {
     return(ServiceRequest(EventNames.Charge, request, out result));
 }