public void ToXml_Includes_DeviceSessionId()
        {
            TransactionRequest request = new TransactionRequest();
            request.DeviceSessionId = "my_dsid";

            Assert.IsTrue(request.ToXml().Contains("my_dsid"));
        }
        public void ToXml_Includes_FraudMerchantId()
        {
            TransactionRequest request = new TransactionRequest();
            request.FraudMerchantId = "my_fmid";

            Assert.IsTrue(request.ToXml().Contains("my_fmid"));
        }
        public void ToXml_InludesPaymentMethodNonce()
        {
            TransactionRequest request = new TransactionRequest();
            request.PaymentMethodNonce = "1232131232";

            Assert.IsTrue(request.ToXml().Contains("1232131232"));
        }
        public void Generate_ReturnsTransactionsSettledOnAGivenDay()
        {
            TransactionRequest request = new TransactionRequest
            {
                Amount = 1000M,
                CreditCard = new TransactionCreditCardRequest
                {
                    Number = "4111111111111111",
                    ExpirationDate = "05/2012",
                    CardholderName = "Tom Smith",
                },
                Options = new TransactionOptionsRequest
                {
                    SubmitForSettlement = true
                },
            };

            Transaction transaction = gateway.Transaction.Sale(request).Target;
            Transaction settlementResult = gateway.TestTransaction.Settle(transaction.Id);
            var settlementDate = settlementResult.SettlementBatchId.Substring(0,10);
            transaction = gateway.Transaction.Find(transaction.Id);
            var result = gateway.SettlementBatchSummary.Generate(System.DateTime.Parse(settlementDate));
            var visas = new List<IDictionary<string,string>>();
            foreach (var row in result.Target.Records)
            {
                if (CreditCardCardType.VISA.ToString().Equals(row["card_type"]))
                {
                    visas.Add(row);
                }
            }

            Assert.AreEqual(1, visas.Count);
        }
 public deviceTransaction GetDeviceTransaction(TransactionRequest transactionRequest)
 {
     string response = "";
     Dictionary<string, string> responseMap = doRequest(GetURL(), "POST", Serializer<TransactionRequest>.Serialize(transactionRequest).InnerXml);
     responseMap.TryGetValue(MESSAGE, out response);
     return Serializer<deviceTransaction>.Deserialize(response);
 }
        private static void Main()
        {
            // Valid transaction
            Console.WriteLine("Begin Transaction...");
            Thread.Sleep(1000);
            var validTransactionRequest = new TransactionRequest
            {
                CardNumber = "123-456-78",
                CardPin = "1234",
                RequestedAmount = 200
            };

            ProcessTransaction(validTransactionRequest);
            Console.WriteLine("End Transaction...\n");
            Thread.Sleep(1000);

            // Invalid card number
            Console.WriteLine("Begin Transaction...");
            Thread.Sleep(1000);
            var invalidCardNumberTransaction = new TransactionRequest
            {
                CardNumber = "111-11-11-111",
                CardPin = "1234",
                RequestedAmount = 200
            };

            ProcessTransaction(invalidCardNumberTransaction);
            Console.WriteLine("End Transaction...\n");
            Thread.Sleep(1000);

            // Invalid card pin
            Console.WriteLine("Begin Transaction...");
            Thread.Sleep(1000);
            var invalidCardPinTransaction = new TransactionRequest
            {
                CardNumber = "111-11-111",
                CardPin = "12345",
                RequestedAmount = 200
            };

            ProcessTransaction(invalidCardPinTransaction);
            Console.WriteLine("End Transaction...\n");
            Thread.Sleep(1000);

            // Invalid money request
            Console.WriteLine("Begin Transaction...");
            Thread.Sleep(1000);
            var invalidMoneyRequestTransaction = new TransactionRequest
            {
                CardNumber = "111-11-111",
                CardPin = "1234",
                RequestedAmount = -200
            };

            ProcessTransaction(invalidMoneyRequestTransaction);
            Console.WriteLine("End Transaction...\n");
            Thread.Sleep(1000);
        }
        public void ToXML_EscapesGeneratedXMLForString()
        {
            TransactionRequest request = new TransactionRequest
            {
                OrderId = "<>&\"'"
            };

            TestHelper.AssertIncludes("<order-id>&lt;&gt;&amp;&quot;&#39;</order-id>", request.ToXml());
        }
        public void HashIsComputedCorrectly0()
        {
            var request = new TransactionRequest();
            request.Add("KEY1", "VALUE1");
            var client = GetClient();
            client.SetHash(request);

            Assert.AreEqual("05b2372310c2897729f9c185517a25168e6891f2c7749329255f494e1483f181", request["HASH"]);
        }
        public void HashIsComputedCorrectly1()
        {
            var request = new TransactionRequest();
            request.Add("ORDERID", "VALUE1");
            request.Add("DATE", "VALUE2");
            var client = GetClient();
            client.SetHash(request);

            Assert.AreEqual("b7c312f5d79aebc472d91b7395ba855b00bcfee5e15b13a01af85a9f64737a89", request["HASH"]);
        }
        public void HashIsComputedCorrectly0_Verify()
        {
            var hash = "05b2372310c2897729f9c185517a25168e6891f2c7749329255f494e1483f181";
            var request = new TransactionRequest();
            request.Add("KEY1", "VALUE1");
            var client = GetClient();
            var result = client.VerifyParameters(request, GetClientConfiguration().ApiKey, hash);

            Assert.IsTrue(result);
        }
 public void TestService()
 {
     request = new TransactionRequest();
     request.TokenUniqueId = "DWSPMC00000000010906a349d9ca4eb1a4d53e3c90a11d9c";
     request.AuditInfo.UserId = "testUser";
     request.AuditInfo.UserName = "******";
     request.AuditInfo.Organization = "Test Org";
     response = service.GetDeviceTransaction(request);
     Assert.IsNotNull(response.Transactions);
 }
        public void ToXml_Includes_DeviceData()
        {
            TransactionRequest request = new TransactionRequest();
            request.DeviceData = "{\"device_session_id\":\"my_dsid\", \"fraud_merchant_id\":\"my_fmid\"}";

            Assert.IsTrue(request.ToXml().Contains("device-data"));
            Assert.IsTrue(request.ToXml().Contains("device_session_id"));
            Assert.IsTrue(request.ToXml().Contains("my_dsid"));
            Assert.IsTrue(request.ToXml().Contains("fraud_merchant_id"));
            Assert.IsTrue(request.ToXml().Contains("my_fmid"));
        }
            public void OnPaymentFinished(string orderId, TransactionRequest originalRequest, IDictionary<String, String> result, ApiPaymentCompletedStatus status)
            {
                //handle payment finished
                string textResult = "Order ID: " + orderId + "\n" + "Status: " + status + "\n";

                foreach(KeyValuePair<string, string> entry in result)
                {
                    textResult = textResult + entry.Key + ": " + entry.Value + "\n";
                }

                this.paymentDataView.Text = textResult;
            }
        public void ToXML_EscapesGeneratedXMLForNestedSearchCriteria()
        {
            TransactionRequest request = new TransactionRequest
            {
                Customer = new CustomerRequest
                {
                    FirstName = "<John>"
                }
            };

            TestHelper.AssertIncludes("<first-name>&lt;John&gt;</first-name>", request.ToXml());
        }
