private Payment CreatePayment(IOrder order, string paymentType, string redirectUrl, CardDetails cardDetails) { //Create items for which you are taking payment var items = order.OrderDetails.GetList().Select(product => new Item { name = product.Name, currency = "GBP", price = product.Price.ToString(CultureInfo.InvariantCulture), quantity = product.Quantity.ToString(CultureInfo.InvariantCulture), sku = product.Category }).ToList(); // Create ItemList object var itemList = new ItemList { items = items }; // Specify the details of your payment amount. var subtotal = order.GetProductCost() - order.GetVat(); var details = new Details { shipping = order.DeliveryCharges.ToString(CultureInfo.InvariantCulture), subtotal = subtotal.ToString(CultureInfo.InvariantCulture), tax = order.GetVat().ToString(CultureInfo.InvariantCulture) }; // Specify your total payment amount and assign the details object var totalCost = order.GetProductCost() + order.DeliveryCharges; var amount = new Amount { currency = "GBP", total = totalCost.ToString(CultureInfo.InvariantCulture), //details = details }; // Now add transactions var transactions = new List<Transaction> { new Transaction { amount = amount, description = string.Format("Total amount = £{0}", order.GetProductCost() + order.DeliveryCharges), //item_list = itemList, //invoice_number = order.OrderNumber.ToString(CultureInfo.InvariantCulture) } }; Payer payer; if (paymentType.Equals("payPal", StringComparison.OrdinalIgnoreCase)) { payer = new Payer { payment_method = "paypal" }; } else { //Address for the payment var billingAddress = new Address { country_code = "GB", line1 = cardDetails.Address, postal_code = cardDetails.Postcode, city = cardDetails.City }; //Now Create an object of credit card and add above details to it var creditCard = new CreditCard { billing_address = billingAddress, cvv2 = cardDetails.CardVerificationCode.GetValueOrDefault().ToString(CultureInfo.InvariantCulture), expire_month = cardDetails.ExpirationMonth.GetValueOrDefault(), expire_year = cardDetails.ExpirationYear.GetValueOrDefault(), first_name = cardDetails.FirstName, last_name = cardDetails.LastName, number = cardDetails.CardNumber.GetValueOrDefault().ToString(CultureInfo.InvariantCulture), type = cardDetails.CardType.ToLower() }; // Now we need to create the FundingInstrument object of the Payer // for credit card payments, set the CreditCard which we made above var fundInstrument = new FundingInstrument { credit_card = creditCard }; // The Payment creation API requires a list of FundingIntrument var fundingInstrumentList = new List<FundingInstrument> { fundInstrument }; // Now create Payer object and assign the fundinginstrument list to the object payer = new Payer { funding_instruments = fundingInstrumentList, payment_method = "credit_card" }; } // Finally we need create the payment object and assign the payer object & transaction list to it var payment = new Payment { intent = "sale", payer = payer, transactions = transactions }; if (!string.IsNullOrEmpty(redirectUrl)) { var redirUrls = new RedirectUrls { cancel_url = redirectUrl, return_url = redirectUrl }; payment.redirect_urls = redirUrls; } return payment; }