private async Task <PayPalLog> SavePaymentDetails(Payment payment, PayPalSuccessModel model) { var total = decimal.Parse(payment.transactions[0].amount.total, CultureInfo.InvariantCulture); var price = decimal.Parse(payment.transactions[0].item_list.items[0].price, CultureInfo.InvariantCulture); int.TryParse(payment.transactions[0].item_list.items[0].quantity, out var quantity); var payerInfo = payment.payer.payer_info; var shippingInfo = payerInfo.shipping_address; var payPalLog = new PayPalLog() { UserId = model.UserId, PayerId = model.PayerId, PaymentId = model.PaymentId, Total = total, Currency = "USD", Date = DateTime.Now, PayerFirstName = payerInfo.first_name, PayerLastName = payerInfo.last_name, PayerEmail = payerInfo.email, Item = "Donation Point", Price = price, Quantity = quantity, PayerPostalCode = shippingInfo.postal_code, PayerCity = shippingInfo.city }; await _websiteContext.PayPalLogs.AddAsync(payPalLog); await _websiteContext.SaveChangesAsync(); return(payPalLog); }
public async Task <IActionResult> ExecutePayment([FromBody] PayPalSuccessModel model) { var accountData = await _authContext.AccountData.FirstOrDefaultAsync(x => x.Id == model.AccountId); var payPalLog = await RetrievePaymentDetails(model); if (payPalLog != null) { return(Ok(new { dp = accountData.Dp, payPalLog })); } Payment payment; try { payment = await _payPalService.ExecutePayment(model.PayerId, model.PaymentId, model.Token); } catch (Exception e) { return(RequestHandler.BadRequest(e.Message)); } foreach (var resultTransaction in payment.transactions) { foreach (var item in resultTransaction.item_list.items) { int.TryParse(item.quantity, out var amount); accountData.Dp += amount; } } await _authContext.SaveChangesAsync(); payPalLog = await SavePaymentDetails(payment, model); return(Ok(new { dp = accountData.Dp, payPalLog })); }
private async Task <PayPalLog> RetrievePaymentDetails(PayPalSuccessModel model) { return(await _websiteContext.PayPalLogs.FirstOrDefaultAsync(x => x.UserId == model.UserId && x.PayerId == model.PayerId && x.PaymentId == model.PaymentId)); }