Beispiel #15
0
        bool ITransactionProcessor.AddRequest(int tickerIndex, double quantity)
        {
            if (!quoteContext.GetTickerDescription(tickerIndex).CanBeBought) return false;

            var req = new TransactionRequest(tickerIndex, quantity < 0 ? 0 : quantity, delay.Value);
            if (delay.Value == 0)
                return ProcessTransactionRequest(req);
            else
                transactionRequests.Add(req);

            return true;
        }
 private static void ProcessTransaction(TransactionRequest transactionRequest)
 {
     try
     {
         AtmDbData.WithdrawMoney(transactionRequest);
         Console.WriteLine("\tRequested transaction was successful!");
     }
     catch (Exception)
     {
         Console.WriteLine("\tRequested transaction was not successful!");
     }
 }
 public void Sign_Transaction()
 {
     //Just checking for no errors here- not yet sure how we verify this,
     //unless we call into another way of signing and verify the two match
     TransactionRequest t = new TransactionRequest()
     {
         AmountInCents = 124,
         CurrencyCode = Currency.GBP,
         Description = "test description"
     };
     RecurlyJs signer = new RecurlyJs("testkey","testapi");
     var signedString = signer.SignString(t.ToSignableString());
 }
        public void WithdrawMoney(TransactionRequest transactionRequest)
        {
            using (var transaction = new AtmDbContext().Database.BeginTransaction())
            {
                try
                {
                    if (!this.validator.IsValidCardNumber(transactionRequest.CardNumber))
                    {
                        throw new ArgumentException("Invalid card number. Current transaction is aborted!");
                    }

                    if (!this.validator.IsValidCardPin(transactionRequest.CardPin))
                    {
                        throw new ArgumentException("Invalid Card PIN Code. Current transaction is aborted!");
                    }

                    var cardAccount = this.atmDbContext.CardAccounts
                        .FirstOrDefault(ca => ca.CardNumber == transactionRequest.CardNumber &&
                                              ca.CardPin == transactionRequest.CardPin);
                    if (cardAccount == null)
                    {
                        throw new ArgumentException(
                            "There is no Card account with the given Card number. Current transaction is aborted!");
                    }

                    if (!this.validator.IsPinCodeMatches(transactionRequest.CardPin, cardAccount.CardPin))
                    {
                        throw new ArgumentException(
                            "Chosen Card PIN Code does not matches the actual PIN Code of the card account. Current transaction is aborted!");
                    }

                    if (
                        !this.validator.IsPermittedWithdrawalAmount(transactionRequest.RequestedAmount,
                            cardAccount.CardCash))
                    {
                        throw new ArgumentException(
                            "Invalid withdrawal money amount to retrieve. Current transaction is aborted!");
                    }

                    cardAccount.CardCash -= transactionRequest.RequestedAmount;

                    transaction.Commit();
                    this.atmDbContext.SaveChanges();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    Console.WriteLine("\t" + ex.Message);
                }
            }
        }
        /// <summary>
        /// Creates the authorization/payment parameters. You have to call SetPayWithForm or SetPayWithAlias after.
        /// </summary>
        /// <param name="uniqueOrderId">The unique order unique identifier (you have to create it).</param>
        /// <param name="userId">The user unique identifier.</param>
        /// <param name="userEmail">The user email.</param>
        /// <param name="description">The description of the payment.</param>
        /// <param name="amountInEuro">The amount information euro (not in cents).</param>
        /// <param name="createAlias">if set to <c>true</c> [create alias] (to do oneclick later).</param>
        /// <param name="displayCreateAlias">if set to <c>true</c> the payment form will ask whether to save the card information.</param>
        /// <param name="authorizationInsteadOfPayment">if set to <c>true</c> [authorization instead of payment]. Call Capture to complete the transaction.</param>
        /// <param name="language">The language.</param>
        /// <returns></returns>
        public TransactionRequest CreateAuthorizationParameters(
            string uniqueOrderId,
            string userId,
            string userEmail,
            string description,
            decimal amountInEuro,
            bool createAlias = false,
            bool displayCreateAlias = false,
            bool authorizationInsteadOfPayment = false,
            Be2BillLanguage language = Be2BillLanguage.EN)
        {
            // http://developer.be2bill.com/platform

            var collection = new TransactionRequest();

            if (authorizationInsteadOfPayment)
            {
                collection.Add(Names.Params.OperationType, Names.Params.OperationTypeAuthorization);
            }
            else
            {
                collection.Add(Names.Params.OperationType, Names.Params.OperationTypePayment);
            }

            collection.Add(Names.Params.Description, description);
            collection.Add(Names.Params.OrderId, uniqueOrderId); // be2bill seems to accept only 1 tentative per ORDERID
            collection.Add(Names.Params.Amount, Math.Round(amountInEuro * 100).ToString());
            collection.Add(Names.Params.Version, Names.ApiVersion);
            collection.Add(Names.Params.ClientIdent, userId);
            collection.Add(Names.Params.Language, language.ToString());

            if (createAlias)
            {
                collection.Add(Names.Params.CreateAlias, Names.Params.Yes); // allow one-click for later transactions (force)
            }

            if (displayCreateAlias)
            {
                collection.Add(Names.Params.DisplayCreateAlias, Names.Params.Yes); // allow one-click for later transactions (ask user)
            }

            collection.Add(Names.Params.Identifier, configuration.ApiIdentifier);

            if (userEmail != null)
            {
                collection.Add(Names.Params.ClientEmail, userEmail);
            }

            return collection;
        }
 public IList<Transaction> Get(TransactionRequest request)
 {
     var transactions = new List<Transaction>();
     for (int i = 1; i < 30; i++)
     {
         transactions.Add(new Transaction()
         {
             Date = DateTime.Now.AddDays(i),
             Details = "Transaction " + i,
             CreditAmount = 10 + i,
             DebitAmount = 10 - i
         });
     }
     return transactions;
 }
        public void ToXML_EnsuresUSLocaleForDecimals()
        {
            CultureInfo existingCulture = CultureInfo.CurrentCulture;

            try
            {
#if netcore
                CultureInfo.CurrentCulture = new CultureInfo("it-IT");
#else
                Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("it-IT");
#endif

                TransactionRequest transactionRequest = new TransactionRequest
                {
                    Amount = 100.0M,
                    TaxAmount = 10.0M,
                };

                SubscriptionRequest subscriptionRequest = new SubscriptionRequest
                {
                    Price = 200.0M,
                };

                SubscriptionTransactionRequest subscriptionTransactionRequest = new SubscriptionTransactionRequest
                {
                    Amount = 300.0M
                };

                ModificationRequest modificationRequest = new ModificationRequest
                {
                    Amount = 400.0M
                };

                TestHelper.AssertIncludes("<amount>100.00</amount>", transactionRequest.ToXml());
                TestHelper.AssertIncludes("<tax-amount>10.00</tax-amount>", transactionRequest.ToXml());
                TestHelper.AssertIncludes("<price>200.00</price>", subscriptionRequest.ToXml());
                TestHelper.AssertIncludes("<amount>300.00</amount>", subscriptionTransactionRequest.ToXml());
                TestHelper.AssertIncludes("<amount>400.00</amount>", modificationRequest.ToXml("root"));
            }
            finally
            {
#if netcore
                CultureInfo.CurrentCulture = existingCulture;
#else
                Thread.CurrentThread.CurrentCulture = existingCulture;
#endif
            }
        }
        public void Generate_ReturnsTransactionsSettledOnAGivenDay()
        {
            TransactionRequest request = new TransactionRequest
            {
                Amount = 1000M,
                CreditCard = new TransactionCreditCardRequest
                {
                    Number = "4111111111111111",
                    ExpirationDate = "05/2022",
                    CardholderName = "Tom Smith",
                    CVV = "123",
                },
                BillingAddress = new AddressRequest
                {
                    StreetAddress = "123 fake st",
                    PostalCode = "90025",
                },
                Options = new TransactionOptionsRequest
                {
                    SubmitForSettlement = true
                },
            };

            var trsp = gateway.Transaction.Sale(request);
            Assert.IsNotNull(trsp);
            Transaction transaction = trsp.Target;
            if (transaction != null)
            {
                Transaction settlementResult = gateway.TestTransaction.Settle(transaction.Id);
                var settlementDate = settlementResult.SettlementBatchId.Substring(0, 10);
                transaction = gateway.Transaction.Find(transaction.Id);
                var result = gateway.SettlementBatchSummary.Generate(System.DateTime.Parse(settlementDate));
                var visas = new List<IDictionary<string, string>>();
                foreach (var row in result.Target.Records)
                {
                    if (Braintree.CreditCardCardType.VISA.ToString().Equals(row["card_type"]))
                    {
                        visas.Add(row);

                    }
                }
                Assert.AreEqual(1, visas.Count);
            }
            else if (trsp.Message.Contains("duplicate"))
                Assert.Inconclusive(trsp.Message);
            else
                Assert.Fail(trsp.Message);
        }
        public void SettlementPending()
        {
            var request = new TransactionRequest
            {
                Amount = 100M,
                PaymentMethodNonce = Nonce.Transactable,
                Options = new TransactionOptionsRequest
                {
                    SubmitForSettlement = true
                }
            };

            var transactionResult = gateway.Transaction.Sale(request);
            Transaction transaction = gateway.TestTransaction.SettlementPending(transactionResult.Target.Id);

            Assert.AreEqual(TransactionStatus.SETTLEMENT_PENDING, transaction.Status);
        }
        public void Can_Create_A_Transaction_Request()
        {
            //// Arrange
            var gateway = BraintreeProviderSettings.AsBraintreeGateway();

            var request = new TransactionRequest()
                              {
                                  Amount = 100M,
                                  PaymentMethodNonce = TestHelper.PaymentMethodNonce
                              };

            //// Act
            var result = gateway.Transaction.Sale(request);

            //// Assert
            Assert.IsTrue(result.IsSuccess());
        }
        /* Create */
        public async Task<OpObject> Create(String UserGuid, CModelRequest Request)
        {
            /* Lookup user master id */
            Int64 uMasterId = 1;// Int64.Parse(UserGuid);
            Int64 mMasterId = -1;
            Guid mGuid;

            /* Lookup model based upon the signature
             * in the template */
            mGuid = GetModelGuidFromTemplate(Request.TemplateWithData);
            mMasterId = await GetMasterId(mGuid, GuidType.Model);

            /* Do some basic sanity checks here, 
             * because if mGuid is empty, model was not found
             * which means the template-data was invalid */
            if (mGuid == Guid.Empty
                || mMasterId == -1) {
                return new OpObject(StatusCode.InvalidParameters, "The template data you submitted was either invalid or the ID of the template was removed." 
                    + " Please redownload the template you've used and try again.");
            }

            /* Proxy data */
            TransactionRequest tRequest = new TransactionRequest()
            {
                Guid = Guid.NewGuid(),
                UserMasterId = uMasterId,
                ModelMasterId = mMasterId,
                Template = Request.TemplateWithData,
                Parameters = ((int)Request.Parameters).ToString(),
                Status = 0,
                Created = DateTime.Now
            };

            /* Create the request in database */
            Database.TransactionRequests.Add(tRequest);
            Database.Entry(tRequest).State = System.Data.Entity.EntityState.Added;

            /* Save */
            await Database.SaveChangesAsync();

            /* Done */
            return new OpObject(StatusCode.Ok, tRequest.Guid.ToString());
        }
        public void CreateTransactionFromTransparentRedirect()
        {
            TransactionRequest trParams = new TransactionRequest
            {
                Type = TransactionType.SALE
            };

            TransactionRequest request = new TransactionRequest
            {
                Amount = SandboxValues.TransactionAmount.AUTHORIZE,
                CreditCard = new TransactionCreditCardRequest
                {
                    Number = SandboxValues.CreditCardNumber.VISA,
                    ExpirationDate = "05/2099",
                    CVV = "123",
                },
                BillingAddress = new AddressRequest
                {
                    StreetAddress = "123 fake st",
                    PostalCode = "90025",
                },
            };

            string queryString = TestHelper.QueryStringForTR(trParams, request, gateway.TransparentRedirect.Url, service);
            Result<Transaction> result = gateway.TransparentRedirect.ConfirmTransaction(queryString);
            Assert.IsTrue(result.IsSuccess(), result.Message);
            Transaction transaction = result.Target;

            Assert.AreEqual(1000.00, transaction.Amount);
            Assert.AreEqual(TransactionType.SALE, transaction.Type);
            Assert.AreEqual(TransactionStatus.AUTHORIZED, transaction.Status);
            Assert.AreEqual(DateTime.Now.Year, transaction.CreatedAt.Value.Year);
            Assert.AreEqual(DateTime.Now.Year, transaction.UpdatedAt.Value.Year);

            CreditCard creditCard = transaction.CreditCard;
            Assert.AreEqual("411111", creditCard.Bin);
            Assert.AreEqual("1111", creditCard.LastFour);
            Assert.AreEqual("05", creditCard.ExpirationMonth);
            Assert.AreEqual("2099", creditCard.ExpirationYear);
            Assert.AreEqual("05/2099", creditCard.ExpirationDate);
        }
        public void TransactionCreate()
        {
            TransactionRequest request = new TransactionRequest
            {
                Amount = SandboxValues.TransactionAmount.AUTHORIZE,
                PaymentMethodNonce = Nonce.Coinbase
            };
            Result<Transaction> result = gateway.Transaction.Sale(request);
            Assert.IsTrue(result.IsSuccess());

            CoinbaseDetails details = result.Target.CoinbaseDetails;
            Assert.IsNotNull(details);

            Assert.AreNotEqual("", details.UserEmail);
            Assert.IsNotNull(details.UserEmail);

            Assert.AreNotEqual("", details.UserName);
            Assert.IsNotNull(details.UserName);

            Assert.AreNotEqual("", details.UserId);
            Assert.IsNotNull(details.UserId);
        }
Beispiel #28
0
            private static void sampleQuickAuth()
            {
                try {
                    // four lines are all it takes to send in a transaction:
                    CreditCard cReq = new CreditCard("visa", "4242424242424242", "0609", "Andrew Harcourt", "123", CreditCard.CVN_PRESENT);
                    String orderID = DateTime.Now.ToString("yyyyMMddHHmmss");
                    TransactionRequest tReq = new TransactionRequest("realexsample", "secret", "secret", "secret");
                    TransactionResponse tResp = tReq.Authorize("internet", orderID, "EUR", 4133, cReq);

                    if (tResp.ResultCode == 0) {	// success

                        //TODO: Your code goes here.

                    } else {	// failure
                        //Check the Realex Developer Documentation for transaction result codes.

                        //TODO: Your code goes here.

                    }
                } catch (DataValidationException e) {
                    // transaction not submitted

                    //TODO: Your exception-handling code goes here.
                    Console.WriteLine("Transaction not submitted: " + e.Message);

                } catch (TransactionFailedException e) {
                    // transaction failed

                    //TODO: Your exception-handling code goes here.
                    Console.WriteLine("Transaction failed: " + e.Message);

                } catch (Exception e) {
                    // something else bad happened

                    //TODO: Your exception-handling code goes here.
                    Console.WriteLine("Unhandled exception: " + e.Message);

                }
            }
Beispiel #29
0
        public void ToXML_EnsuresUSLocaleForDecimals()
        {
            System.Globalization.CultureInfo existingCulture = System.Globalization.CultureInfo.CurrentCulture;

            try
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("it-IT");

                TransactionRequest transactionRequest = new TransactionRequest
                {
                    Amount = 100.0M
                };

                SubscriptionRequest subscriptionRequest = new SubscriptionRequest
                {
                    Price = 200.0M,
                };

                SubscriptionTransactionRequest subscriptionTransactionRequest = new SubscriptionTransactionRequest
                {
                    Amount = 300.0M
                };

                ModificationRequest modificationRequest = new ModificationRequest
                {
                    Amount = 400.0M
                };

                TestHelper.AssertIncludes("<amount>100.0</amount>", transactionRequest.ToXml());
                TestHelper.AssertIncludes("<price>200.0</price>", subscriptionRequest.ToXml());
                TestHelper.AssertIncludes("<amount>300.0</amount>", subscriptionTransactionRequest.ToXml());
                TestHelper.AssertIncludes("<amount>400.0</amount>", modificationRequest.ToXml("root"));
            }
            finally
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = existingCulture;
            }
        }
Beispiel #30
0
        /// <summary>
        /// Process a payment
        /// </summary>
        /// <param name="processPaymentRequest">Payment info required for an order processing</param>
        /// <returns>Process payment result</returns>
        public async Task <ProcessPaymentResult> ProcessPayment(ProcessPaymentRequest processPaymentRequest)
        {
            var processPaymentResult = new ProcessPaymentResult();

            //get customer
            var customer = await _customerService.GetCustomerById(processPaymentRequest.CustomerId);

            //get settings
            var useSandBox = _brainTreePaymentSettings.UseSandBox;
            var merchantId = _brainTreePaymentSettings.MerchantId;
            var publicKey  = _brainTreePaymentSettings.PublicKey;
            var privateKey = _brainTreePaymentSettings.PrivateKey;

            //new gateway
            var gateway = new BraintreeGateway {
                Environment = useSandBox ? Environment.SANDBOX : Environment.PRODUCTION,
                MerchantId  = merchantId,
                PublicKey   = publicKey,
                PrivateKey  = privateKey
            };

            //new transaction request
            var transactionRequest = new TransactionRequest {
                Amount = processPaymentRequest.OrderTotal,
            };

            if (_brainTreePaymentSettings.Use3DS)
            {
                transactionRequest.PaymentMethodNonce = processPaymentRequest.CustomValues["CardNonce"].ToString();
            }
            else
            {
                //transaction credit card request
                var transactionCreditCardRequest = new TransactionCreditCardRequest {
                    Number         = processPaymentRequest.CreditCardNumber,
                    CVV            = processPaymentRequest.CreditCardCvv2,
                    ExpirationDate = processPaymentRequest.CreditCardExpireMonth + "/" + processPaymentRequest.CreditCardExpireYear
                };
                transactionRequest.CreditCard = transactionCreditCardRequest;
            }

            //address request
            var addressRequest = new AddressRequest {
                FirstName     = customer.BillingAddress.FirstName,
                LastName      = customer.BillingAddress.LastName,
                StreetAddress = customer.BillingAddress.Address1,
                PostalCode    = customer.BillingAddress.ZipPostalCode
            };

            transactionRequest.BillingAddress = addressRequest;

            //transaction options request
            var transactionOptionsRequest = new TransactionOptionsRequest {
                SubmitForSettlement = true
            };

            transactionRequest.Options = transactionOptionsRequest;

            //sending a request
            var result = gateway.Transaction.Sale(transactionRequest);

            //result
            if (result.IsSuccess())
            {
                processPaymentResult.NewPaymentStatus = PaymentStatus.Paid;
            }
            else
            {
                processPaymentResult.AddError("Error processing payment." + result.Message);
            }

            return(processPaymentResult);
        }
