Ejemplo n.º 1
0
        public PayoutResponse PayoutSubmit(PayoutRequest request)
        {
            var jsonRequest  = Util.JsonOperation.SerializeRequest(request);
            var jsonResponse = _payoutService.Request(jsonRequest);

            return(JsonConvert.DeserializeObject <PayoutResponse>(jsonResponse));
        }
Ejemplo n.º 2
0
        private PayoutResponse ProceedPayout(string authToken, PayoutRequest request)
        {
            var handler = new HttpClientHandler {
                AllowAutoRedirect = false
            };

            using (var httpClient = new HttpClient(handler)
            {
                BaseAddress = new Uri(baseUrl)
            })
            {
                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("authorization", $"Bearer {authToken}");

                var camelCaseSettings = new JsonSerializerSettings
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                };
                var orderSerialized = JsonConvert.SerializeObject(request, Formatting.None, camelCaseSettings);

                using (var content = new StringContent(orderSerialized, Encoding.UTF8, "application/json"))
                    using (var response = httpClient.PostAsync("api/v2_1/payouts/", content).Result)
                    {
                        var responseData = response.Content.ReadAsStringAsync().Result;
                        return(JsonConvert.DeserializeObject <PayoutResponse>(responseData));
                    }
            }
        }
Ejemplo n.º 3
0
 public PayoutResponse PostPayout(PayoutRequest payoutRequest)
 {
     return(this.Process <PayoutResponse>(
                PayUClientUrlBuilder.BuildPayoutsUrl(this.settings.Url, this.settings.ApiVersion),
                HttpMethod.Post,
                payoutRequest));
 }
Ejemplo n.º 4
0
        public void TestPayoutAsCustomer_CreateWithNewBankAccount()
        {
            OpenpayAPI  openpayAPI  = new OpenpayAPI(Constants.API_KEY, Constants.MERCHANT_ID);
            BankAccount bankAccount = new BankAccount();

            bankAccount.CLABE      = "012212000000000019";
            bankAccount.HolderName = "Testing";

            bankAccount = openpayAPI.BankAccountService.Create(customer_id, bankAccount);

            PayoutRequest request = new PayoutRequest();

            request.Method        = "bank_account";
            request.DestinationId = bankAccount.Id;
            request.Amount        = 8.5m;
            request.Description   = "Payout test";
            Payout payout = openpayAPI.PayoutService.Create(customer_id, request);

            Assert.IsNotNull(payout.Id);
            Assert.IsNotNull(payout.CreationDate);
            Assert.IsNotNull(payout.BankAccount);

            Payout payoutGet = openpayAPI.PayoutService.Get(customer_id, payout.Id);

            Assert.AreEqual(payout.Amount, payoutGet.Amount);
            Assert.AreEqual(payout.BankAccount.CLABE, payoutGet.BankAccount.CLABE);

            openpayAPI.BankAccountService.Delete(customer_id, bankAccount.Id);
        }
Ejemplo n.º 5
0
        public void TestPayoutAsMerchant_CreateBankAccount()
        {
            OpenpayAPI  openpayAPI  = new OpenpayAPI(Constants.API_KEY, Constants.MERCHANT_ID);
            BankAccount bankAccount = new BankAccount();

            bankAccount.CLABE      = "012298026516924616";
            bankAccount.HolderName = "Testing";

            PayoutRequest request = new PayoutRequest();

            request.Method      = "bank_account";
            request.BankAccount = bankAccount;
            request.Amount      = 8.5m;
            request.Description = "Payout test";
            Payout payout = openpayAPI.PayoutService.Create(request);

            Assert.IsNotNull(payout.Id);
            Assert.IsNotNull(payout.CreationDate);
            Assert.IsNotNull(payout.BankAccount);

            Payout payoutGet = openpayAPI.PayoutService.Get(payout.Id);

            Assert.AreEqual(payout.Amount, payoutGet.Amount);
            Assert.AreEqual(payout.BankAccount.CLABE, payoutGet.BankAccount.CLABE);
        }
Ejemplo n.º 6
0
        public void TestPayoutAsCustomer_CreateCard()
        {
            OpenpayAPI openpayAPI = new OpenpayAPI(Constants.API_KEY, Constants.MERCHANT_ID);
            Card       card       = new Card();

            card.CardNumber = "4111111111111111";
            card.BankCode   = "002";
            card.HolderName = "Payout User";


            PayoutRequest request = new PayoutRequest();

            request.Method      = "card";
            request.Card        = card;
            request.Amount      = 5.5m;
            request.Description = "Payout test";
            Payout payout = openpayAPI.PayoutService.Create(customer_id, request);

            Assert.IsNotNull(payout.Id);
            Assert.IsNotNull(payout.CreationDate);
            Assert.IsNotNull(payout.Card);
            Assert.IsNull(payout.BankAccount);

            Payout payoutGet = openpayAPI.PayoutService.Get(customer_id, payout.Id);

            Assert.AreEqual(payout.Amount, payoutGet.Amount);
        }
