示例#1
0
        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)));
        }