Beispiel #31
0
        public ActionResult <TransactionResponse> Post([FromBody] TransactionRequest request)
        {
            var result = transactionService.Add(request);

            return(Ok(result));
        }
        public void Add_Transactions_To_Portfolio_With_Property()
        {
            var uuid         = Guid.NewGuid().ToString();
            var propertyName = $"fund-style-{uuid}";
            var labelValue   = "A Trader";

            //    Effective date of the trades. All dates/times must be supplied in UTC
            var effectiveDate = new DateTimeOffset(2018, 1, 1, 0, 0, 0, TimeSpan.Zero);

            //    Details of the property to be created
            var propertyDefinition = new CreatePropertyDefinitionRequest(

                //    The domain the property is to be applied to
                domain: CreatePropertyDefinitionRequest.DomainEnum.Transaction,

                //    The scope the property will be created in
                scope: TestDataUtilities.TutorialScope,

                //    When the property value is set it will be valid forever and cannot be changed.
                //    Properties whose values can change over time should be created with LifeTimeEnum.TIMEVARIANT
                lifeTime: CreatePropertyDefinitionRequest.LifeTimeEnum.Perpetual,

                code: propertyName,
                valueRequired: false,
                displayName: "Trader Id",
                dataTypeId: new ResourceId("system", "string")
                );

            //    Create the property definition
            var propertyDefinitionResult = _apiFactory.Api <IPropertyDefinitionsApi>().CreatePropertyDefinition(propertyDefinition);

            //    Create the property value
            var propertyValue = new PerpetualProperty(propertyDefinitionResult.Key, new PropertyValue(labelValue));

            //    Create a portfolio
            var portfolioId = _testDataUtilities.CreateTransactionPortfolio(TutorialScope);

            //    Details of the transaction to be added
            var transaction = new TransactionRequest(

                //    Unique transaction id
                transactionId: Guid.NewGuid().ToString(),

                //    Transaction type, configured during system setup
                type: "Buy",

                //    Instrument identifier for the trnasaction
                instrumentIdentifiers: new Dictionary <string, string>
            {
                ["Instrument/default/LusidInstrumentId"] = _instrumentIds.First()
            },

                //    The properties to be added to the transaction
                properties: new Dictionary <string, PerpetualProperty>
            {
                [propertyDefinitionResult.Key] = propertyValue
            },

                transactionDate: effectiveDate,
                settlementDate: effectiveDate,
                units: 100,
                transactionPrice: new TransactionPrice(12.3, TransactionPrice.TypeEnum.Price),
                totalConsideration: new CurrencyAndAmount(1230, "GBP"),
                source: "Custodian"
                );

            //    Add the transaction to the portfolio
            _apiFactory.Api <ITransactionPortfoliosApi>().UpsertTransactions(TutorialScope, portfolioId, new List <TransactionRequest> {
                transaction
            });

            //    Retrieve the transaction
            var transactions = _apiFactory.Api <ITransactionPortfoliosApi>().GetTransactions(TutorialScope, portfolioId);

            Assert.That(transactions.Values.Count, Is.EqualTo(1));
            Assert.That(transactions.Values[0].InstrumentUid, Is.EqualTo(transaction.InstrumentIdentifiers.First().Value));
            Assert.That(transactions.Values[0].Properties.First().Value.Value.LabelValue, Is.EqualTo(labelValue));
        }
Beispiel #33
0
        public static string DoPurchase(string nonce, string uid, string pid)
        {
            string   btCustomer = UserIDToCustomerId(uid);
            Customer c          = null;

            try { c = Gateway.Customer.Find(btCustomer); } catch (Exception) { }

            /*
             * try
             * {
             *  if (c == null)
             *  {
             *      Result<Customer> cr = Gateway.Customer.Create(new CustomerRequest() { CustomerId = btCustomer, PaymentMethodNonce = nonce });
             *      ServerCore.LogThread.GetLog().Log(NetworkCore.LogInterface.LogMessageType.System, true, "Braintree create customer: " + cr.Message);
             *  }
             *  else
             *  {
             *      Result<Customer> cr = Gateway.Customer.Update(btCustomer, new CustomerRequest() { CustomerId = btCustomer, PaymentMethodNonce = nonce });
             *      ServerCore.LogThread.GetLog().Log(NetworkCore.LogInterface.LogMessageType.System, true, "Braintree update customer: " + cr.Message);
             *  }
             * }
             * catch (Exception) { }
             */

            NetworkCore.GlobalProduct p = Marketplace.Instance.GetProduct(pid);
            var request = new TransactionRequest
            {
                Amount             = (decimal)p.USD,
                PaymentMethodNonce = nonce,
                Options            = new TransactionOptionsRequest
                {
                    SubmitForSettlement   = true,
                    StoreInVaultOnSuccess = true
                }
            };

            if (c == null)
            {
                request.Customer = new CustomerRequest()
                {
                    Id = btCustomer
                }
            }
            ;
            else
            {
                request.CustomerId = btCustomer;
            }

            Result <Transaction> result = Gateway.Transaction.Sale(request);

            if (result.IsSuccess())
            {
                string transactionJson = Newtonsoft.Json.JsonConvert.SerializeObject(result.Target);
                Marketplace.Instance.FinalizeProductPurchase(uid, pid, transactionJson);
                return(transactionJson);
            }


            return(result.Message);
        }
        public ActionResult <TransactionResponse> Post([FromBody] TransactionRequest transactionRequest)
        {
            // Idempotency check...if we've seen this transaction before, we'll
            // return the prior response.
            TransactionResponse response = GetCachedTransactionResponse(transactionRequest.transactionKey);

            if (response != null)
            {
                return(response);
            }

            // For demonstration purposes, we'll automatically fail any GL transaction...a live
            // system would access the banking core and generate a response based on that
            // access.
            try
            {
                // NOTE: not all banking cores handle memo posting. This sample
                // real time banking interface is for illustration purposes. If your
                // core doesn't handle memo posts or GL transactions, by all means
                // create a real time interface that works well with your core.
                // Just keep in mind your API consumer likely cannot deal with
                // core-specific concepts and constructs (e.g.: CIF information),
                // so your real time interface (this code) must translate that
                // information into common structures (e.g.: strings, integers...).

                response = new TransactionResponse
                {
                    transactionKey = transactionRequest.transactionKey,
                    description    = "Transaction successful"
                };

                if (transactionRequest.transactionType == TransactionRequest.TransactionTypes.DebitGL ||
                    transactionRequest.transactionType == TransactionRequest.TransactionTypes.CreditGL)
                {
                    // NOTE: in failure case, HTTP RFP says to return 200 with failure
                    // indication in response body. However, if you can't imagine not
                    // returning a failure status, return some 4xx value (but probably
                    // not 401/403 unless those are the cause of the failure). We will
                    // check both cases.
                    response.success     = false;
                    response.description = response.errorMessage = "Failure: cannot transact GL accounts";
                }

                if (transactionRequest.transactionType == TransactionRequest.TransactionTypes.CreditDDA)
                {
                    // Reversal
                    response.description = "Transaction reversal successful";
                }

                // With a memo post we need a check number (at least for this sample
                // application).
                if (transactionRequest.transactionType == TransactionRequest.TransactionTypes.MemoPost)
                {
                    if (transactionRequest.checkNumber.HasValue)
                    {
                        response.description = "Memo post successful";
                    }
                    else
                    {
                        response.success     = false;
                        response.description = response.errorMessage = "Failure: must provide a check number when issuing a memo post";
                    }
                }
            }
            catch (Exception ex)
            {
                // NOTE: you may not want to return the actual exception...
                // by all means return what makes sense and is secure.
                response = new TransactionResponse(ex);
                HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;
            }

            // New (successful) transaction, so add to our cache...we won't
            // add errored transactions since the client could (should)
            // correct the condition and re-submit. In that case we don't
            // want to return the prior error.
            if (response.success)
            {
                AddTransactionResponseToCache(response);
            }
            return(response);
        }
Beispiel #35
0
        public ServiceResultEnum SendTransactionRequest(ref PaymentInformation payment)
        {
            var request = new TransactionRequest
            {
                OrderId    = payment.OrderId,
                Amount     = payment.Amount,
                TaxExempt  = true,
                CreditCard = new TransactionCreditCardRequest
                {
                    Number          = payment.CreditCardNumber,
                    CVV             = payment.CreditCardCvv,
                    ExpirationMonth = payment.CreditCardExpireMonth,
                    ExpirationYear  = payment.CreditCardExpireYear
                },
                Customer = new CustomerRequest
                {
                    Id        = payment.CustomerId,
                    FirstName = payment.CustomerNameFirst,
                    LastName  = payment.CustomerNameLast,
                    Email     = payment.CustomerEmail,
                    Phone     = payment.CustomerPhone,
                    Website   = payment.CustomerWebsite
                },
                BillingAddress = new AddressRequest
                {
                    FirstName         = payment.BillingNameFirst,
                    LastName          = payment.BillingNameLast,
                    StreetAddress     = payment.BillingAddressStreet,
                    ExtendedAddress   = payment.BillingAddressStreet2,
                    Locality          = payment.BillingAddressLocality,
                    Region            = payment.BillingAddressRegion,
                    PostalCode        = payment.BillingAddressPostalCode,
                    CountryCodeAlpha2 = "US"
                },
                Options = new TransactionOptionsRequest
                {
                    StoreInVaultOnSuccess            = payment.OptionStoreInVault,
                    AddBillingAddressToPaymentMethod = true,
                    SubmitForSettlement         = payment.OptionSubmitForSettlement,
                    StoreShippingAddressInVault = payment.OptionStoreInVault
                },
                CustomFields = new Dictionary <string, string>
                {
                    { "transaction_desc", payment.TransactionDescription }
                }
            };

            if (payment.ShippingAddressStreet.IsNullOrEmpty())
            {
                request.ShippingAddress = new AddressRequest
                {
                    FirstName         = payment.ShippingNameFirst,
                    LastName          = payment.ShippingNameLast,
                    StreetAddress     = payment.ShippingAddressStreet,
                    ExtendedAddress   = payment.ShippingAddressStreet2,
                    Locality          = payment.ShippingAddressLocality,
                    Region            = payment.ShippingAddressRegion,
                    PostalCode        = payment.ShippingAddressPostalCode,
                    CountryCodeAlpha2 = "US"
                };
            }

            var result = Constants.BraintreeGateway.Transaction.Sale(request);

            payment.IsSuccess         = result.IsSuccess();
            ServiceResult             = payment.IsSuccess ? ServiceResultEnum.Success : ServiceResultEnum.Failure;
            payment.TransactionResult = result;
            return(ServiceResult);
        }
Beispiel #36
0
        public async Task <ActionResult <BroadcastedSingleTransactionResponse> > GetSingleTransactionState(
            TransactionRequest request)
        {
            var txState = await _transactionService.TryGetTransactionAsync(request.TransactionId);

            if (txState != null)
            {
                var response = new BroadcastedSingleTransactionResponse
                {
                    Amount      = txState.Amount.ToString(),
                    Block       = txState.BlockNumber.HasValue ? (long)txState.BlockNumber.Value : 0,
                    Fee         = (txState.GasAmount * txState.GasPrice).ToString(),
                    Hash        = txState.Hash,
                    OperationId = txState.TransactionId
                };

                if (txState.State == TransactionState.Built || txState.State == TransactionState.Deleted)
                {
                    return(NoContent());
                }

                if (txState.State == TransactionState.InProgress || !txState.IsConfirmed)
                {
                    response.State     = BroadcastedTransactionState.InProgress;
                    response.Timestamp = txState.BuiltOn;

                    return(response);
                }

                // ReSharper disable once SwitchStatementMissingSomeCases
                switch (txState.State)
                {
                case TransactionState.Completed:
                    response.State = BroadcastedTransactionState.Completed;
                    break;

                case TransactionState.Failed:
                    response.State = BroadcastedTransactionState.Failed;
                    break;
                }

                if (txState.CompletedOn.HasValue)
                {
                    response.Timestamp = txState.CompletedOn.Value;
                }

                if (txState.BlockNumber.HasValue)
                {
                    response.Block = (long)txState.BlockNumber.Value;
                }

                if (!string.IsNullOrEmpty(txState.Error))
                {
                    response.Error     = txState.Error;
                    response.ErrorCode = BlockchainErrorCode.Unknown;
                }

                return(response);
            }
            else
            {
                return(NoContent());
            }
        }
Beispiel #37
0
        public async Task <IActionResult> ConfirmWaitingVerification([FromBody] TransactionRequest req)
        {
            TransactionResponse response = new TransactionResponse();

            try
            {
                string bearer   = Request.HttpContext.Request.Headers["Authorization"];
                string token    = bearer.Substring("Bearer ".Length).Trim();
                string username = string.Empty;
                if (string.IsNullOrEmpty(token))
                {
                    response.IsSuccess = false;
                    response.Message   = "You don't have access.";
                    return(BadRequest(response));
                }

                username = sec.ValidateToken(token);
                if (username == null)
                {
                    Response.HttpContext.Response.Cookies.Append("access_token", "", new CookieOptions()
                    {
                        Expires = DateTime.Now.AddDays(-1)
                    });
                    response.IsSuccess = false;
                    response.Message   = "Your session was expired, please re-login.";
                    return(BadRequest(response));
                }
                req.UserName = username;
                var responseUserUpdate = usrFacade.UpdateFromWaitingVerification(req.Email, req.Name, req.Telp, req.Alamat, req.Instagram, req.Facebook, req.UserName).Result;
                if (!responseUserUpdate.IsSuccess)
                {
                    response.IsSuccess         = false;
                    responseUserUpdate.Message = "Your session was expired, please re-login.";
                    return(BadRequest(response));
                }
                response = await facade.ApproveTransaction(req);

                if (response.IsSuccess)
                {
                    #region Sent Email to User
                    TransactionResponse transResp = await facade.GetCurrentTransaction(req);

                    int       levelID      = transResp.ListTransaction.FirstOrDefault().TrasanctionLevel.ID;
                    SendEmail sendEmail    = new SendEmail(_emailConfiguration);
                    string    contentEmail = string.Empty;
                    string    subjectEmail = string.Empty;

                    AuthenticationResponse authResp = await facade.GetUserProfile(username);

                    EmailAddress emailAddress = new EmailAddress();
                    switch (levelID)
                    {
                    case 1:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailBuy").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailBuy").Result;
                        break;

                    case 2:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailVerifikasi").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailVerifikasi").Result;
                        break;

                    case 3:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailVisit").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailVisit").Result;
                        break;

                    case 4:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailDP").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailDP").Result;
                        break;

                    case 5:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailBBN").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailBBN").Result;
                        break;

                    case 6:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailSTNK").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailSTNK").Result;
                        break;

                    case 7:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailPelunasan").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailPelunasan").Result;
                        break;

                    case 8:
                        contentEmail = configFacade.GetRedaksionalEmail("ContentEmailDelivery").Result;
                        subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailDelivery").Result;
                        break;
                    }
                    emailAddress.Address = username;
                    emailAddress.Name    = authResp.Name;
                    List <EmailAddress> listEmailAddress = new List <EmailAddress>();
                    listEmailAddress.Add(emailAddress);

                    contentEmail = contentEmail.Replace("[user]", emailAddress.Name);

                    EmailAddress emailAddressFrom = new EmailAddress();
                    emailAddressFrom.Address = "*****@*****.**";
                    emailAddressFrom.Name    = "Lojualguebeli.com";
                    List <EmailAddress> listEmailAddressFrom = new List <EmailAddress>();
                    listEmailAddressFrom.Add(emailAddressFrom);

                    EmailMessage emailMessage = new EmailMessage();
                    emailMessage.ToAddresses   = listEmailAddress;
                    emailMessage.Subject       = subjectEmail;
                    emailMessage.FromAddresses = listEmailAddressFrom;
                    emailMessage.Content       = contentEmail;

                    sendEmail.Send(emailMessage);
                    #endregion
                }

                return(Ok(response));
            }
            catch (Exception ex)
            {
                if (ex.GetType().FullName ==
                    "Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException")
                {
                    return(NotFound());
                }

                return(BadRequest());
            }
        }