Ejemplo n.º 7
0
 public async Task <PayoutResponse> PostPayoutAsync(PayoutRequest payoutRequest, CancellationToken ct = default(CancellationToken))
 {
     return(await this.ProcessAsync <PayoutResponse>(
                PayUClientUrlBuilder.BuildPayoutsUrl(this.settings.Url, this.settings.ApiVersion),
                HttpMethod.Post,
                ct,
                payoutRequest));
 }
Ejemplo n.º 8
0
        public void PayoutSuccessTest()
        {
            Client         client  = CreateMockTestClientNullRequiredFieldsRequest("Mocks/payout/payout-success.json");
            Payout         payout  = new Payout(client);
            PayoutRequest  request = new PayoutRequest();
            PayoutResponse result  = payout.PayoutSubmit(request);

            Assert.AreEqual("8814689190961342", result.PspReference);
            Assert.AreEqual("12345", result.AuthCode);
        }
Ejemplo n.º 9
0
 public Task <PaymentResponse> RequestPayout(PayoutRequest payoutRequest,
                                             string idempotencyKey = null,
                                             CancellationToken cancellationToken = default)
 {
     CheckoutUtils.ValidateParams("payoutRequest", payoutRequest);
     return(ApiClient.Post <PaymentResponse>(
                PaymentsPath,
                SdkAuthorization(),
                payoutRequest,
                cancellationToken,
                idempotencyKey));
 }
Ejemplo n.º 10
0
    /// <summary>
    /// FROM AP
    /// </summary>
    public static void MarkAsPaid(PayoutRequest request)
    {
        request.IsPaid = true;
        request.Save();

        //Add payment proof
        Member User = new Member(request.Username);

        PaymentProof.Add(User, request);

        //Add history
        History.AddCashout(request.Username, request.Amount);
    }
        public async void PostPayoutAsync_WhenCall_CorrectDeserializedResponse()
        {
            PayoutRequest rq = new PayoutRequest("125533", 4124);

            var result = await this.client.PostPayoutAsync(rq, default(CancellationToken));

            Assert.NotNull(result);
            Assert.NotNull(result.Status);
            Assert.NotNull(result.Payout);
            Assert.False(string.IsNullOrEmpty(result.Payout.Status));
            Assert.False(string.IsNullOrEmpty(result.Payout.PayoutId));
            Assert.NotNull(result.Status);
            Assert.Equal(expectedStatus, result.Status.StatusCode);
        }
Ejemplo n.º 12
0
        public async Task <IActionResult> Withdraw(RequestVM requestVM)
        {
            ApplicationUser user = await _userManager.GetUserAsync(User);

            if (ModelState.IsValid)
            {
                decimal money = await _context.GetBalanceAsync(user.Id);

                if (money >= requestVM.Money)
                {
                    RecipientType recipient = await _context.RecipientTypes.FirstAsync(r => r.ID == requestVM.RecipientTypeID);

                    RecipientSettings recipientSettings = new RecipientSettings
                    {
                        Owner         = user,
                        Receiver      = requestVM.Receiver,
                        RecipientType = recipient
                    };
                    user.DefaultRecipientSettings = recipientSettings;

                    PayoutRequest payoutRequest = new PayoutRequest
                    {
                        Money             = requestVM.Money,
                        RecipientSettings = recipientSettings,
                        Paid = false
                    };
                    await _context.PayoutRequests.AddAsync(payoutRequest);

                    user.RequestedMoney += requestVM.Money;
                    await _context.SaveChangesAsync();
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "You do not have enough money");
                }
            }
            if (!(user.DefaultRecipientSettings is null))
            {
                requestVM.RecipientTypeID = user.DefaultRecipientSettings.ID;
                requestVM.Receiver        = user.Receiver;
            }
            ViewBag.RecipientTypeId = _context.RecipientSettings
                                      .Select(rt => new SelectListItem
            {
                Text  = rt.RecipientType.Name,
                Value = rt.ID.ToString()
            });
            return(View(requestVM));
        }
Ejemplo n.º 13
0
        public void PayoutErrorReferenceTest()
        {
            Client        client  = CreateMockTestClientForErrors(422, "Mocks/payout/payout-error-422.json");
            Payout        payout  = new Payout(client);
            PayoutRequest request = new PayoutRequest();

            try
            {
                payout.PayoutSubmit(request);
            }
            catch (HttpClient.HttpClientException e)
            {
                Assert.IsNotNull(e.ResponseBody);
                Assert.AreEqual(422, e.Code);
            }
        }
        public void TestEmptyConstructorsUsedForMappingFromConfigFile()
        {
            _ = new PaymentRequest();
            _ = new SettleTransactionRequest();
            _ = new VoidTransactionRequest();
            _ = new RefundTransactionRequest();
            _ = new GetPaymentStatusRequest();
            _ = new OpenOrderRequest();
            _ = new InitPaymentRequest();
            _ = new Authorize3dRequest();
            _ = new Verify3dRequest();
            _ = new PayoutRequest();
            _ = new GetCardDetailsRequest();
            _ = new GetMerchantPaymentMethodsRequest();

            Assert.Pass();
        }
