feat: implement Cash on Delivery (COD) payment method
This commit adds comprehensive COD support using Saleor's native Transaction system:
**Architecture:**
- Uses Saleor's native Transaction objects (not metadata)
- Modular payment method configuration
- Extensible design for future payment types (cards, bank transfer, etc.)
**New Components:**
- PaymentMethodSelector: Reusable payment method selection UI
- PaymentMethodCard: Individual payment method card
- CODInstructions: COD-specific instructions and guidance
- PaymentSection: Checkout integration wrapper
**Core Features:**
- COD selected by default for Serbia (default-channel)
- Transaction created automatically on order completion
- Transaction visible in Saleor Dashboard
- Multi-language support (EN, SR, DE, FR)
- No additional fees
- Instructions shown to customer (prepare cash, inspect order, no fee)
**Files Added:**
- docs/COD-IMPLEMENTATION-PLAN.md
- src/lib/config/paymentMethods.ts
- src/lib/saleor/payments/types.ts
- src/lib/saleor/payments/cod.ts
- src/components/payment/PaymentMethodSelector.tsx
- src/components/payment/PaymentMethodCard.tsx
- src/components/payment/CODInstructions.tsx
- src/components/payment/index.ts
- src/app/[locale]/checkout/components/PaymentSection.tsx
**Files Modified:**
- src/app/[locale]/checkout/page.tsx (added payment section, transaction creation)
- src/i18n/messages/{en,sr,de,fr}.json (payment translations)
**Technical Details:**
- Transaction status: NOT_CHARGED
- Available actions: [CHARGE]
- PSP Reference format: COD-{orderNumber}-{timestamp}
- Staff collects cash and fulfills order via Dashboard
Closes: Cash on Delivery payment implementation
This commit is contained in:
@@ -383,6 +383,37 @@
|
||||
"thankYou": "Merci pour votre achat.",
|
||||
"orderNumber": "Numéro de Commande",
|
||||
"confirmationEmail": "Vous recevrez bientôt un email de confirmation. Nous vous contacterons pour organiser le paiement contre-remboursement.",
|
||||
"continueShoppingBtn": "Continuer les Achats"
|
||||
"continueShoppingBtn": "Continuer les Achats",
|
||||
"errorSelectPayment": "Veuillez sélectionner un mode de paiement."
|
||||
},
|
||||
"Payment": {
|
||||
"title": "Mode de Paiement",
|
||||
"selectMethod": "Sélectionner le mode de paiement",
|
||||
"securePayment": "Paiement sécurisé",
|
||||
"noMethodsAvailable": "Aucun mode de paiement disponible",
|
||||
"singleMethodNotice": "Le paiement à la livraison est le seul mode de paiement disponible pour votre région",
|
||||
"COD": {
|
||||
"name": "Paiement à la Livraison",
|
||||
"description": "Payez lors de la réception de votre commande",
|
||||
"instructions": {
|
||||
"title": "Instructions de Paiement",
|
||||
"prepareCash": "Préparer l'Argent",
|
||||
"prepareCashDesc": "Veuillez préparer le montant exact en espèces",
|
||||
"inspectOrder": "Inspecter Avant de Payer",
|
||||
"inspectOrderDesc": "Vous pouvez vérifier votre commande avant de payer",
|
||||
"noFee": "Pas de Frais Supplémentaires",
|
||||
"noFeeDesc": "Le paiement à la livraison est entièrement gratuit"
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"name": "Carte de Crédit",
|
||||
"description": "Paiement en ligne sécurisé",
|
||||
"comingSoon": "Bientôt disponible"
|
||||
},
|
||||
"bank_transfer": {
|
||||
"name": "Virement Bancaire",
|
||||
"description": "Payez par virement bancaire",
|
||||
"comingSoon": "Bientôt disponible"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user