Beispiel #38
0
        public ActionResult SubmitContact(FormCollection form)
        {
            Decimal planamount = 0, smscreditamount = 0, amount = 0;

            if (form["hdnamount"] != null && form["hdnamount"] != "")
            {
                planamount = Convert.ToDecimal(form["hdnamount"]);
            }
            if (form["hdnsmscreditotaltamount"] != null && form["hdnsmscreditotaltamount"] != "")
            {
                smscreditamount = Convert.ToDecimal(form["hdnsmscreditotaltamount"]);
            }

            amount = planamount + smscreditamount;



            #region Fetching CabOfficeAccount

            var accountid = "";
            if (form["hdnaccount"] != null)
            {
                accountid = form["hdnaccount"].ToString();
            }
            AccountService accountService = new AccountService();
            Account        account        = accountService.getCabOfficeByAccountId(accountid);

            if (account == null)
            {
                return(View());
            }

            #endregion

            #region Payment Initilizer
            bool saleResult;

            Braintree.Environment environment;
            if (ConfigurationManager.AppSettings["BtEnvironmentTestMode"].ToString() == "1")
            {
                environment = Braintree.Environment.SANDBOX;
            }
            else
            {
                environment = Braintree.Environment.PRODUCTION;
            }

            var gateway = new BraintreeGateway
            {
                Environment = environment,
                MerchantId  = ConfigurationManager.AppSettings["BtMerchantId"],
                PublicKey   = ConfigurationManager.AppSettings["BtPublicKey"],
                PrivateKey  = ConfigurationManager.AppSettings["BtPrivateKey"]
            };
            #endregion

            #region Generate BTCustomer, token and Nonce
            String nonce_Generated = "";
            if (account.BtCustomerId == null || account.BtCustomerId == "")
            {
                /// Create Customer
                ///
                var requestc = new CustomerRequest
                {
                    FirstName = account.FullName,
                    LastName  = account.FullName,
                    Company   = "",
                    Email     = account.Email,
                    Fax       = "",
                    Phone     = "",
                    Website   = ""
                };
                Result <Customer> resultc    = gateway.Customer.Create(requestc);
                string            customerId = resultc.Target.Id;


                /// Create PaymentMethod
                ///
                var nonce    = Request["payment_method_nonce"];
                var requestP = new PaymentMethodRequest
                {
                    CustomerId         = customerId,
                    PaymentMethodNonce = nonce
                };

                Result <PaymentMethod>      resultP = gateway.PaymentMethod.Create(requestP);
                Result <PaymentMethodNonce> resultN = gateway.PaymentMethodNonce.Create(resultP.Target.Token);
                nonce_Generated = resultN.Target.Nonce;

                /// Update BtCustoemrId and BtToken in CabOfficeAccount
                ///
                accountService.UpdateBrainTreeInfo(customerId, resultP.Target.Token, account.Id);
            }
            else
            {
                Result <PaymentMethodNonce> resultN = gateway.PaymentMethodNonce.Create(account.BtPaymentMethodToken);
                nonce_Generated = resultN.Target.Nonce;
            }

            #endregion

            #region Sale

            var request = new TransactionRequest
            {
                Amount             = amount,
                PaymentMethodNonce = nonce_Generated,
                Options            = new TransactionOptionsRequest
                {
                    SubmitForSettlement = true
                }
            };

            Result <Transaction> result = gateway.Transaction.Sale(request);

            bool        resultVal   = result.IsSuccess();
            Transaction transaction = result.Target;

            #endregion


            if (resultVal)
            {
                bool chkautorenewel = false;
                var  bit            = "off";
                if (form["chkautorenewel"] != null)
                {
                    bit = form["chkautorenewel"].ToString();
                }

                if (bit == "on")
                {
                    chkautorenewel = true;
                }

                SubscriptionService subscriptionService = new SubscriptionService();

                int qty = 1;
                if (form["qty"] != null && form["qty"] != "")
                {
                    qty = Convert.ToInt32(form["qty"]);
                }

                int smscreditqty = 0;
                if (form["smscreditqty"] != null && form["smscreditqty"] != "")
                {
                    smscreditqty = Convert.ToInt32(form["smscreditqty"]);
                }

                double hdnsmscreditamount = 0;
                if (form["hdnsmscreditamount"] != null && form["hdnsmscreditamount"] != "")
                {
                    hdnsmscreditamount = Convert.ToDouble(form["hdnsmscreditamount"]);
                }

                int accountId = 1;
                if (account != null)
                {
                    accountId = account.Id;
                }

                int planId = 0;
                if (form["hdnplanid"] != null)
                {
                    planId = Convert.ToInt32(form["hdnplanid"].ToString());
                }


                int subscriptionId = subscriptionService.PurchaseSubscription(planId, Convert.ToDouble(amount),
                                                                              accountId, qty, "", smscreditqty, hdnsmscreditamount,
                                                                              transaction.Id, "", chkautorenewel, 0);


                if (chkautorenewel == true)
                {
                    /// Mark Hangfire Service
                    AutomatedService automatedService = new AutomatedService();
                    RecurringJob.AddOrUpdate(() => automatedService.MarkAutoRenewalSubscription(subscriptionId, null), Cron.Minutely);


                    ////// Insert into execution service

                    WindowsServiceExecution winservice = new WindowsServiceExecution();
                    winservice.WindowsServiceFunction     = "Automatic Charging";
                    winservice.WindowsServiceArgumrnt     = subscriptionId;
                    winservice.WindowsServiceFunctionCode = (int)Constant.WindowsFunction.AutomaticCharging;
                    winservice.WindowsServiceStatus       = (int)Constant.WindowsServiceExecutionStatus.Pending;
                    winservice.IsActive    = true;
                    winservice.CreatedDate = DateTime.Now;

                    //WindowsServiceExecutionService windowsServiceExecutionService = new WindowsServiceExecutionService();
                    //windowsServiceExecutionService.InsertWindowsServiceExecutionService(winservice);
                }


                return(RedirectToAction("Thankyou"));
            }
            else
            {
                return(RedirectToAction("CustomError?type=btpayment"));
            }
        }
Beispiel #39
0
        public async Task <IActionResult> Checkout(CheckoutViewModel model, string braintreeNonce)
        {
            string          username            = null;
            int?            anonymousIdentifier = null;
            Cart            cart     = null;
            ApplicationUser customer = null;

            if (User.Identity.IsAuthenticated)   //All controllers and views have a "User" property which I can check.  This returns True if they are logged in, false otherwise
            {
                username = User.Identity.Name;   //I can track carts by user name
                customer = _context.Users.Include(x => x.Carts).ThenInclude(x => x.ShipCarts).ThenInclude(x => x.Ship).Include(x => x.Carts).ThenInclude(x => x.WeaponCarts).ThenInclude(x => x.Weapon).Include(x => x.Carts).ThenInclude(x => x.ArmorCarts).ThenInclude(x => x.Armor).FirstOrDefault(x => x.UserName == username);
                cart     = customer.Carts.FirstOrDefault();
            }
            else
            {
                anonymousIdentifier = null;
                if (Request.Cookies.ContainsKey(ANONYMOUS_IDENTIFIER))
                {
                    anonymousIdentifier = int.Parse(Request.Cookies[ANONYMOUS_IDENTIFIER]);
                }
                else
                {
                    anonymousIdentifier = int.Parse(Guid.NewGuid().ToString());
                    Response.Cookies.Append(ANONYMOUS_IDENTIFIER, anonymousIdentifier.ToString());
                }

                cart = _context.Carts.Include(x => x.ShipCarts).ThenInclude(x => x.Ship).Include(x => x.WeaponCarts).ThenInclude(x => x.Weapon).Include(x => x.ArmorCarts).ThenInclude(x => x.Armor).FirstOrDefault(c => c.CookieId == anonymousIdentifier);
            }

            if (ModelState.IsValid)
            {
                TransactionRequest transactionRequest = new TransactionRequest
                {
                    Amount             = cart.WeaponCarts.Sum(x => x.Quantity * x.Weapon.Price) + cart.ArmorCarts.Sum(x => x.Quantity * x.Armor.Price) + cart.ShipCarts.Sum(x => x.Quantity * x.Ship.Price),
                    PaymentMethodNonce = braintreeNonce
                };
                var transactionResult = await _braintreeGateway.Transaction.SaleAsync(transactionRequest);

                if (transactionResult.IsSuccess())
                {
                    Order order = new Order
                    {
                        ContactEmail       = model.Email,
                        ContactPhoneNumber = model.PhoneNumber,
                        ShippingStreet1    = model.Street1,
                        ShippingStreet2    = model.Street2,
                        ShippingCity       = model.City,
                        ShippingState      = model.State,
                        ShippingPostalCode = model.PostalCode,


                        PlacementDate  = DateTime.UtcNow,
                        TrackingNumber = Guid.NewGuid().ToString().Substring(0, 8),
                        SubTotal       = cart.WeaponCarts.Sum(x => x.Quantity * x.Weapon.Price) + cart.ArmorCarts.Sum(x => x.Quantity * x.Armor.Price) + cart.ShipCarts.Sum(x => x.Quantity * x.Ship.Price),
                        Total          = cart.WeaponCarts.Sum(x => x.Quantity * x.Weapon.Price) + cart.ArmorCarts.Sum(x => x.Quantity * x.Armor.Price) + cart.ShipCarts.Sum(x => x.Quantity * x.Ship.Price),
                        ArmorOrders    = cart.ArmorCarts.Select(cartItem => new ArmorOrder
                        {
                            Quantity = cartItem.Quantity,
                            ArmorId  = cartItem.ArmorId
                        }).ToArray(),
                        WeaponOrders = cart.WeaponCarts.Select(cartItem => new WeaponOrder
                        {
                            Quantity = cartItem.Quantity,
                            WeaponId = cartItem.WeaponId
                        }).ToArray(),
                        ShipOrders = cart.ShipCarts.Select(cartItem => new ShipOrder
                        {
                            Quantity = cartItem.Quantity,
                            ShipId   = cartItem.ShipId
                        }).ToArray(),
                    };
                    _context.Orders.Add(order);
                    _context.Carts.Remove(cart);
                    Response.Cookies.Delete(ANONYMOUS_IDENTIFIER);
                    _context.SaveChanges();

                    /*var message = new SendGrid.Helpers.Mail.SendGridMessage
                     * {
                     *  From = new SendGrid.Helpers.Mail.EmailAddress(
                     *      "*****@*****.**", "N7 Administration"),
                     *  Subject = "Receipt for order #" + order.TrackingNumber,
                     *  HtmlContent = "Thanks for your order!"
                     * };
                     * message.AddTo(model.Email);*/

                    await _emailSender.SendEmailAsync(
                        model.Email,
                        "Receipt for order #" + order.TrackingNumber,
                        "Thanks for your order!"
                        );

                    //The "actionname" i.e. the first argument must be the actual name of the view. So my receipt controller, has a method called Receipt, which is the view name.
                    return(RedirectToAction("Receipt", "Receipt", new { id = order.TrackingNumber }));
                }
            }


            return(View());
        }