Ejemplo n.º 15
0
        private async Task ShouldRequestPayout_IdempotencyKey()
        {
            var payoutRequest   = new PayoutRequest();
            var paymentResponse = new PaymentResponse();

            _apiClient.Setup(apiClient =>
                             apiClient.Post <PaymentResponse>(PaymentsPath, _authorization, payoutRequest,
                                                              CancellationToken.None, "test"))
            .ReturnsAsync(() => paymentResponse);

            IPaymentsClient paymentsClient = new PaymentsClient(_apiClient.Object, _configuration.Object);

            var response = await paymentsClient.RequestPayout(payoutRequest, "test", CancellationToken.None);

            response.ShouldNotBeNull();
            response.ShouldBeSameAs(paymentResponse);
        }
Ejemplo n.º 16
0
        public void MustBePossibleToGetPayouts()
        {
            var config = new MerchantConfig("K500746", "fia'w2ahSheahahc", Server.Playground);

            PayoutRequest req = new PayoutRequest
            {
                CurrencyCode = "EUR",
                EndDate      = DateTime.Now.Date.ToShortDateString(),
                StartDate    = DateTime.Now.Subtract(new TimeSpan(1000, 0, 0, 0)).ToShortDateString(),
                Offset       = 0,
                Size         = 10
            };
            var payoutsGetter = new Payouts();
            var listOfPayouts = payoutsGetter.GetPayouts(req, config);

            Assert.IsNotNull(listOfPayouts);
        }
        public void TestGetAndSetModelPayoutRequest()
        {
            _ = new PayoutRequest(
                merchantInfo,
                sessionToken,
                null,
                null,
                null,
                null,
                new UserPaymentOption {
            })
            {
                Comment  = null,
                UserPmId = "",
                Phone    = ""
            };

            Assert.Pass();
        }
Ejemplo n.º 18
0
        public async Task <PayoutResponse> Payout(
            string userTokenId,
            string clientUniqueId,
            string amount,
            string currency,
            UserPaymentOption userPaymentOption,
            string comment = null,
            DynamicDescriptor dynamicDescriptor = null,
            MerchantDetails merchantDetails     = null,
            UrlDetails urlDetails       = null,
            DeviceDetails deviceDetails = null,
            CardData cardData           = null,
            string userId                 = null,
            string rebillingType          = null,
            string authenticationTypeOnly = null,
            SubMerchant subMerchant       = null,
            Addendums addendums           = null)
        {
            var request = new PayoutRequest(
                merchantInfo,
                sessionToken,
                userTokenId,
                clientUniqueId,
                amount,
                currency,
                userPaymentOption)
            {
                Comment                = comment,
                DynamicDescriptor      = dynamicDescriptor,
                MerchantDetails        = merchantDetails,
                UrlDetails             = urlDetails,
                DeviceDetails          = deviceDetails,
                CardData               = cardData,
                UserId                 = userId,
                RebillingType          = rebillingType,
                AuthenticationTypeOnly = authenticationTypeOnly,
                SubMerchant            = subMerchant,
                Addendums              = addendums
            };

            return(await safechargeRequestExecutor.Payout(request));
        }
Ejemplo n.º 19
0
    public string TryMakePayout()
    {
        ValidatePayout();

        string paymentAddress = PaymentAccountDetails.GetPaymentProcessorUserAccount(user, paymentProcessor);

        var         request     = new TransactionRequest(user.Name, paymentAddress, amountToPayout);
        Transaction transaction = TransactionFactory.CreateTransaction(request, paymentProcessor);
        var         response    = transaction.Commit();

        if (!response.IsSuccess)
        {
            if (request != null && response != null)
            {
                PayoutManager.logPayout("Commission Balance Payout unsuccessful", request, response, paymentProcessor);
            }
            throw new MsgException(response.Note);
        }

        PayoutRequest req = new PayoutRequest();

        req.Amount           = amountToPayout;
        req.IsPaid           = true;
        req.RequestDate      = DateTime.Now;
        req.Username         = user.Name;
        req.IsRequest        = false;
        req.BalanceType      = BalanceType.CommissionBalance;
        req.PaymentAddress   = paymentAddress;
        req.PaymentProcessor = paymentProcessor;
        req.Save();

        user.SubtractFromCommissionBalance(amountToPayout, "Payout");
        user.SaveBalances();

        History.AddCashout(user.Name, amountToPayout);
        PayoutManager.logPayout("Commission Balance Payout successful", request, response, paymentProcessor);
        PaymentProof.Add(user, req);

        return(U3501.AUTOMATICCASHOUTSUCC + ": " + response.Note);
    }
Ejemplo n.º 20
0
        public static void AddPayoutRequest(ref ApplicationDbContext context, decimal money, string ownerId, bool paid)
        {
            RecipientType     recipient         = context.RecipientTypes.First(r => r.ID == 1);
            ApplicationUser   user              = context.Users.First(u => u.Id == ownerId);
            RecipientSettings recipientSettings = new RecipientSettings
            {
                Owner         = user,
                Receiver      = ownerId,
                RecipientType = recipient
            };

            user.DefaultRecipientSettings = recipientSettings;

            PayoutRequest payoutRequest = new PayoutRequest
            {
                Money             = money,
                RecipientSettings = recipientSettings,
                Paid = false
            };

            user.RequestedMoney += money;
        }
