diff --git a/.changeset/tidy-starfishes-watch.md b/.changeset/tidy-starfishes-watch.md new file mode 100644 index 0000000000..139ec069d8 --- /dev/null +++ b/.changeset/tidy-starfishes-watch.md @@ -0,0 +1,5 @@ +--- +"@medusajs/payment-stripe": patch +--- + +feat(payment-stripe): OXXO payment provider support with configurable expiration diff --git a/packages/modules/providers/payment-stripe/src/core/stripe-base.ts b/packages/modules/providers/payment-stripe/src/core/stripe-base.ts index 5d31e5c487..ec86a32e1b 100644 --- a/packages/modules/providers/payment-stripe/src/core/stripe-base.ts +++ b/packages/modules/providers/payment-stripe/src/core/stripe-base.ts @@ -114,7 +114,8 @@ abstract class StripeBase extends AbstractPaymentProvider { extra?.payment_method_data as Stripe.PaymentIntentCreateParams.PaymentMethodData res.payment_method_options = - extra?.payment_method_options as Stripe.PaymentIntentCreateParams.PaymentMethodOptions + (extra?.payment_method_options as Stripe.PaymentIntentCreateParams.PaymentMethodOptions) ?? + this.paymentIntentOptions.payment_method_options res.automatic_payment_methods = (extra?.automatic_payment_methods as { enabled: true } | undefined) ?? diff --git a/packages/modules/providers/payment-stripe/src/index.ts b/packages/modules/providers/payment-stripe/src/index.ts index b2b1e8e7f1..9693abd5c2 100644 --- a/packages/modules/providers/payment-stripe/src/index.ts +++ b/packages/modules/providers/payment-stripe/src/index.ts @@ -7,6 +7,7 @@ import { StripeProviderService, StripePrzelewy24Service, StripePromptpayService, + OxxoProviderService, } from "./services" const services = [ @@ -17,6 +18,7 @@ const services = [ StripeProviderService, StripePrzelewy24Service, StripePromptpayService, + OxxoProviderService, ] export default ModuleProvider(Modules.PAYMENT, { diff --git a/packages/modules/providers/payment-stripe/src/services/index.ts b/packages/modules/providers/payment-stripe/src/services/index.ts index cbfeadc3fa..37fd70ae28 100644 --- a/packages/modules/providers/payment-stripe/src/services/index.ts +++ b/packages/modules/providers/payment-stripe/src/services/index.ts @@ -5,3 +5,4 @@ export { default as StripeIdealService } from "./stripe-ideal" export { default as StripeProviderService } from "./stripe-provider" export { default as StripePrzelewy24Service } from "./stripe-przelewy24" export { default as StripePromptpayService } from "./stripe-promptpay" +export { default as OxxoProviderService } from "./stripe-oxxo" diff --git a/packages/modules/providers/payment-stripe/src/services/stripe-oxxo.ts b/packages/modules/providers/payment-stripe/src/services/stripe-oxxo.ts new file mode 100644 index 0000000000..f8323feaf0 --- /dev/null +++ b/packages/modules/providers/payment-stripe/src/services/stripe-oxxo.ts @@ -0,0 +1,24 @@ +import StripeBase from "../core/stripe-base" +import { PaymentIntentOptions, PaymentProviderKeys } from "../types" + +class OxxoProviderService extends StripeBase { + static identifier = PaymentProviderKeys.OXXO + + constructor(_, options) { + super(_, options) + } + + get paymentIntentOptions(): PaymentIntentOptions { + return { + payment_method_types: ["oxxo"], + capture_method: "automatic", + payment_method_options: { + oxxo: { + expires_after_days: this.options.oxxoExpiresDays || 3, + }, + }, + } + } +} + +export default OxxoProviderService diff --git a/packages/modules/providers/payment-stripe/src/types/index.ts b/packages/modules/providers/payment-stripe/src/types/index.ts index 0a56367ec6..5763b1daae 100644 --- a/packages/modules/providers/payment-stripe/src/types/index.ts +++ b/packages/modules/providers/payment-stripe/src/types/index.ts @@ -19,12 +19,21 @@ export interface StripeOptions { * Set a default description on the intent if the context does not provide one */ paymentDescription?: string + /** + * Set the number of days before an OXXO payment expires + */ + oxxoExpiresDays?: number } export interface PaymentIntentOptions { capture_method?: "automatic" | "manual" setup_future_usage?: "on_session" | "off_session" payment_method_types?: string[] + payment_method_options?: { + oxxo?: { + expires_after_days?: number + } + } } export const ErrorCodes = { @@ -38,10 +47,11 @@ export const ErrorIntentStatus = { export const PaymentProviderKeys = { STRIPE: "stripe", + OXXO: "stripe-oxxo", BAN_CONTACT: "stripe-bancontact", BLIK: "stripe-blik", GIROPAY: "stripe-giropay", IDEAL: "stripe-ideal", PRZELEWY_24: "stripe-przelewy24", - PROMPT_PAY : "stripe-promptpay", + PROMPT_PAY: "stripe-promptpay", }