Beispiel #40
0
        public async Task <IActionResult> Index(Checkout model)
        {
            await GetCurrentCart(model);

            model.Addresses = new Address[0];

            if (ModelState.IsValid)
            {
                if (!string.IsNullOrEmpty(model.SavedAddressId) ||
                    (!string.IsNullOrEmpty(model.ShippingAddressLine1) && !string.IsNullOrEmpty(model.ShippingLocale) &&
                     !string.IsNullOrEmpty(model.ShippingRegion) && !string.IsNullOrEmpty(model.ShippingPostalCode) && !string.IsNullOrEmpty(model.ShippingCountry)))
                {
                    Order neworder = new Order
                    {
                        TrackingNumber = Guid.NewGuid().ToString(),
                        OrderDate      = DateTime.Now,
                        OrderItems     = model.Cart.CartItems.Select(x => new OrderItem
                        {
                            ProductID    = x.Product.ID,
                            ProductName  = x.Product.Name,
                            ProductPrice = (x.Product.Price ?? 0),
                            Quantity     = x.Quantity
                        }).ToArray(),
                        AddressLine1 = model.ShippingAddressLine1,
                        AddressLine2 = model.ShippingAddressLine2,
                        Country      = model.ShippingCountry,
                        Email        = model.ContactEmail,
                        PhoneNumber  = model.ContactPhoneNumber,
                        Locale       = model.ShippingLocale,
                        PostalCode   = model.ShippingPostalCode,
                        Region       = model.ShippingRegion
                    };

                    Braintree.Customer customer            = null;
                    Braintree.CustomerSearchRequest search = new Braintree.CustomerSearchRequest();
                    search.Email.Is(model.ContactEmail);
                    var searchResult = await _brainTreeGateway.Customer.SearchAsync(search);

                    if (searchResult.Ids.Count == 0)
                    {
                        //Create  a new Braintree Customer
                        Braintree.Result <Customer> creationResult = await _brainTreeGateway.Customer.CreateAsync(new Braintree.CustomerRequest
                        {
                            Email = model.ContactEmail,
                            Phone = model.ContactPhoneNumber
                        });

                        customer = creationResult.Target;
                    }
                    else
                    {
                        customer = searchResult.FirstItem;
                    }

                    CreditCard creditCard = null;
                    if (model.SaveBillingCard)
                    {
                        var newCardRequest = new CreditCardRequest
                        {
                            CardholderName  = model.BillingNameOnCard,
                            CustomerId      = customer.Id,
                            ExpirationMonth = model.BillingCardExpirationMonth.ToString().PadLeft(2, '0'),
                            ExpirationYear  = model.BillingCardExpirationYear.ToString(),
                            Number          = model.BillingCardNumber,
                            CVV             = model.BillingCardVerificationValue
                        };
                        var newCardResult = await _brainTreeGateway.CreditCard.CreateAsync(newCardRequest);

                        if (newCardResult.IsSuccess())
                        {
                            creditCard = newCardResult.Target;
                        }
                    }

                    Address savedAddress = null;
                    if (model.SaveShippingAddress)
                    {
                        var newAddressRequest = new AddressRequest
                        {
                            StreetAddress   = model.ShippingAddressLine1,
                            ExtendedAddress = model.ShippingAddressLine2,
                            CountryName     = model.ShippingCountry,
                            PostalCode      = model.ShippingPostalCode,
                            Locality        = model.ShippingLocale,
                            Region          = model.ShippingRegion
                        };
                        var newAddressResult = await _brainTreeGateway.Address.CreateAsync(customer.Id, newAddressRequest);

                        if (newAddressResult.IsSuccess())
                        {
                            savedAddress = newAddressResult.Target;
                        }
                    }

                    TransactionRequest transaction = new TransactionRequest
                    {
                        Amount = model.Cart.CartItems.Sum(x => x.Quantity * (x.Product.Price ?? 0)),


                        CustomerId = customer.Id,
                        LineItems  = model.Cart.CartItems.Select(x => new TransactionLineItemRequest
                        {
                            Name         = x.Product.Name,
                            Description  = x.Product.Description,
                            ProductCode  = x.Product.ID.ToString(),
                            Quantity     = x.Quantity,
                            LineItemKind = TransactionLineItemKind.DEBIT,
                            UnitAmount   = x.Product.Price * x.Quantity,
                            TotalAmount  = x.Product.Price * x.Quantity
                        }).ToArray()
                    };

                    if (creditCard == null)
                    {
                        transaction.CreditCard = new TransactionCreditCardRequest
                        {
                            Number          = model.BillingCardNumber,
                            CardholderName  = model.BillingNameOnCard,
                            CVV             = model.BillingCardVerificationValue,
                            ExpirationMonth = model.BillingCardExpirationMonth.ToString().PadLeft(2, '0'),
                            ExpirationYear  = model.BillingCardExpirationYear.ToString()
                        };
                    }
                    else
                    {
                        transaction.PaymentMethodToken = creditCard.Token;
                    }
                    if (savedAddress != null)
                    {
                        transaction.ShippingAddressId = savedAddress.Id;
                    }


                    var transactionResult = await _brainTreeGateway.Transaction.SaleAsync(transaction);

                    if (transactionResult.IsSuccess())
                    {
                        _context.Orders.Add(neworder);

                        _context.CartItems.RemoveRange(model.Cart.CartItems);
                        _context.Carts.Remove(model.Cart);


                        await _context.SaveChangesAsync();

                        Response.Cookies.Delete("cartId");

                        RegisterViewModel regModel = new RegisterViewModel();
                        var plainText = "Thanks for signing up, " + regModel.FirstName + "!";
                        var htmlText  = "<p> Thanks for Shopping with us, " + regModel.FirstName + "!</p>";

                        await _emailService.SendEmailAsync(model.ContactEmail, "Your Receipt", htmlText, plainText);



                        return(RedirectToAction("Confirmation", "Checkout", new { id = neworder.TrackingNumber }));
                    }
                    for (int i = 0; i < transactionResult.Errors.Count; i++)
                    {
                        ModelState.AddModelError("BillingCardNumber" + i, transactionResult.Errors.All()[i].Message);
                    }
                }

                //#region use the SendGrid client to send a welcome email
                //var client = new SendGrid.SendGridClient(_sendGridKey);
                //var senderAddress = new SendGrid.Helpers.Mail.EmailAddress("*****@*****.**", "Organic-Farm Store");
                //var subject = "Your Receipt";
                //var to = new SendGrid.Helpers.Mail.EmailAddress(emailReceipt.Email, emailReceipt.Email);
                //var plainText = "Thanks for signing up, " + emailReceipt.FirstName + "!";
                //var htmlText = "<p> Thanks for Shopping with us, " + emailReceipt.FirstName + "!</p>";
                //var message = SendGrid.Helpers.Mail.MailHelper.CreateSingleEmail(senderAddress, to, subject, plainText, htmlText);
                //var mailResult = await client.SendEmailAsync(message);

                //if ((mailResult.StatusCode == System.Net.HttpStatusCode.OK) || (mailResult.StatusCode == System.Net.HttpStatusCode.Accepted))
                //{
                //    return RedirectToAction("Confirmation");
                //}

                //else
                //{
                //    return BadRequest(await mailResult.Body.ReadAsStringAsync());
                //}


                //#endregion
            }
            return(View(model));
        }
Beispiel #41
0
 public GetTransactionsMethod(int identifier, TransactionRequest request)
     : this(identifier)
 {
     this.Parameters.Add(request);
 }
        /// <summary>
        /// Envia uma requisição-transacao com os dados especificados
        /// </summary>
        /// <param name="transaction">Detalhes da transação</param>
        /// <returns>>Uma instância de Transaction com a resposta da requisição</returns>
        public Transaction transactionRequest(Transaction transaction)
        {
            TransactionRequest request = TransactionRequest.create(transaction);

            return(TransacaoElement.unserialize(transaction, sendHttpRequest(serialize(request))));
        }
        private MicroCoin.Transactions.TransferTransaction TransactionRequestToTransaction(TransactionRequest data)
        {
            AccountDTO   account = client.GetAccount(data.Sender);
            string       pubkey  = account.EncPubKey;
            PublicKeyDTO key     = client.DecodePubKey(pubkey, null);

            return(new MicroCoin.Transactions.TransferTransaction
            {
                Amount = (ulong)(data.Amount * 10000),
                Fee = (ulong)(data.Fee * 10000M),
                Payload = data.Payload,
                SignerAccount = data.Sender,
                TargetAccount = data.Target,
                TransactionStyle = MicroCoin.Transactions.TransferTransaction.TransferType.Transaction,
                TransactionType = MicroCoin.Transactions.TransactionType.Transaction,
                NumberOfOperations = client.GetAccount(data.Sender).NumOperations + 1,
                AccountKey = new ECKeyPair
                {
                    CurveType = CurveType.Secp256K1,
                    PublicKey = new ECPoint
                    {
                        X = (Hash)key.X,
                        Y = (Hash)key.Y,
                    }
                }
            });
        }