Ejemplo n.º 21
0
    /// <summary>
    /// FROM AP
    /// </summary>
    /// <param name="request"></param>
    /// <param name="gateway"></param>
    /// <param name="transaction"></param>
    /// <returns></returns>
    public static bool MakePayout(PayoutRequest request, PaymentAccountDetails gateway, ref Transaction transaction)
    {
        transaction.Commit();
        if (transaction.Response.IsSuccess)
        {
            request.IsPaid    = true;
            request.IsRequest = false;
            request.Save();

            Member User = new Member(request.Username);

            //Add payment proof
            PaymentProof.Add(User, request);

            //Add statistics
            var stats = new Statistics(StatisticsType.Cashflow);
            stats.AddToData2(request.Amount);
            stats.Save();

            //Add history
            History.AddCashout(request.Username, request.Amount);


            if (gateway is PayPalAccountDetails)
            {
                // Log because payment may have response status SuccessWithWarning
                // More on this: https://developer.paypal.com/webapps/developer/docs/classic/api/NVPAPIOverview/
                logPayout("Payout successful", request, transaction.Response, request.PaymentProcessor);
            }

            return(true);
        }
        else
        {
            logPayout("Payout unsuccessful", request, transaction.Response, request.PaymentProcessor);
            return(false);
        }
    }
Ejemplo n.º 22
0
        private async Task ShouldRequestPayout()
        {
            var payoutRequest = new PayoutRequest
            {
                Destination = new PaymentRequestBankAccountDestination
                {
                    AccountType   = AccountType.Cash,
                    AccountNumber = "13654567455",
                    BankCode      = "bank_code",
                    BranchCode    = "6443",
                    Bban          = "3704 0044 0532 0130 00",
                    Iban          = "HU93116000060000000012345676",
                    SwiftBic      = "37040044",
                    Country       = CountryCode.HU,
                    AccountHolder = new AccountHolder {
                        FirstName = "First Name", LastName = "Last Name",
                    },
                    Bank = new BankDetails {
                        Name = "Bank Name", Address = new Address(), Branch = "branch"
                    }
                }
            };
            var payoutResponse = new PayoutResponse();

            _apiClient.Setup(apiClient =>
                             apiClient.Post <PayoutResponse>(PaymentsPath, _authorization, payoutRequest,
                                                             CancellationToken.None, null))
            .ReturnsAsync(() => payoutResponse);

            IPaymentsClient paymentsClient = new PaymentsClient(_apiClient.Object, _configuration.Object);

            var response = await paymentsClient.RequestPayout(payoutRequest, null, CancellationToken.None);

            response.ShouldNotBeNull();
            response.ShouldBeSameAs(payoutResponse);
        }
