public async Task <Result <NGeniusPaymentResponse> > Pay(string code, NGeniusPayByLinkRequest request, string ip, string languageCode) { var(_, isFailure, link, error) = await _storage.Get(code); if (isFailure) { return(Result.Failure <NGeniusPaymentResponse>(error)); } return(await _nGeniusClient.CreateOrder(orderType : OrderTypes.Sale, referenceCode : link.ReferenceCode, currency : link.Currency, price : link.Amount, email : request.EmailAddress, billingAddress : request.BillingAddress) .Bind(SaveExternalId)); async Task <Result <NGeniusPaymentResponse> > SaveExternalId(NGeniusPaymentResponse response) { await _storage.SetExternalId(code, response.OrderReference); return(response); } }
public async Task <IActionResult> PayViaNGenius([Required] string code, [FromBody] NGeniusPayByLinkRequest request) { var(isSuccess, _, paymentResponse, error) = await _paymentLinksProcessingService.Pay(code, request, ClientIp, LanguageCode); return(isSuccess ? Ok(paymentResponse) : (IActionResult)BadRequest(ProblemDetailsBuilder.Build(error))); }