- Add Stripe payment provider with Checkout Session flow - Payment provider abstraction layer (EasyPay + Stripe unified interface) - Stripe webhook with proper raw body handling and signature verification - Frontend: Stripe button with URL validation, anti-duplicate click, noopener - Active timeout cancellation: query platform before expiring, recover paid orders - Singleton Stripe client, idempotency keys, Math.round for amounts - Handle async_payment events, return null for unknown webhook events - Set Checkout Session expires_at aligned with order timeout - Add cancelPayment to provider interface (Stripe: sessions.expire, EasyPay: no-op) - Enable stripe in frontend payment type list
31 lines
731 B
TypeScript
31 lines
731 B
TypeScript
import { paymentRegistry } from './registry';
|
|
import { EasyPayProvider } from '@/lib/easy-pay/provider';
|
|
import { StripeProvider } from '@/lib/stripe/provider';
|
|
import { getEnv } from '@/lib/config';
|
|
|
|
export { paymentRegistry } from './registry';
|
|
export type {
|
|
PaymentType,
|
|
PaymentProvider,
|
|
CreatePaymentRequest,
|
|
CreatePaymentResponse,
|
|
QueryOrderResponse,
|
|
PaymentNotification,
|
|
RefundRequest,
|
|
RefundResponse,
|
|
} from './types';
|
|
|
|
let initialized = false;
|
|
|
|
export function initPaymentProviders(): void {
|
|
if (initialized) return;
|
|
paymentRegistry.register(new EasyPayProvider());
|
|
|
|
const env = getEnv();
|
|
if (env.STRIPE_SECRET_KEY) {
|
|
paymentRegistry.register(new StripeProvider());
|
|
}
|
|
|
|
initialized = true;
|
|
}
|