Ejemplo n.º 23
0
    /// <summary>
    /// FROM AP
    /// </summary>
    /// <param name="request"></param>
    public static void RejectRequest(PayoutRequest request)
    {
        Member User = new Member(request.Username);

        try
        {
            PaymentProcessor processor = PaymentAccountDetails.GetFromStringType(request.PaymentProcessor);
            PaymentProportionsManager.UndoMemberPaidOut(request.Amount, processor, User);
        }
        catch
        {
            //processor = custom processor
        }

        request.IsPaid           = true;
        request.PaymentProcessor = "REJECTED";
        request.Save();

        User.MoneyCashout -= request.Amount;
        User.AddToMainBalance(request.Amount, "Payout rejected");
        User.Save();

        History.AddCashoutRejection(User.Name, request.Amount.ToString());
    }
        private async Task ShouldRequestPayout()
        {
            var phone = new Phone {
                CountryCode = "44", Number = "020 222333"
            };

            var billingAddress = new Address
            {
                AddressLine1 = "CheckoutSdk.com",
                AddressLine2 = "90 Tottenham Court Road",
                City         = "London",
                State        = "London",
                Zip          = "W1T 4TJ",
                Country      = CountryCode.GB
            };

            var requestCardDestination = new PaymentRequestCardDestination
            {
                Name           = TestCardSource.Visa.Name,
                Number         = TestCardSource.Visa.Number,
                FirstName      = "Mr. Test",
                LastName       = "Integration",
                ExpiryYear     = TestCardSource.Visa.ExpiryYear,
                ExpiryMonth    = TestCardSource.Visa.ExpiryMonth,
                BillingAddress = billingAddress,
                Phone          = phone
            };

            var payoutRequest = new PayoutRequest
            {
                Destination      = requestCardDestination,
                FundTransferType = FundTransferType.AA,
                Capture          = false,
                Reference        = Guid.NewGuid().ToString(),
                Amount           = 5,
                Currency         = Currency.USD,
            };

            var paymentResponse = await PreviousApi.PaymentsClient().RequestPayout(payoutRequest);

            paymentResponse.ShouldNotBeNull();

            paymentResponse.Id.ShouldNotBeNullOrEmpty();
            paymentResponse.Reference.ShouldNotBeNullOrEmpty();
            paymentResponse.Status.ShouldBe(PaymentStatus.Pending);
            paymentResponse.ThreeDs.ShouldBeNull();
            //Customer
            paymentResponse.Customer.ShouldNotBeNull();
            paymentResponse.Customer.Id.ShouldNotBeNull();
            paymentResponse.Customer.Name.ShouldBeNull();
            //Links
            paymentResponse.GetSelfLink().ShouldNotBeNull();
            paymentResponse.HasLink("actions").ShouldBeFalse();
            paymentResponse.HasLink("capture").ShouldBeFalse();
            paymentResponse.HasLink("void").ShouldBeFalse();

            var payment = await Retriable(async() =>
                                          await PreviousApi.PaymentsClient().GetPaymentDetails(paymentResponse.Id));

            payment.ShouldNotBeNull();

            // Destination
            payment.Destination.ShouldNotBeNull();
            payment.Destination.ShouldBeAssignableTo(typeof(PaymentResponseCardDestination));
            var paymentResponseCardDestination = (PaymentResponseCardDestination)payment.Destination;

            paymentResponseCardDestination.Bin.ShouldNotBeNull();
            //paymentResponseCardDestination.CardCategory.ShouldBe(CardCategory.Consumer);
            //paymentResponseCardDestination.CardType.ShouldBe(CardType.Credit);
            paymentResponseCardDestination.ExpiryMonth.ShouldBe(6);
            paymentResponseCardDestination.ExpiryYear.ShouldBe(2025);
            paymentResponseCardDestination.Last4.ShouldNotBeNullOrEmpty();
            paymentResponseCardDestination.Fingerprint.ShouldNotBeNullOrEmpty();
            paymentResponseCardDestination.Name.ShouldNotBeNullOrEmpty();
            //paymentResponseCardDestination.Issuer.ShouldNotBeNullOrEmpty();
            //paymentResponseCardDestination.IssuerCountry.ShouldBe(CountryCode.US);
            //paymentResponseCardDestination.ProductId.ShouldNotBeNullOrEmpty();
            //paymentResponseCardDestination.ProductType.ShouldNotBeNullOrEmpty();
            paymentResponseCardDestination.Type().ShouldBe(PaymentDestinationType.Card);
        }
Ejemplo n.º 25
0
    private string TryMakeInstantPayout(Money fee)
    {
        // payoutRequest --> change property to false (it isn't request)
        PayoutRequest req = new PayoutRequest();

        req.Amount      = AmountToPayout - fee;
        req.IsPaid      = true;
        req.RequestDate = DateTime.Now;
        req.Username    = User.Name;
        req.IsRequest   = false;
        req.BalanceType = BalanceType.MainBalance;

        //Check if daily limit is not reached
        if (AppSettings.Payments.GlobalCashoutsToday + AmountToPayout - fee > AppSettings.Payments.GlobalCashoutLimitPerDay)
        {
            throw new MsgException(L1.TOOMANYCASHOUTS + " " + AppSettings.Payments.GlobalCashoutLimitPerDay.ToString());
        }

        //User payment address
        string paymentAddress = PaymentAccountDetails.GetPaymentProcessorUserAccount(User, TargetPaymentProcessor);

        if (String.IsNullOrEmpty(paymentAddress))
        {
            throw new MsgException(U5004.YOUMUST);
        }

        request = new TransactionRequest(User.Name, paymentAddress, AmountToPayout - fee);
        Transaction transaction = TransactionFactory.CreateTransaction(request, TargetPaymentProcessor);

        response = transaction.Commit();

        req.PaymentAddress   = paymentAddress;
        req.PaymentProcessor = TargetPaymentProcessor;

        if (!response.IsSuccess)
        {
            if (request != null && response != null)
            {
                PayoutManager.logPayout("Payout unsuccessful", request, response, req.PaymentProcessor);
            }
            throw new MsgException(response.Note);
        }

        req.Save();

        History.AddCashout(User.Name, AmountToPayout);

        User.SubtractFromMainBalance(AmountToPayout, "Payout");
        User.MoneyCashout += AmountToPayout - fee;
        User.IsPhoneVerifiedBeforeCashout = false;
        User.CashoutsProceed++;
        User.Save();

        //Update payout proportions
        PaymentProportionsManager.MemberPaidOut(AmountToPayout - fee, PaymentAccountDetails.GetFromStringType(TargetPaymentProcessor), User, IsCustomPayoutProcessor);

        //Add to daily cashout
        AppSettings.Payments.GlobalCashoutsToday += AmountToPayout - fee;
        AppSettings.Payments.Save();

        //Add outcome to stats (Data2);
        var stats = new Statistics(StatisticsType.Cashflow);

        stats.AddToData2(AmountToPayout);
        stats.Save();

        //Add paymentproof
        PaymentProof.Add(User.Id, AmountToPayout, PaymentType.Instant, PaymentAccountDetails.GetFromStringType(TargetPaymentProcessor));

        // Log because payment may have response status SuccessWithWarning
        // More on this: https://developer.paypal.com/webapps/developer/docs/classic/api/NVPAPIOverview/
        logPayout("Payout successful", request, response, req.PaymentProcessor);

        return(U3501.AUTOMATICCASHOUTSUCC + ": " + response.Note);
    }
