private PayPal.Api.Payment CreatePayment(DexCMS.Tickets.Orders.Models.Order order) { var payer = new Payer { payment_method = "paypal" }; List<Transaction> transactions = BuildTransactions(order); var baseUrl = WebConfigurationManager.AppSettings["ServerUrl"] + "secure/"; var payment = new PayPal.Api.Payment { intent = "sale", payer = payer, transactions = transactions, redirect_urls = new RedirectUrls { cancel_url = baseUrl + "cancel/" + order.OrderID, return_url = baseUrl + "payment" } }; return payment; }
private List<Transaction> BuildTransactions(DexCMS.Tickets.Orders.Models.Order order) { var details = new Details { shipping = "0.00", tax = "0.00", subtotal = order.OrderTotal.ToString() }; var amount = new Amount { currency = "USD", details = details, total = order.OrderTotal.ToString() }; var itemList = new ItemList() { items = new List<Item>() }; foreach (var ticket in order.Tickets) { itemList.items.Add(new Item { name = GetTicketName(ticket), currency = "USD", price = ticket.TicketTotalPrice.ToString(), quantity = "1", sku = ticket.TicketID.ToString() }); } var transaction = new Transaction { amount = amount, description = string.Format("Order #{0} purchased from {1}", order.OrderID, SiteSettings.Resolve.GetSetting("SiteTitle")), item_list = itemList, invoice_number = order.OrderID.ToString() }; var transactions = new List<Transaction> { transaction }; return transactions; }
//[HttpDelete] //public async Task<IHttpActionResult> Delete(int id) //{ // var order = await repository.RetrieveAsync(id); // await repository.DeleteAsync(order); // return Ok(); //} //[HttpPut] //public async Task<IHttpActionResult> Put(int id, SecureOrderApiModel model) //{ // var order = await repository.RetrieveAsync(id); // if (order != null && order.UserName == User.Identity.Name) // { // var apiContext = PaypalConfiguration.GetAPIContext(); // var payment = PayPal.Api.Payment.Get(apiContext, model.PaymentID); // if (payment.state == "approved") // { // var transaction = payment.transactions.ToArray()[0]; // var sale = transaction.related_resources.ToArray()[0].sale; // if (order.Payments == null) // { // order.Payments = new List<DexCMS.Tickets.Orders.Models.Payment>(); // } // order.Payments.Add(new DexCMS.Tickets.Orders.Models.Payment // { // GrossPaid = decimal.Parse(transaction.amount.total), // NetPaid = decimal.Parse(transaction.amount.total) - decimal.Parse(sale.transaction_fee.value), // OrderID = order.OrderID, // PaidOn = Convert.ToDateTime(payment.update_time), // PaymentDetails = payment.ConvertToJson(), // PaymentFee = decimal.Parse(sale.transaction_fee.value), // PaymentType = PaymentType.Paypal // }); // order.OrderStatus = // order.OrderTotal == decimal.Parse(transaction.amount.total) ? OrderStatus.Complete : OrderStatus.Partial; // await repository.UpdateAsync(order, order.OrderID); // return Ok(); // } // else // { // return BadRequest(); // } // } // else // { // return BadRequest(); // } //} //private PayPal.Api.Payment CreatePayment(DexCMS.Tickets.Orders.Models.Order order) //{ // var payer = new Payer { payment_method = "paypal" }; // List<Transaction> transactions = BuildTransactions(order); // var baseUrl = WebConfigurationManager.AppSettings["ServerUrl"] + "secure/"; // var payment = new PayPal.Api.Payment // { // intent = "sale", // payer = payer, // transactions = transactions, // redirect_urls = new RedirectUrls // { // cancel_url = baseUrl + "cancel/" + order.OrderID, // return_url = baseUrl + "payment" // } // }; // return payment; //} private List<InvoiceItem> BuildItems(DexCMS.Tickets.Orders.Models.Order order) { var invoiceItems = new List<InvoiceItem>(); foreach (var ticket in order.Tickets) { var item = new InvoiceItem { name = GetTicketName(ticket), quantity = 1, unit_price = new Currency { currency = "USD", value = ticket.TicketTotalPrice.ToString() } }; invoiceItems.Add(item); } return invoiceItems; }