Beispiel #44
0
        public async Task <IActionResult> SubmitSell([FromBody] TransactionRequest request)
        {
            try
            {
                TransactionResponse response = new TransactionResponse();

                string bearer   = Request.HttpContext.Request.Headers["Authorization"];
                string token    = bearer.Substring("Bearer ".Length).Trim();
                string username = string.Empty;
                if (string.IsNullOrEmpty(token))
                {
                    response.IsSuccess = false;
                    response.Message   = "You don't have access.";
                    return(BadRequest(response));
                }

                username = sec.ValidateToken(token);
                if (username == null)
                {
                    Response.HttpContext.Response.Cookies.Append("access_token", "", new CookieOptions()
                    {
                        Expires = DateTime.Now.AddDays(-1)
                    });
                    response.IsSuccess = false;
                    response.Message   = "Your session was expired, please re-login.";
                    return(BadRequest(response));
                }


                response = await facade.SubmitSell(request.BarangID, request.Harga, username);

                if (response.IsSuccess)
                {
                    #region Sent Email to User
                    SendEmail sendEmail    = new SendEmail(_emailConfiguration);
                    string    contentEmail = configFacade.GetRedaksionalEmail("ContentEmailBuy").Result;
                    string    subjectEmail = configFacade.GetRedaksionalEmail("SubjectEmailBuy").Result;

                    AuthenticationResponse authResp = await facade.GetUserProfile(username);

                    EmailAddress emailAddress = new EmailAddress();
                    emailAddress.Address = username;
                    emailAddress.Name    = authResp.Name;
                    List <EmailAddress> listEmailAddress = new List <EmailAddress>();
                    listEmailAddress.Add(emailAddress);

                    contentEmail = contentEmail.Replace("[user]", emailAddress.Name);

                    EmailAddress emailAddressFrom = new EmailAddress();
                    emailAddressFrom.Address = "*****@*****.**";
                    emailAddressFrom.Name    = "Lojualguebeli.com";
                    List <EmailAddress> listEmailAddressFrom = new List <EmailAddress>();
                    listEmailAddressFrom.Add(emailAddressFrom);

                    EmailMessage emailMessage = new EmailMessage();
                    emailMessage.ToAddresses   = listEmailAddress;
                    emailMessage.Subject       = subjectEmail;
                    emailMessage.FromAddresses = listEmailAddressFrom;
                    emailMessage.Content       = contentEmail;

                    sendEmail.Send(emailMessage);
                    #endregion
                }

                return(Ok(response));
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
        public void Split_transaction_request()
        {
            var schema = TypedSchemaFactory.FromType <Order>();

            var requests = new List <DataRequest>();

            // simple put requests
            for (int i = 0; i < 100; i++)
            {
                var order1 = new Order {
                    Id = Guid.NewGuid(), Category = "geek", ProductId = 123, Quantity = 1
                };

                var putRequest = new PutRequest("orders");
                var packed1    = PackedObject.Pack(order1, schema, "orders");
                putRequest.Items.Add(packed1);

                requests.Add(putRequest);
            }

            // conditional put requests
            for (int i = 0; i < 100; i++)
            {
                var order1 = new Order {
                    Id = Guid.NewGuid(), Category = "geek", ProductId = 123, Quantity = 1
                };

                var putRequest = new PutRequest("orders");
                var packed1    = PackedObject.Pack(order1, schema, "orders");
                putRequest.Items.Add(packed1);
                putRequest.Predicate = ExpressionTreeHelper.PredicateToQuery <Order>(o => o.IsDelivered, "orders");

                requests.Add(putRequest);
            }

            // simple delete requests
            for (int i = 0; i < 100; i++)
            {
                var order1 = new Order {
                    Id = Guid.NewGuid(), Category = "geek", ProductId = 123, Quantity = 1
                };
                var packed1       = PackedObject.Pack(order1, schema, "orders1");
                var deleteRequest = new RemoveRequest("orders1", packed1.PrimaryKey);

                requests.Add(deleteRequest);
            }

            // delete many request
            var deleteMany = new RemoveManyRequest(ExpressionTreeHelper.PredicateToQuery <Order>(o => o.IsDelivered, "orders"));

            requests.Add(deleteMany);


            var transactionRequest = new TransactionRequest(requests)
            {
                TransactionId = Guid.NewGuid()
            };

            var split = transactionRequest.SplitByServer(k => k.GetHashCode() % 5, 5);

            var total = split.Values.Sum(r => r.ChildRequests.Count);

            // 300 uniformly distributed + 5 (delete many) cloned on each server
            Assert.AreEqual(305, total);

            Assert.IsTrue(split.Values.All(s => s.TransactionId == transactionRequest.TransactionId));

            var tr0 = split[0];

            Assert.IsTrue(tr0.ConditionalRequests.All(r => r.HasCondition));
            Assert.IsTrue(tr0.ConditionalRequests.Any());

            var deleteManyCount = tr0.ChildRequests.Count(r => r is RemoveManyRequest);

            Assert.AreEqual(1, deleteManyCount);

            Assert.AreEqual(2, tr0.AllCollections.Length);// orders and orders1
        }
Beispiel #46
0
 abstract internal void ExecuteTransaction(TransactionRequest transactionRequest, string name, IsolationLevel iso, SqlInternalTransaction internalTransaction, bool isDelegateControlRequest);
        /// <summary>
        /// Captures a payment a.k.a POSTs a transaction.
        /// </summary>
        public async Task <TransactionResponse> PostCapture(string clientName, string id, TransactionRequest transaction)
        {
            var payment = await GetPayment(clientName, id);

            var httpOperation = payment.Operations.FirstOrDefault(o => o.Rel == "create-capture");

            if (httpOperation == null)
            {
                if (payment.Operations.Any())
                {
                    var availableOps = payment.Operations.Select(o => o.Rel).Aggregate((x, y) => x + "," + y);
                    throw new PaymentNotYetAuthorizedException(id, $"This payment cannot be captured. Available operations: {availableOps}");
                }
                throw new NoOperationsLeftException();
            }

            var url = httpOperation.Href;
            Func <ProblemsContainer, Exception> onError = m => new CouldNotPostTransactionException(id, m);
            var payload = new TransactionRequestContainer(transaction);
            var res     = await CreateInternalClient(clientName).HttpPost <TransactionRequestContainer, CaptureTransactionResponseContainer>(url, onError, payload);

            return(res.Capture.Transaction);
        }
Beispiel #48
0
        public async Task <IActionResult> Charge(string nonce)
        {
            var gateway = await _braintreeConfiguration.BraintreeGateway();

            var curentUser = await _workContext.GetCurrentUser();

            var cart = await _cartService.GetActiveCartDetails(curentUser.Id);

            var orderCreateResult = await _orderService.CreateOrder(cart.Id, PaymentProviderHelper.BraintreeProviderId, 0, OrderStatus.PendingPayment);

            if (!orderCreateResult.Success)
            {
                return(BadRequest(orderCreateResult.Error));
            }

            var order = orderCreateResult.Value;
            var zeroDecimalOrderAmount = order.OrderTotal;

            if (!CurrencyHelper.IsZeroDecimalCurrencies())
            {
                zeroDecimalOrderAmount = zeroDecimalOrderAmount * 100;
            }

            var regionInfo = new RegionInfo(CultureInfo.CurrentCulture.LCID);
            var payment    = new Payment()
            {
                OrderId       = order.Id,
                Amount        = order.OrderTotal,
                PaymentMethod = PaymentProviderHelper.BraintreeProviderId,
                CreatedOn     = DateTimeOffset.UtcNow
            };

            var lineItemsRequest = new List <TransactionLineItemRequest>();

            //TODO: Need validation
            //foreach(var item in order.OrderItems)
            //{
            //    lineItemsRequest.Add(new TransactionLineItemRequest
            //    {
            //        Description = item.Product.Description.Substring(0, 255),
            //        Name = item.Product.Name,
            //        Quantity = item.Quantity,
            //        UnitAmount = item.ProductPrice,
            //        ProductCode = item.ProductId.ToString(),
            //        TotalAmount = item.ProductPrice * item.Quantity

            //    });
            //}

            //TODO: See how customer id works
            var request = new TransactionRequest
            {
                Amount             = order.OrderTotal,
                PaymentMethodNonce = nonce,
                OrderId            = order.Id.ToString(),
                //LineItems = lineItemsRequest.ToArray(),
                //CustomerId = order.CustomerId.ToString(),
                Options = new TransactionOptionsRequest
                {
                    SubmitForSettlement       = true,
                    SkipAdvancedFraudChecking = false,
                    SkipCvv = false,
                    SkipAvs = false,
                }
            };

            var result = gateway.Transaction.Sale(request);

            if (result.IsSuccess())
            {
                var transaction = result.Target;

                payment.GatewayTransactionId = transaction.Id;
                payment.Status    = PaymentStatus.Succeeded;
                order.OrderStatus = OrderStatus.PaymentReceived;
                _paymentRepository.Add(payment);
                await _paymentRepository.SaveChangesAsync();

                return(Ok(transaction.Id));
            }
            else
            {
                string errorMessages = "";
                foreach (var error in result.Errors.DeepAll())
                {
                    errorMessages += "Error: " + (int)error.Code + " - " + error.Message + "\n";
                }

                return(BadRequest(errorMessages));
            }
        }
        /// <summary>
        /// Runs the specified argument.
        /// </summary>
        /// <param name="arg">The argument.</param>
        /// <param name="context">The context.</param>
        /// <returns>
        /// A cart with federate payment component
        /// </returns>
        public override Task <CartEmailArgument> Run(CartEmailArgument arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{this.Name}: The cart can not be null");

            var cart = arg.Cart;

            if (!cart.HasComponent <FederatedPaymentComponent>())
            {
                return(Task.FromResult(arg));
            }

            var payment = cart.GetComponent <FederatedPaymentComponent>();

            if (string.IsNullOrEmpty(payment.PaymentMethodNonce))
            {
                context.Abort(context.CommerceContext.AddMessage(
                                  context.GetPolicy <KnownResultCodes>().Error,
                                  "InvalidOrMissingPropertyValue",
                                  new object[] { "PaymentMethodNonce" },
                                  $"Invalid or missing value for property 'PaymentMethodNonce'."), context);

                return(Task.FromResult(arg));
            }

            var braintreeClientPolicy = context.GetPolicy <BraintreeClientPolicy>();

            if (string.IsNullOrEmpty(braintreeClientPolicy?.Environment) || string.IsNullOrEmpty(braintreeClientPolicy?.MerchantId) ||
                string.IsNullOrEmpty(braintreeClientPolicy?.PublicKey) || string.IsNullOrEmpty(braintreeClientPolicy?.PrivateKey))
            {
                context.CommerceContext.AddMessage(
                    context.GetPolicy <KnownResultCodes>().Error,
                    "InvalidClientPolicy",
                    new object[] { "BraintreeClientPolicy" },
                    $"{this.Name}. Invalid BraintreeClientPolicy");
                return(Task.FromResult(arg));
            }

            try
            {
                var gateway = new BraintreeGateway(braintreeClientPolicy?.Environment, braintreeClientPolicy?.MerchantId, braintreeClientPolicy?.PublicKey, braintreeClientPolicy?.PrivateKey);

                var request = new TransactionRequest
                {
                    Amount             = payment.Amount.Amount,
                    PaymentMethodNonce = payment.PaymentMethodNonce,
                    BillingAddress     = ComponentsHelper.TranslatePartyToAddressRequest(payment.BillingParty, context),
                    Options            = new TransactionOptionsRequest
                    {
                        SubmitForSettlement = false
                    }
                };

                Result <Transaction> result = gateway.Transaction.Sale(request);

                if (result.IsSuccess())
                {
                    Transaction transaction = result.Target;
                    payment.TransactionId     = transaction?.Id;
                    payment.TransactionStatus = transaction?.Status?.ToString();
                    CreditCard cc = transaction?.CreditCard;
                    payment.MaskedNumber = cc?.MaskedNumber;
                    payment.ExpiresMonth = Int32.Parse(cc?.ExpirationMonth);
                    payment.ExpiresYear  = Int32.Parse(cc?.ExpirationYear);
                    payment.CardType     = cc?.CardType?.ToString();
                }
                else
                {
                    string errorMessages = result.Errors.DeepAll().Aggregate(string.Empty, (current, error) => current + ("Error: " + (int)error.Code + " - " + error.Message + "\n"));

                    context.Abort(context.CommerceContext.AddMessage(
                                      context.GetPolicy <KnownResultCodes>().Error,
                                      "CreatePaymentFailed",
                                      new object[] { "PaymentMethodNonce" },
                                      $"{this.Name}. Create payment failed :{ errorMessages }"), context);
                }

                return(Task.FromResult(arg));
            }
            catch (BraintreeException ex)
            {
                context.Abort(context.CommerceContext.AddMessage(
                                  context.GetPolicy <KnownResultCodes>().Error,
                                  "InvalidClientPolicy",
                                  new object[] { "BraintreeClientPolicy" },
                                  $"{this.Name}. Invalid BraintreeClientPolicy { ex.Message }"), context);
                return(Task.FromResult(arg));
            }
        }
        /// <summary>
        /// Runs the specified argument.
        /// </summary>
        /// <param name="arg">The argument.</param>
        /// <param name="context">The context.</param>
        /// <returns>
        /// A cart with federate payment component
        /// </returns>
        public override async Task <Order> Run(Order arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{this.Name}: order can not be null.");

            var order = arg;

            if (!order.HasComponent <OnHoldOrderComponent>())
            {
                var invalidOrderStateMessage = $"{this.Name}: Expected order in '{context.GetPolicy<KnownOrderStatusPolicy>().OnHold}' status but order was in '{order.Status}' status";
                context.Abort(
                    await context.CommerceContext.AddMessage(
                        context.GetPolicy <KnownResultCodes>().ValidationError,
                        "InvalidOrderState",
                        new object[] { context.GetPolicy <KnownOrderStatusPolicy>().OnHold, order.Status },
                        invalidOrderStateMessage).ConfigureAwait(false),
                    context);
            }

            var cart = context.CommerceContext.GetEntity <Cart>(c => c.Id.Equals(order.GetComponent <OnHoldOrderComponent>().TemporaryCart.EntityTarget, StringComparison.OrdinalIgnoreCase));

            if (cart == null || !cart.HasComponent <FederatedPaymentComponent>())
            {
                return(arg);
            }

            var payment = cart.GetComponent <FederatedPaymentComponent>();

            if (string.IsNullOrEmpty(payment.PaymentMethodNonce))
            {
                context.Abort(
                    await context.CommerceContext.AddMessage(
                        context.GetPolicy <KnownResultCodes>().Error,
                        "InvalidOrMissingPropertyValue",
                        new object[] { "PaymentMethodNonce" },
                        "Invalid or missing value for property 'PaymentMethodNonce'.").ConfigureAwait(false),
                    context);

                return(arg);
            }

            if (!string.IsNullOrEmpty(payment.TransactionId))
            {
                // Federated Payment was not changed
                return(arg);
            }

            var braintreeClientPolicy = context.GetPolicy <BraintreeClientPolicy>();

            if (!(await braintreeClientPolicy.IsValid(context.CommerceContext).ConfigureAwait(false)))
            {
                return(arg);
            }

            try
            {
                var gateway = new BraintreeGateway(braintreeClientPolicy?.Environment, braintreeClientPolicy?.MerchantId, braintreeClientPolicy?.PublicKey, braintreeClientPolicy?.PrivateKey);

                // void order payment
                if (order.HasComponent <FederatedPaymentComponent>())
                {
                    var orderPayment = order.GetComponent <FederatedPaymentComponent>();

                    // void order payment
                    var voidResult = gateway.Transaction.Void(orderPayment.TransactionId);
                    if (voidResult.IsSuccess())
                    {
                        context.Logger.LogInformation($"{this.Name} - Void Payment succeeded: {orderPayment.Id}");
                        orderPayment.TransactionStatus = voidResult.Target.Status.ToString();
                        await this.GenerateSalesActivity(order, orderPayment, context).ConfigureAwait(false);
                    }
                    else
                    {
                        var errorMessages = voidResult.Errors.DeepAll().Aggregate(string.Empty, (current, error) => current + ("Error: " + (int)error.Code + " - " + error.Message + "\n"));

                        context.Abort(
                            await context.CommerceContext.AddMessage(
                                context.GetPolicy <KnownResultCodes>().Error,
                                "PaymentVoidFailed",
                                new object[] { orderPayment.TransactionId },
                                $"{this.Name}. Payment void failed for transaction { orderPayment.TransactionId }: { errorMessages }").ConfigureAwait(false),
                            context);

                        return(arg);
                    }
                }

                var request = new TransactionRequest
                {
                    Amount             = payment.Amount.Amount,
                    PaymentMethodNonce = payment.PaymentMethodNonce,
                    BillingAddress     = ComponentsHelper.TranslatePartyToAddressRequest(payment.BillingParty),
                    Options            = new TransactionOptionsRequest
                    {
                        SubmitForSettlement = false
                    }
                };

                var result = gateway.Transaction.Sale(request);
                if (result.IsSuccess())
                {
                    var transaction = result.Target;
                    payment.TransactionId         = transaction?.Id;
                    payment.TransactionStatus     = transaction?.Status?.ToString();
                    payment.PaymentInstrumentType = transaction?.PaymentInstrumentType?.ToString();

                    var cc = transaction?.CreditCard;
                    payment.MaskedNumber = cc?.MaskedNumber;
                    payment.CardType     = cc?.CardType?.ToString();
                    if (cc?.ExpirationMonth != null)
                    {
                        payment.ExpiresMonth = int.Parse(cc.ExpirationMonth, System.Globalization.CultureInfo.InvariantCulture);
                    }

                    if (cc?.ExpirationYear != null)
                    {
                        payment.ExpiresYear = int.Parse(cc.ExpirationYear, System.Globalization.CultureInfo.InvariantCulture);
                    }
                }
                else
                {
                    var errorMessages = result.Errors.DeepAll().Aggregate(string.Empty, (current, error) => current + ("Error: " + (int)error.Code + " - " + error.Message + "\n"));

                    context.Abort(
                        await context.CommerceContext.AddMessage(
                            context.GetPolicy <KnownResultCodes>().Error,
                            "CreatePaymentFailed",
                            new object[] { "PaymentMethodNonce" },
                            $"{this.Name}. Create payment failed :{ errorMessages }").ConfigureAwait(false),
                        context);
                }

                return(arg);
            }
            catch (BraintreeException ex)
            {
                await context.CommerceContext.AddMessage(
                    context.GetPolicy <KnownResultCodes>().Error,
                    "InvalidClientPolicy",
                    new object[] { "BraintreeClientPolicy", ex },
                    $"{this.Name}. Invalid BraintreeClientPolicy").ConfigureAwait(false);

                return(arg);
            }
        }
        public override void ReadCallback(string tableId, object recordKey, object payload)
        {
            switch (workload.Type)
            {
            case "READ":
                // close the transaction
                this.Close();
                break;

            case "UPDATE":
                if (payload != null)
                {
                    TransactionRequest updateReq = this.resourceManager.TransactionRequest(
                        this.sessionId,
                        workload.TableId,
                        workload.Key,
                        workload.Value,
                        OperationType.Update);
                    this.txRequestGCQueue.Enqueue(updateReq);
                    this.RequestQueue.Enqueue(updateReq);
                }
                else
                {
                    this.Close();
                }
                break;

            case "DELETE":
                if (payload != null)
                {
                    TransactionRequest deleteReq = this.resourceManager.TransactionRequest(
                        this.sessionId,
                        workload.TableId,
                        workload.Key,
                        workload.Value,
                        OperationType.Delete);
                    this.txRequestGCQueue.Enqueue(deleteReq);
                    this.RequestQueue.Enqueue(deleteReq);
                }
                else
                {
                    this.Close();
                }
                break;

            case "INSERT":
                if (payload == null)
                {
                    TransactionRequest insertReq = this.resourceManager.TransactionRequest(
                        this.sessionId,
                        workload.TableId,
                        workload.Key,
                        workload.Value,
                        OperationType.Insert);
                    this.txRequestGCQueue.Enqueue(insertReq);
                    this.RequestQueue.Enqueue(insertReq);
                }
                else
                {
                    this.Close();
                }
                break;

            default:
                this.Close();
                break;
            }
        }
Beispiel #52
0
 abstract internal void ExecuteTransaction(TransactionRequest transactionRequest, string name, IsolationLevel iso, SqlInternalTransaction internalTransaction);
Beispiel #53
0
 public ActionResult GetManyOutputsTransactionState(
     TransactionRequest request)
 => StatusCode(StatusCodes.Status501NotImplemented);
Beispiel #54
0
        public IGoogleAnalyticsRequest CreateRequest(string hitType, IEnumerable <Parameter> requestParameters = null)
        {
            if (hitType == null)
            {
                throw new ArgumentNullException(nameof(hitType));
            }

            IGoogleAnalyticsRequest request;

            switch (hitType.ToLower())
            {
            case HitTypes.PageView:

                request = new PageViewRequest(_proxy);
                break;

            case HitTypes.Event:

                request = new EventRequest(_proxy);
                break;

            case HitTypes.Exception:

                request = new ExceptionTrackingRequest(_proxy);
                break;

            case HitTypes.Item:

                request = new ItemRequest(_proxy);
                break;

            case HitTypes.ScreenView:

                request = new ScreenTrackingRequest(_proxy);
                break;

            case HitTypes.Social:

                request = new SocialInteractionsRequest(_proxy);
                break;

            case HitTypes.Timing:

                request = new UserTimingTrackingRequest(_proxy);
                break;

            case HitTypes.Transaction:

                request = new TransactionRequest(_proxy);
                break;


            default:
                throw new ApplicationException("Unknown hitType: " + hitType);
            }

            request.Parameters.Add(_protocolVersion);
            request.Parameters.Add(_trackingId);

            if (requestParameters != null)
            {
                request.Parameters.AddRange(requestParameters);
            }

            return(request);
        }
Beispiel #55
0
        public async void UpdateRanks()
        {
            Console.WriteLine("Doing rank job");

            using (VooperContext context = new VooperContext(DBOptions))
            {
                Group government = context.Groups.AsQueryable().FirstOrDefault(x => x.Name == "Vooperia");

                if (government == null)
                {
                    Console.WriteLine("Holy f**k something is wrong.");
                }

                leaderboard = context.Users.AsEnumerable().Where(u => u.Email != u.UserName).OrderByDescending(u => u.GetTotalXP()).ToList();

                List <SocketGuildUser> userList = new List <SocketGuildUser>();

                // Add connected users
                foreach (User userData in leaderboard)
                {
                    SocketGuildUser user = null;

                    if (userData.discord_id != null)
                    {
                        //user = server.Users.FirstOrDefault(x => x.Id == (ulong)userData.discord_id);
                        user = server.GetUser((ulong)userData.discord_id);
                    }

                    if (user != null)
                    {
                        // Clear roles if muted
                        if (userData.GetDiscordRoles().Any(r => r.Name == "Muted"))
                        {
                            if (user.Roles.Contains(spleenRole))
                            {
                                await user.RemoveRoleAsync(spleenRole);
                            }
                            if (user.Roles.Contains(crabRole))
                            {
                                await user.RemoveRoleAsync(crabRole);
                            }
                            if (user.Roles.Contains(gatyRole))
                            {
                                await user.RemoveRoleAsync(gatyRole);
                            }
                            if (user.Roles.Contains(corgiRole))
                            {
                                await user.RemoveRoleAsync(corgiRole);
                            }
                            if (user.Roles.Contains(oofRole))
                            {
                                await user.RemoveRoleAsync(oofRole);
                            }
                        }
                        else
                        {
                            userList.Add(user);
                        }
                    }
                }

                int counter = 0;

                int totalUsers = userList.Count;


                GovControls govControls = await GovControls.GetCurrentAsync(context);

                decimal UBITotal = govControls.UBIAccount;
                govControls.UBIAccount = 0;

                context.GovControls.Update(govControls);
                await context.SaveChangesAsync();


                int spleenUserCount = totalUsers / 100;
                int crabUserCount   = (totalUsers / 20) - spleenUserCount;
                int gatyUserCount   = (totalUsers / 10) - spleenUserCount - crabUserCount;
                int corgiUserCount  = (totalUsers / 4) - spleenUserCount - crabUserCount - gatyUserCount;
                int oofUserCount    = (totalUsers / 2) - spleenUserCount - crabUserCount - gatyUserCount - corgiUserCount;

                int unrankedCount = totalUsers - spleenUserCount - crabUserCount - gatyUserCount - corgiUserCount - oofUserCount;

                decimal spleenPay   = 0.0m;
                decimal crabPay     = 0.0m;
                decimal gatyPay     = 0.0m;
                decimal corgiPay    = 0.0m;
                decimal oofPay      = 0.0m;
                decimal unrankedPay = 0.0m;

                if (spleenUserCount > 0)
                {
                    spleenPay = (UBITotal * (govControls.SpleenPayPercent / 100.0m)) / spleenUserCount;
                }
                if (crabUserCount > 0)
                {
                    crabPay = (UBITotal * (govControls.CrabPayPercent / 100.0m)) / crabUserCount;
                }
                if (gatyUserCount > 0)
                {
                    gatyPay = (UBITotal * (govControls.GatyPayPercent / 100.0m)) / gatyUserCount;
                }
                if (corgiUserCount > 0)
                {
                    corgiPay = (UBITotal * (govControls.CorgiPayPercent / 100.0m)) / corgiUserCount;
                }
                if (oofUserCount > 0)
                {
                    oofPay = (UBITotal * (govControls.OofPayPercent / 100.0m)) / oofUserCount;
                }
                if (unrankedCount > 0)
                {
                    unrankedPay = (UBITotal * (govControls.UnrankedPayPercent / 100.0m)) / unrankedCount;
                }

                foreach (SocketGuildUser discordUser in userList)
                {
                    User webUser = context.Users.FirstOrDefault(u => u.discord_id == discordUser.Id);

                    // Update pfp in storage
                    webUser.Image_Url = webUser.GetPfpUrl();
                    context.Update(webUser);
                    await context.SaveChangesAsync();

                    bool hasSpleen = discordUser.Roles.Contains(spleenRole);
                    bool hasCrab   = discordUser.Roles.Contains(crabRole);
                    bool hasGaty   = discordUser.Roles.Contains(gatyRole);
                    bool hasCorgi  = discordUser.Roles.Contains(corgiRole);
                    bool hasOof    = discordUser.Roles.Contains(oofRole);

                    bool hasCitizen  = discordUser.Roles.Contains(patreonCitizen) || discordUser.Roles.Contains(youtubeCitizen);
                    bool hasSoldier  = discordUser.Roles.Contains(patreonSoldier);
                    bool hasLoyalist = discordUser.Roles.Contains(patreonLoyalist);
                    bool hasHero     = discordUser.Roles.Contains(patreonHero);
                    bool hasMadlad   = discordUser.Roles.Contains(patreonMadlad);

                    bool patron = hasCitizen || hasSoldier || hasLoyalist || hasHero || hasMadlad;

                    // Inactivity tax
                    if (Math.Abs(webUser.Discord_Last_Message_Time.Subtract(DateTime.UtcNow).TotalDays) > 14 && !patron)
                    {
                        decimal tax = webUser.Credits * (govControls.InactivityTaxRate / 100.0M);

                        TransactionRequest req = new TransactionRequest(webUser.Id, EconomyManager.VooperiaID, tax, "Inactivity Tax", ApplicableTax.None, true);

                        TaskResult result = await req.Execute();

                        if (result.Succeeded)
                        {
                            govControls.InactivityTaxRevenue += tax;

                            // Add to UBI
                            govControls.UBIAccount += tax * (govControls.UBIBudgetPercent / 100.0M);

                            context.GovControls.Update(govControls);

                            await context.SaveChangesAsync();
                        }

                        // Remove last role
                        if (hasSpleen)
                        {
                            await discordUser.RemoveRoleAsync(spleenRole);
                        }
                        if (hasCrab)
                        {
                            await discordUser.RemoveRoleAsync(crabRole);
                        }
                        if (hasGaty)
                        {
                            await discordUser.RemoveRoleAsync(gatyRole);
                        }
                        if (hasCorgi)
                        {
                            await discordUser.RemoveRoleAsync(corgiRole);
                        }
                        if (hasOof)
                        {
                            await discordUser.RemoveRoleAsync(oofRole);
                        }

                        continue;
                    }

                    // Set district
                    if (!String.IsNullOrWhiteSpace(webUser.district))
                    {
                        var oldDistrictRoles = discordUser.Roles.Where(x => x.Name.Contains("District") && !x.Name.Contains(webUser.district));

                        if (oldDistrictRoles.Count() > 0)
                        {
                            await discordUser.RemoveRolesAsync(oldDistrictRoles);
                        }

                        if (!discordUser.Roles.Any(x => x.Name == webUser.district + " District"))
                        {
                            await discordUser.AddRoleAsync(districtRoles[webUser.district + " District"]);
                        }
                    }

                    // Spleen rank
                    if (counter <= spleenUserCount)
                    {
                        // Add new role
                        if (!hasSpleen)
                        {
                            await discordUser.AddRoleAsync(spleenRole);
                        }

                        // Remove last role
                        if (hasCrab)
                        {
                            await discordUser.RemoveRoleAsync(crabRole);
                        }
                        if (hasGaty)
                        {
                            await discordUser.RemoveRoleAsync(gatyRole);
                        }
                        if (hasCorgi)
                        {
                            await discordUser.RemoveRoleAsync(corgiRole);
                        }
                        if (hasOof)
                        {
                            await discordUser.RemoveRoleAsync(oofRole);
                        }

                        if (webUser != null)
                        {
                            //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 238827, "UBI Mistake Fix", ApplicableTax.None, true);
                            TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, spleenPay, "UBI Payment", ApplicableTax.None, true);
                            EconomyManager.RequestTransaction(transaction);
                        }
                    }
                    // Crab rank
                    else if (counter <= spleenUserCount + crabUserCount)
                    {
                        // Add new role
                        if (!hasCrab)
                        {
                            await discordUser.AddRoleAsync(crabRole);
                        }

                        // Remove last role
                        if (hasSpleen)
                        {
                            await discordUser.RemoveRoleAsync(spleenRole);
                        }
                        if (hasGaty)
                        {
                            await discordUser.RemoveRoleAsync(gatyRole);
                        }
                        if (hasCorgi)
                        {
                            await discordUser.RemoveRoleAsync(corgiRole);
                        }
                        if (hasOof)
                        {
                            await discordUser.RemoveRoleAsync(oofRole);
                        }

                        if (webUser != null)
                        {
                            //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 146267, "UBI Mistake Fix", ApplicableTax.None, true);
                            TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, crabPay, "UBI Payment", ApplicableTax.None, true);
                            EconomyManager.RequestTransaction(transaction);
                        }
                    }
                    // Gaty rank
                    else if (counter <= spleenUserCount + crabUserCount + gatyUserCount)
                    {
                        // Add new role
                        if (!hasGaty)
                        {
                            await discordUser.AddRoleAsync(gatyRole);
                        }

                        // Remove last role
                        if (hasSpleen)
                        {
                            await discordUser.RemoveRoleAsync(spleenRole);
                        }
                        if (hasCrab)
                        {
                            await discordUser.RemoveRoleAsync(crabRole);
                        }
                        if (hasCorgi)
                        {
                            await discordUser.RemoveRoleAsync(corgiRole);
                        }
                        if (hasOof)
                        {
                            await discordUser.RemoveRoleAsync(oofRole);
                        }

                        if (webUser != null)
                        {
                            //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 125698, "UBI Mistake Fix", ApplicableTax.None, true);
                            TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, gatyPay, "UBI Payment", ApplicableTax.None, true);
                            EconomyManager.RequestTransaction(transaction);
                        }
                    }
                    // Corgi rank
                    else if (counter <= spleenUserCount + crabUserCount + gatyUserCount + corgiUserCount)
                    {
                        // Add new role
                        if (!hasCorgi)
                        {
                            await discordUser.AddRoleAsync(corgiRole);
                        }

                        // Remove last role
                        if (hasSpleen)
                        {
                            await discordUser.RemoveRoleAsync(spleenRole);
                        }
                        if (hasCrab)
                        {
                            await discordUser.RemoveRoleAsync(crabRole);
                        }
                        if (hasGaty)
                        {
                            await discordUser.RemoveRoleAsync(gatyRole);
                        }
                        if (hasOof)
                        {
                            await discordUser.RemoveRoleAsync(oofRole);
                        }

                        if (webUser != null)
                        {
                            //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 110369, "UBI Mistake Fix", ApplicableTax.None, true);
                            TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, corgiPay, "UBI Payment", ApplicableTax.None, true);
                            EconomyManager.RequestTransaction(transaction);
                        }
                    }
                    // Oof rank
                    else if (counter <= spleenUserCount + crabUserCount + gatyUserCount + corgiUserCount + oofUserCount)
                    {
                        // Add new role
                        if (!hasOof)
                        {
                            await discordUser.AddRoleAsync(oofRole);
                        }

                        // Remove last role
                        if (hasSpleen)
                        {
                            await discordUser.RemoveRoleAsync(spleenRole);
                        }
                        if (hasCrab)
                        {
                            await discordUser.RemoveRoleAsync(crabRole);
                        }
                        if (hasGaty)
                        {
                            await discordUser.RemoveRoleAsync(gatyRole);
                        }
                        if (hasCorgi)
                        {
                            await discordUser.RemoveRoleAsync(corgiRole);
                        }

                        if (webUser != null)
                        {
                            //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 91085, "UBI Mistake Fix", ApplicableTax.None, true);
                            TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, oofPay, "UBI Payment", ApplicableTax.None, true);
                            EconomyManager.RequestTransaction(transaction);
                        }
                    }
                    // Unranked
                    else
                    {
                        // Remove last role
                        if (hasSpleen)
                        {
                            await discordUser.RemoveRoleAsync(spleenRole);
                        }
                        if (hasCrab)
                        {
                            await discordUser.RemoveRoleAsync(crabRole);
                        }
                        if (hasGaty)
                        {
                            await discordUser.RemoveRoleAsync(gatyRole);
                        }
                        if (hasCorgi)
                        {
                            await discordUser.RemoveRoleAsync(corgiRole);
                        }
                        if (hasOof)
                        {
                            await discordUser.RemoveRoleAsync(oofRole);
                        }

                        if (webUser != null)
                        {
                            //TransactionRequest transaction = new TransactionRequest(webUser.economy_id, government.economy_id, 125698, "UBI Mistake Fix", ApplicableTax.None, true);
                            TransactionRequest transaction = new TransactionRequest(government.Id, webUser.Id, unrankedPay, "UBI Payment", ApplicableTax.None, true);
                            EconomyManager.RequestTransaction(transaction);
                        }
                    }

                    if (patron)
                    {
                        webUser = await context.Users.FindAsync(webUser.Id);

                        if (hasMadlad)
                        {
                            webUser.Credits += 500;
                        }
                        else if (hasHero)
                        {
                            webUser.Credits += 350;
                        }
                        else if (hasLoyalist)
                        {
                            webUser.Credits += 175;
                        }
                        else if (hasSoldier)
                        {
                            webUser.Credits += 60;
                        }
                        else if (hasCitizen)
                        {
                            webUser.Credits += 20;
                        }

                        context.Update(webUser);
                        await context.SaveChangesAsync();
                    }

                    counter++;
                }
            }


            Console.WriteLine("Finished rank system");
        }