Ejemplo n.º 26
0
    private string TryMakeManualPayout(Money fee)
    {
        //Manual, add to payoutrequests
        PayoutRequest req = new PayoutRequest();

        //Calculate fees for CustomPP
        Money Fees = fee;

        if (IsCustomPayoutProcessor)
        {
            CustomPayoutProcessor CPP = new CustomPayoutProcessor(CustomPayoutProcessorId);
            Fees = Fees + CPP.MoneyFee;
            Fees = Fees + (AmountToPayout * (CPP.PercentageFee * new Money(0.01)));

            if (string.IsNullOrWhiteSpace(TargetAccount))
            {
                throw new MsgException(U4200.ACCOUNTFIELDNOTBLANK);
            }
        }

        req.Amount      = AmountToPayout - Fees;
        req.IsPaid      = false;
        req.RequestDate = DateTime.Now;
        req.Username    = User.Name;
        req.IsRequest   = true;
        req.BalanceType = BalanceType.MainBalance;

        if (IsCustomPayoutProcessor)
        {
            //CustomPP
            CustomPayoutProcessor CPP = new CustomPayoutProcessor(CustomPayoutProcessorId);
            req.PaymentAddress   = TargetAccount;
            req.PaymentProcessor = CPP.Name;

            //MPesa check
            if (CPP.Name.ToLower() == "mpesa" && (TargetAccount.Length != 10 || !TargetAccount.StartsWith("07")))
            {
                throw new MsgException("Check your phone number format. The number should be 07******** (10 length)");
            }
        }
        else
        {
            string paymentAddress = PaymentAccountDetails.GetPaymentProcessorUserAccount(User, TargetPaymentProcessor);

            if (String.IsNullOrEmpty(paymentAddress))
            {
                throw new MsgException(U5004.YOUMUST);
            }

            if (TargetPaymentProcessor == "Payeer" && paymentAddress.Contains("@"))
            {
                throw new MsgException(U6006.VALIDPAYEER);
            }

            req.PaymentAddress   = paymentAddress;
            req.PaymentProcessor = TargetPaymentProcessor;
        }

        req.Save();

        User.SubtractFromMainBalance(AmountToPayout, "Payout");
        User.MoneyCashout += (AmountToPayout - Fees);
        User.IsPhoneVerifiedBeforeCashout = false;
        User.CashoutsProceed++;
        User.Save();

        //Update payout proportions
        if (!IsCustomPayoutProcessor)
        {
            PaymentProportionsManager.MemberPaidOut(AmountToPayout - Fees, PaymentAccountDetails.GetFromStringType(TargetPaymentProcessor), User, IsCustomPayoutProcessor);
        }

        if (IsAutomaticButAvoveTheLimit)
        {
            return(U3501.CASHOUTSUCC + ": " + U3500.CASHOUT_APPROVE.Replace("%n%", TheLimit.ToString()));
        }
        else
        {
            return(U3501.CASHOUTSUCC + ": " + U3500.CASHOUT_MESSAGE.Replace("%n1%", (AmountToPayout - Fees).ToString()).Replace("%n2%", Fees.ToString()));
        }
    }
Ejemplo n.º 27
0
    protected void WithdrawHistoryGridView_RowEditing(object sender, GridViewEditEventArgs e)
    {
        int id = (int)WithdrawHistoryGridView.DataKeys[e.NewEditIndex].Value;

        EditedPayoutRequest = new PayoutRequest(id);
    }
