6 changed files with 85 additions and 8 deletions
@ -0,0 +1,7 @@ |
|||
namespace EShopOnAbp.PublicWeb |
|||
{ |
|||
public static class EShopOnAbpPaymentConsts |
|||
{ |
|||
public const string Currency = "USD"; |
|||
} |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
using AutoMapper; |
|||
using EShopOnAbp.BasketService; |
|||
using EShopOnAbp.PaymentService; |
|||
|
|||
namespace EShopOnAbp.PublicWeb |
|||
{ |
|||
public class EShopOnAbpPublicAutoMapperProfile : Profile |
|||
{ |
|||
public EShopOnAbpPublicAutoMapperProfile() |
|||
{ |
|||
CreateMap<BasketItemDto, PaymentRequestProductCreationDto>() |
|||
.ForMember(p => p.ReferenceId, opts => opts.MapFrom(p => p.ProductId.ToString())) |
|||
.ForMember(p => p.Name, opts => opts.MapFrom(p => p.ProductName)) |
|||
.ForMember(p => p.UnitPrice, opts => opts.MapFrom(p => p.TotalPrice / p.Count)) |
|||
.ForMember(p => p.Quantity, opts => opts.MapFrom(p => p.Count)); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
namespace EShopOnAbp.PublicWeb |
|||
{ |
|||
public class EShopOnAbpPublicWebPaymentOptions |
|||
{ |
|||
public string PaymentSuccessfulCallbackUrl { get; set; } |
|||
public string PaymentFailureCallbackUrl { get; set; } |
|||
} |
|||
} |
|||
@ -1,30 +1,59 @@ |
|||
using System.Threading.Tasks; |
|||
using EShopOnAbp.BasketService; |
|||
using EShopOnAbp.BasketService; |
|||
using EShopOnAbp.PaymentService; |
|||
using EShopOnAbp.PaymentService.PaymentRequests; |
|||
using EShopOnAbp.PublicWeb.Basket; |
|||
using Microsoft.AspNetCore.Authorization; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.Extensions.Logging; |
|||
using Microsoft.Extensions.Options; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
|||
using Volo.Abp.Users; |
|||
|
|||
namespace EShopOnAbp.PublicWeb.Pages; |
|||
|
|||
[Authorize] |
|||
public class PaymentModel : AbpPageModel |
|||
{ |
|||
private readonly IBasketAppService _basketAppService; |
|||
private readonly IPaymentRequestAppService _paymentRequestAppService; |
|||
private readonly UserBasketProvider _userBasketProvider; |
|||
private readonly EShopOnAbpPublicWebPaymentOptions _publicWebPaymentOptions; |
|||
|
|||
public PaymentModel(IBasketAppService basketAppService) |
|||
public PaymentModel( |
|||
IPaymentRequestAppService paymentRequestAppService, |
|||
UserBasketProvider userBasketProvider, |
|||
IOptions<EShopOnAbpPublicWebPaymentOptions> publicWebPaymentOptions) |
|||
{ |
|||
_basketAppService = basketAppService; |
|||
_paymentRequestAppService = paymentRequestAppService; |
|||
_userBasketProvider = userBasketProvider; |
|||
_publicWebPaymentOptions = publicWebPaymentOptions.Value; |
|||
} |
|||
|
|||
public void OnGet() |
|||
{ |
|||
} |
|||
|
|||
public async Task<IActionResult> OnPostAsync() |
|||
{ |
|||
Logger.LogInformation("Payment Proceeded..."); |
|||
await _basketAppService.PurchaseAsync(); |
|||
|
|||
return RedirectToPage("PaymentCompleted"); |
|||
var basket = await _userBasketProvider.GetBasketAsync(); |
|||
|
|||
var paymentRequest = await _paymentRequestAppService.CreateAsync(new PaymentRequestCreationDto |
|||
{ |
|||
BuyerId = CurrentUser.GetId().ToString(), |
|||
Currency = EShopOnAbpPaymentConsts.Currency, |
|||
Products = ObjectMapper.Map<List<BasketItemDto>, List<PaymentRequestProductCreationDto>>(basket.Items) |
|||
}); |
|||
|
|||
var response = await _paymentRequestAppService.StartAsync(new PaymentRequestStartDto |
|||
{ |
|||
ReturnUrl = _publicWebPaymentOptions.PaymentSuccessfulCallbackUrl, |
|||
PaymentRequestId = paymentRequest.Id, |
|||
CancelUrl = _publicWebPaymentOptions.PaymentFailureCallbackUrl, |
|||
}); |
|||
|
|||
return Redirect(response.CheckoutLink); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue