public override async Task <PaymentFormResult> GenerateFormAsync(PaymentProviderContext <BamboraCheckoutSettings> ctx) { var currency = Vendr.Services.CurrencyService.GetCurrency(ctx.Order.CurrencyId); var currencyCode = currency.Code.ToUpperInvariant(); // Ensure currency has valid ISO 4217 code if (!Iso4217.CurrencyCodes.ContainsKey(currencyCode)) { throw new Exception("Currency must be a valid ISO 4217 currency code: " + currency.Name); } var orderAmount = (int)AmountToMinorUnits(ctx.Order.TransactionAmount.Value); var clientConfig = GetBamboraClientConfig(ctx.Settings); var client = new BamboraClient(clientConfig); // Configure checkout session var checkoutSessionRequest = new BamboraCreateCheckoutSessionRequest { InstantCaptureAmount = ctx.Settings.Capture ? orderAmount : 0, Customer = new BamboraCustomer { Email = ctx.Order.CustomerInfo.Email }, Order = new BamboraOrder { Id = BamboraSafeOrderId(ctx.Order.OrderNumber), Amount = orderAmount, Currency = currencyCode }, Urls = new BamboraUrls { Accept = ctx.Urls.ContinueUrl, Cancel = ctx.Urls.CancelUrl, Callbacks = new[] { new BamboraUrl { Url = ctx.Urls.CallbackUrl } } }, PaymentWindow = new BamboraPaymentWindow { Id = 1, Language = ctx.Settings.Language } }; // Exclude payment methods if (!string.IsNullOrWhiteSpace(ctx.Settings.ExcludedPaymentMethods)) { checkoutSessionRequest.PaymentWindow.PaymentMethods = ctx.Settings.ExcludedPaymentMethods .Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries) .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(x => new BamboraPaymentFilter { Id = x.Trim(), Action = BamboraPaymentFilter.Actions.Exclude }) .ToArray(); } // Exclude payment groups if (!string.IsNullOrWhiteSpace(ctx.Settings.ExcludedPaymentGroups)) { checkoutSessionRequest.PaymentWindow.PaymentGroups = ctx.Settings.ExcludedPaymentGroups .Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries) .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(x => new BamboraPaymentFilter { Id = x.Trim(), Action = BamboraPaymentFilter.Actions.Exclude }) .ToArray(); } // Exclude payment types if (!string.IsNullOrWhiteSpace(ctx.Settings.ExcludedPaymentTypes)) { checkoutSessionRequest.PaymentWindow.PaymentTypes = ctx.Settings.ExcludedPaymentTypes .Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries) .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(x => new BamboraPaymentFilter { Id = x.Trim(), Action = BamboraPaymentFilter.Actions.Exclude }) .ToArray(); } var checkoutSession = await client.CreateCheckoutSessionAsync(checkoutSessionRequest); if (checkoutSession.Meta.Result) { return(new PaymentFormResult() { Form = new PaymentForm(checkoutSession.Url, PaymentFormMethod.Get) }); } throw new ApplicationException(checkoutSession.Meta.Message.EndUser); }
public async Task <BamboraCheckoutSessionResponse> CreateCheckoutSessionAsync(BamboraCreateCheckoutSessionRequest request) { return(await new FlurlRequest("https://api.v1.checkout.bambora.com/sessions") .AllowAnyHttpStatus() .WithHeader("Accept", "application/json") .WithHeader("Authorization", _config.Authorization) .PostJsonAsync(request) .ReceiveJson <BamboraCheckoutSessionResponse>()); }