Ejemplo n.º 28
0
        private async Task ShouldMakeCardPayoutPayments()
        {
            PayoutRequest request = new PayoutRequest
            {
                Source = new PayoutRequestCurrencyAccountSource {
                    Id = "ca_qcc7x4nxxk6efeogm7yczdnsxu"
                },
                Destination =
                    new PaymentRequestCardDestination
                {
                    Number        = "5219565036325411",
                    ExpiryMonth   = 12,
                    ExpiryYear    = 2024,
                    AccountHolder = new AccountHolder
                    {
                        Type           = AccountHolderType.Individual,
                        FirstName      = "Jhon",
                        LastName       = "Smith",
                        DateOfBirth    = "1939-05-05",
                        CountryOfBirth = CountryCode.FR,
                        BillingAddress =
                            new Address
                        {
                            AddressLine1 = "Checkout",
                            AddressLine2 = "Shepherdless Walk",
                            City         = "London",
                            Zip          = "N17BQ",
                            Country      = CountryCode.GB
                        },
                        Phone = new Phone {
                            CountryCode = "44", Number = "09876512412"
                        },
                        Identification = new AccountHolderIdentification
                        {
                            Type           = AccountHolderIdentificationType.Passport,
                            Number         = "E2341",
                            IssuingCountry = CountryCode.FR,
                            DateOfExpiry   = "2024-05-05"
                        },
                        Email = "*****@*****.**"
                    }
                },
                Amount            = 10,
                Currency          = Currency.EUR,
                Reference         = "Pay-out to Card - Money Transfer",
                BillingDescriptor = new PayoutBillingDescriptor {
                    Reference = "Pay-out to Card - Money Transfer"
                },
                Sender = new PaymentIndividualSender
                {
                    FirstName = "Hayley",
                    LastName  = "Jones",
                    Address   = new Address
                    {
                        AddressLine1 = "Checkout",
                        AddressLine2 = "Shepherdless Walk",
                        City         = "London",
                        Zip          = "N17BQ",
                        Country      = CountryCode.GB
                    },
                    Reference     = "1234567ABCDEFG",
                    ReferenceType = "other",
                    DateOfBirth   = "1939-05-05",
                    SourceOfFunds = SourceOfFunds.Credit,
                },
                Instruction = new PaymentInstruction
                {
                    Purpose = "pension", FundsTransferType = "C07", Mvv = "0123456789"
                },
                ProcessingChannelId = "pc_q727c4x6vtwujbiys3bb7wjpaa"
            };

            PayoutResponse response = await DefaultApi.PaymentsClient().RequestPayout(request);

            response.ShouldNotBeNull();
            response.Id.ShouldNotBeNull();
            response.Status.ShouldNotBeNull();
            response.Instruction.ShouldNotBeNull();
            response.Instruction.ValueDate.ShouldNotBeNull();
        }
 public async Task <RefundResponse> PayoutAsync(PayoutRequest request)
 {
     return(await RequestAsync <PayoutRequest, RefundResponse>(request));
 }