Beispiel #56
0
 public async Task <TransactionResponse> GetTransaction(TransactionRequest request)
 {
     return(await MakePostApiCall <TransactionResponse>(ActionTransaction, request));
 }
        /// <summary>
        /// Creates a <see cref="TransactionRequest"/>.
        /// </summary>
        /// <param name="invoice">
        /// The invoice.
        /// </param>
        /// <param name="paymentMethodNonce">
        /// The payment Method Nonce.
        /// </param>
        /// <param name="customer">
        /// The customer.
        /// </param>
        /// <param name="transactionOption">
        /// The transaction Option.
        /// </param>
        /// <returns>
        /// The <see cref="TransactionRequest"/>.
        /// </returns>
        public TransactionRequest CreateTransactionRequest(IInvoice invoice, string paymentMethodNonce, ICustomer customer = null, TransactionOption transactionOption = TransactionOption.Authorize)
        {
            var request = new TransactionRequest()
                       {
                           Amount = invoice.Total,
                           OrderId = invoice.PrefixedInvoiceNumber(),
                           PaymentMethodNonce = paymentMethodNonce,
                           BillingAddress = CreateAddressRequest(invoice.GetBillingAddress()),
                           Channel = Constants.TransactionChannel
                       };

            if (customer != null) request.Customer = CreateCustomerRequest(customer);

            if (transactionOption == TransactionOption.SubmitForSettlement)
            {
                request.Options = new TransactionOptionsRequest() { SubmitForSettlement = true };
            }

            return request;
        }