Ejemplo n.º 30
0
    public static void CRON()
    {
        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            //0. RevenueShareAdsWatched yesterday
            string RevenueShareAdsWatchedCommand = @"
            UPDATE Users 
            SET RevenueShareAdsWatchedYesterday = (
            CASE WHEN Users.RSAAdsViewed = '-1'
            THEN -1
            ELSE len(Users.RSAAdsViewed) - len(replace(Users.RSAAdsViewed, '#', ''))
            END
            ) + 1
            ";
            bridge.Instance.ExecuteRawCommandNonQuery(RevenueShareAdsWatchedCommand);
        }

        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            //1. Credit new Referral Reward
            CreditForNewReferrals();

            //2. Delete watched ads & TrafficGrid and other
            string resetDailyStatsCommand = "UPDATE Users SET " + Member.Columns.ViewedAds + " = '-1', "
                                            + Member.Columns.TrafficGridHitsToday + " = 0, PointsToday = 0, PointsCreditedForVideoToday = 0, PointsCreditedForSearchToday = 0, CPACompletedToday = 0, CompletedDailyCPAOffersToday = '-1', CompletedOffersFromOfferwallsToday = 0, MatrixBonusMoneyCyclesToday = 0, CompletedOffersMoreThan100pFromOfferwallsToday = 0, FbLikesToday = 0";

            if (AppSettings.RevShare.DistributionTime != DistributionTimePolicy.EveryWeek ||
                AppSettings.ServerTime.DayOfWeek == AppSettings.RevShare.DayOfWeekDistribution)
            {
                resetDailyStatsCommand += ", RSAAdsViewed = '-1'";
            }

            bridge.Instance.ExecuteRawCommandNonQuery(resetDailyStatsCommand);
        }

        //3. Recalculate Statistics
        RecalculateStatistics(Member.Columns.StatsEarned, true);
        RecalculateStatistics(Member.Columns.StatsClicks, false);
        RecalculateStatistics(Member.Columns.UserClicksStats, false);
        RecalculateStatistics("RawDirectReferralsClicks", false);
        RecalculateStatistics("RawRentedReferralsClicks", false);
        RecalculateStatistics("StatsDirectReferralsEarned", true);
        RecalculateStatistics("StatsPointsEarned", false);
        RecalculateStatistics("StatsDirectReferralsPointsEarned", false);
        RecalculateStatistics("StatsDRAdPacksEarned", true);
        RecalculateStatistics("StatsCashLinksEarned", true);
        RecalculateStatistics("StatsDRCashLinksEarned", true);

        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            //4. Mark inactive ones
            string Command = string.Format(@"UPDATE Users SET {0} = {2}, AccountStatus = 'Expired'
            WHERE Username <> 'admin'
            AND {0} = {3} 
            AND (
		            (
			            (LastLoginDate IS NOT NULL 
			            AND DATEADD (day, {1}, LastLoginDate) < GETDATE()) 
		            OR 
			            (LastLoginDate IS NULL 
			            AND DATEADD (day, {1}, RegisterDate) < GETDATE())
		            )
	            AND (
			            (VacationModeEnds IS NULL) 
		            OR 
			            (DATEADD (day, {1}, VacationModeEnds) < GETDATE())
		            )
            )", "AccountStatusInt", AppSettings.Misc.DaysToInactivity, (int)MemberStatus.Expired, (int)MemberStatus.Active);

            bridge.Instance.ExecuteRawCommandNonQuery(Command);


            //5. Upgrade expiration
            var upgradeExpiredMembersQuery = "SELECT * FROM Users WHERE UpgradeExpires IS NOT NULL AND UpgradeExpires < GETDATE()";
            var upgradeExpiredMembers      = TableHelper.GetListFromRawQuery <Member>(upgradeExpiredMembersQuery);
            foreach (Member user in upgradeExpiredMembers)
            {
                DateTime membershipExpires = (DateTime)user.MembershipExpires;
                var      dateWhenReferralsWillBeResolved = membershipExpires.AddDays(AppSettings.Referrals.ResolveReferralsAfterSpecifiedDays);

                if (dateWhenReferralsWillBeResolved <= DateTime.Now)
                {
                    user.ResolveReferralsLimitDate = null;
                    user.Downgrade();
                }
                else
                {
                    user.ResolveReferralsLimitDate = dateWhenReferralsWillBeResolved;
                    user.Downgrade(false);
                }
                History.AddUpgradeExpiration(user.Name, user.MembershipName);
            }

            var usersWhoCouldHaveTooManyReferralsQuery = string.Format("SELECT * FROM {0} WHERE {1} IS NOT NULL AND {1} <= GETDATE()",
                                                                       Member.TableName, Member.Columns.ResolveReferralsLimitDate, AppSettings.Referrals.ResolveReferralsAfterSpecifiedDays);
            var usersWhoCouldHaveTooManyReferrals = TableHelper.GetListFromRawQuery <Member>(usersWhoCouldHaveTooManyReferralsQuery);
            foreach (var user in usersWhoCouldHaveTooManyReferrals)
            {
                user.ResolveReferralsLimitDate = null;
                user.SaveMembership();
                user.ResolveReferralLimits(user.Membership);
            }

            DateTime DateNow = DateTime.Now;

            //6 Vacation mode expiration
            string VacationModeExpiredCommand = "UPDATE Users SET LastActivityTime = GETDATE(), AccountStatusInt = " + (int)MemberStatus.Active + ", AccountStatus = 'Active' WHERE VacationModeEnds IS NOT NULL AND VacationModeEnds < GETDATE() AND AccountStatusInt = " + (int)MemberStatus.VacationMode;
            bridge.Instance.ExecuteRawCommandNonQuery(VacationModeExpiredCommand);

            //7. RemovalReferrals
            Member.DeleteReferralsCRON();

            //8. Inactivity fee:
            if (AppSettings.VacationAndInactivity.InactivityChargePerDay > Money.Zero)
            {
                try
                {
                    string InactivityUpdateCommand = string.Format("UPDATE Users SET Balance1 = Balance1 - {0}", AppSettings.VacationAndInactivity.InactivityChargePerDay.ToClearString());
                    string InactivitySelectCommand = "SELECT * FROM Users";
                    string InactivityCondition     = string.Format(" WHERE (LastActivityTime IS NOT NULL AND LastActivityTime < '{0}') AND AccountStatusInt = {1}",
                                                                   DateNow.AddDays(-AppSettings.VacationAndInactivity.DaysToInactivityCharge).ToDBString(), (int)MemberStatus.Active);
                    BalanceLogManager.GlobalMemberAdjustHelper(bridge.Instance, InactivitySelectCommand, InactivityUpdateCommand, InactivityCondition, "Inactivity fee", AppSettings.VacationAndInactivity.InactivityChargePerDay, BalanceLogType.Other);
                }
                catch (Exception ex)
                {
                    ErrorLogger.Log(ex);
                }
            }

            if (DateNow.Day == 1)
            {
                bridge.Instance.ExecuteRawCommandNonQuery("UPDATE Users SET PtcAutoSurfClicksThisMonth = 0;");
            }

            DowngradeMembersLevels();

            //Automatically reject all payout requests from banned members
            //We are doing it to properly calculate 'CheckMaxValueOfPendingRequestsPerDay' for payment processors
            var PayoutRequestsToReject = TableHelper.GetListFromRawQuery <PayoutRequest>(PayoutRequest.GetPayoutRequestsSQLQuery(true));
            foreach (var request in PayoutRequestsToReject)
            {
                PayoutManager.RejectRequest(request);
            }
        }

        //9. Commissions Income Statistics
        //WEEKLY
        if (AppSettings.ServerTime.DayOfWeek == DayOfWeek.Sunday)
        {
            TableHelper.ExecuteRawCommandNonQuery("UPDATE Users SET StatsCommissionsLastWeekIncome = StatsCommissionsCurrentWeekIncome, StatsCommissionsCurrentWeekIncome = 0");
        }
        //MONTHLY
        if (AppSettings.ServerTime.Day == DateTime.DaysInMonth(AppSettings.ServerTime.Year, AppSettings.ServerTime.Month))
        {
            TableHelper.ExecuteRawCommandNonQuery("UPDATE Users SET StatsCommissionsLastMonthIncome = StatsCommissionsCurrentMonthIncome, StatsCommissionsCurrentMonthIncome = 0");
        }
    }