Beispiel #58
0
        public async Task <IActionResult> SummaryPost(IFormCollection collection, ProductUserVM ProductUserVM)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            if (User.IsInRole(WC.AdminRole))
            {
                //we need to create an order
                //var orderTotal = 0.0;
                //foreach(Product prod in ProductUserVM.ProductList)
                //{
                //    orderTotal += prod.Price * prod.TempSqFt;
                //}
                OrderHeader orderHeader = new OrderHeader()
                {
                    CreatedByUserId = claim.Value,
                    FinalOrderTotal = ProductUserVM.ProductList.Sum(x => x.TempSqFt * x.Price),
                    City            = ProductUserVM.ApplicationUser.City,
                    StreetAddress   = ProductUserVM.ApplicationUser.StreetAddress,
                    State           = ProductUserVM.ApplicationUser.State,
                    PostalCode      = ProductUserVM.ApplicationUser.PostalCode,
                    FullName        = ProductUserVM.ApplicationUser.FullName,
                    Email           = ProductUserVM.ApplicationUser.Email,
                    PhoneNumber     = ProductUserVM.ApplicationUser.PhoneNumber,
                    OrderDate       = DateTime.Now,
                    OrderStatus     = WC.StatusPending
                };
                _orderHRepo.Add(orderHeader);
                _orderHRepo.Save();

                foreach (var prod in ProductUserVM.ProductList)
                {
                    OrderDetail orderDetail = new OrderDetail()
                    {
                        OrderHeaderId = orderHeader.Id,
                        PricePerSqFt  = prod.Price,
                        Sqft          = prod.TempSqFt,
                        ProductId     = prod.Id
                    };
                    _orderDRepo.Add(orderDetail);
                }
                _orderDRepo.Save();

                string nonceFromTheClient = collection["payment_method_nonce"];

                var request = new TransactionRequest
                {
                    Amount             = Convert.ToDecimal(orderHeader.FinalOrderTotal),
                    PaymentMethodNonce = nonceFromTheClient,
                    OrderId            = orderHeader.Id.ToString(),
                    Options            = new TransactionOptionsRequest
                    {
                        SubmitForSettlement = true
                    }
                };

                var gateway = _brain.GetGateway();
                Result <Transaction> result = gateway.Transaction.Sale(request);

                if (result.Target.ProcessorResponseText == "Approved")
                {
                    orderHeader.TransactionId = result.Target.Id;
                    orderHeader.OrderStatus   = WC.StatusApproved;
                }
                else
                {
                    orderHeader.OrderStatus = WC.StatusCancelled;
                }
                _orderHRepo.Save();
                return(RedirectToAction(nameof(InquiryConfirmation), new { id = orderHeader.Id }));
            }
            else
            {
                //we need to create an inquiry
                var PathToTemplate = _webHostEnvironment.WebRootPath + Path.DirectorySeparatorChar.ToString()
                                     + "templates" + Path.DirectorySeparatorChar.ToString() +
                                     "Inquiry.html";

                var    subject  = "New Inquiry";
                string HtmlBody = "";
                using (StreamReader sr = System.IO.File.OpenText(PathToTemplate))
                {
                    HtmlBody = sr.ReadToEnd();
                }
                //Name: { 0}
                //Email: { 1}
                //Phone: { 2}
                //Products: {3}

                StringBuilder productListSB = new StringBuilder();
                foreach (var prod in ProductUserVM.ProductList)
                {
                    productListSB.Append($" - Name: { prod.Name} <span style='font-size:14px;'> (ID: {prod.Id})</span><br />");
                }

                string messageBody = string.Format(HtmlBody,
                                                   ProductUserVM.ApplicationUser.FullName,
                                                   ProductUserVM.ApplicationUser.Email,
                                                   ProductUserVM.ApplicationUser.PhoneNumber,
                                                   productListSB.ToString());


                await _emailSender.SendEmailAsync(WC.EmailAdmin, subject, messageBody);

                InquiryHeader inquiryHeader = new InquiryHeader()
                {
                    ApplicationUserId = claim.Value,
                    FullName          = ProductUserVM.ApplicationUser.FullName,
                    Email             = ProductUserVM.ApplicationUser.Email,
                    PhoneNumber       = ProductUserVM.ApplicationUser.PhoneNumber,
                    InquiryDate       = DateTime.Now
                };

                _inqHRepo.Add(inquiryHeader);
                _inqHRepo.Save();

                foreach (var prod in ProductUserVM.ProductList)
                {
                    InquiryDetail inquiryDetail = new InquiryDetail()
                    {
                        InquiryHeaderId = inquiryHeader.Id,
                        ProductId       = prod.Id,
                    };
                    _inqDRepo.Add(inquiryDetail);
                }
                _inqDRepo.Save();
                TempData[WC.Success] = "Inquiry submitted successfully";
            }



            return(RedirectToAction(nameof(InquiryConfirmation)));
        }
Beispiel #59
0
        static Guid?CreateTransactionExample(Configuration configuration)
        {
            TransactionsApi api = new TransactionsApi(configuration);

            // Please check our documentation at https://docs.transferzero.com/docs/transaction-flow/
            // for details on how transactions work

            // When adding a sender to transaction, please use either an id or external_id. Providing both will result in a validation error.
            // Please see our documentation at https://docs.transferzero.com/docs/transaction-flow/#sender

            Sender sender = new Sender(id: Guid.Parse("058de445-ffff-ffff-ffff-da9c751d14bf"));

            // You can find the various payout options at https://docs.transferzero.com/docs/transaction-flow/#payout-details

            PayoutMethodDetails ngnBankDetails = new PayoutMethodDetails(
                bankAccount: "123456789",
                bankAccountType: PayoutMethodBankAccountTypeEnum._20,
                bankCode: "082",
                firstName: "First",
                lastName: "Last"
                );

            PayoutMethod payoutMethod = new PayoutMethod(
                type: "NGN::Bank",
                details: ngnBankDetails
                );

            // Please see https://docs.transferzero.com/docs/transaction-flow/#requested-amount-and-currency
            // on what the request amount and currencies do

            Recipient recipient = new Recipient(
                requestedAmount: 10000,
                requestedCurrency: "NGN",
                payoutMethod: payoutMethod
                );

            // Similarly you can check https://docs.transferzero.com/docs/transaction-flow/#requested-amount-and-currency
            // on details about the input currency parameter

            // Find more details on external IDs at https://docs.transferzero.com/docs/transaction-flow/#external-id

            Transaction transaction = new Transaction(
                inputCurrency: "USD",
                sender: sender,
                recipients: new List <Recipient>()
            {
                recipient
            },
                externalId: "TRANSACTION-00001"
                );

            try
            {
                TransactionRequest transactionRequest = new TransactionRequest(
                    transaction: transaction
                    );
                TransactionResponse transactionResponse = api.PostTransactions(transactionRequest);
                System.Console.WriteLine("Transaction created! ID" + transactionResponse.Object.Id);
                System.Console.WriteLine(transactionResponse.Object);
                return(transactionResponse.Object.Id);
            }
            catch (ApiException e)
            {
                if (e.IsValidationError)
                {
                    TransactionResponse transactionResponse = e.ParseObject <TransactionResponse>();
                    System.Console.WriteLine("Validation Error" + transactionResponse.Object.Errors);
                }
                else
                {
                    throw e;
                }
                return(null);
            }
        }
Beispiel #60
0
        public async Task <ActionResult> Index(Checkout model)
        {
            //Check if the model-state is valid -- this will catch anytime someone hacks your client-side validation (If Valid then Transaction may begin)
            if (ModelState.IsValid)
            {
                var gateway = new BraintreeGateway
                {
                    Environment = Braintree.Environment.SANDBOX,
                    MerchantId  = ConfigurationManager.AppSettings["Braintree.MerchantID"],
                    PublicKey   = ConfigurationManager.AppSettings["Braintree.PublicKey"],
                    PrivateKey  = ConfigurationManager.AppSettings["Braintree.PrivateKey"]
                };

                CustomerSearchRequest searchRequest = new CustomerSearchRequest();
                searchRequest.Email.Is(model.ContactEmail);

                Customer c = null;
                var      existingCustomers = await gateway.Customer.SearchAsync(searchRequest);

                if (existingCustomers.Ids.Any())
                {
                    c = existingCustomers.FirstItem;
                }
                else
                {
                    CustomerRequest newCustomer = new CustomerRequest();
                    newCustomer.Email = model.ContactEmail;
                    var customerResult = await gateway.Customer.CreateAsync(newCustomer);

                    if (customerResult.IsSuccess())
                    {
                        c = customerResult.Target;
                    }
                    else
                    {
                        throw new Exception(customerResult.Errors.All().First().Message);
                    }
                }


                string token;

                CreditCardRequest card = new CreditCardRequest();
                card.Number          = model.CreditCardNumber;
                card.CVV             = model.CreditCardVerificationValue;
                card.ExpirationMonth = model.CreditCardExpirationMonth.ToString().PadLeft(2, '0');
                card.ExpirationYear  = model.CreditCardExpirationYear.ToString();
                card.CardholderName  = model.NameOnCard;
                card.CustomerId      = c.Id;
                var cardResult = await gateway.CreditCard.CreateAsync(card);

                if (cardResult.IsSuccess())
                {
                    token = cardResult.Target.Token;
                }
                else
                {
                    throw new Exception(cardResult.Errors.All().First().Message);
                }


                //HttpCookie cartCookie = Request.Cookies["cart"];
                //var order = db.Orders.Find(int.Parse(cartCookie.Value));

                Braintree.TransactionRequest transaction = new TransactionRequest();

                transaction.Amount             = new ViewModel.BasketSummaryViewModel().TotalCost;;
                transaction.CustomerId         = c.Id;
                transaction.PaymentMethodToken = token;
                var saleResult = await gateway.Transaction.SaleAsync(transaction);

                if (saleResult.IsSuccess())
                {
                    return(RedirectToAction("Index", "Home"));
                    //Need to create a Receipt Controller, as well as a View to show receipt, send email confirmation.
                    //Check Joe's Github for inspiration
                }
            }
            return(View(model));
        }