@m-nasser-m/medusa-payment-vodafone-cash-manual
Version:
Vodafone Cash manual payment provider for Medusa
274 lines (220 loc) • 7.32 kB
Markdown
<p align="center">
<a href="https://www.medusajs.com">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/59018053/229103275-b5e482bb-4601-46e6-8142-244f531cebdb.svg">
<source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
<img alt="Medusa logo" src="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
</picture>
</a>
</p>
<h1 align="center">
Vodafone Cash Manual Payment Plugin
</h1>
<h4 align="center">
<a href="https://docs.medusajs.com">Documentation</a> |
<a href="https://www.medusajs.com">Website</a>
</h4>
<p align="center">
A Medusa.js payment provider plugin for Vodafone Cash manual payments with phone number validation
</p>
## Overview
This plugin provides a manual payment provider for Vodafone Cash, a popular mobile payment service in Egypt and other African countries. The plugin includes:
- **Phone Number Validation**: Ensures phone numbers start with `0100` and are exactly 11 digits
- **Manual Payment Processing**: Allows customers to receive payment instructions and admins to verify payments manually
- **Admin Interface**: Provides endpoints for payment verification and status management
- **Store Interface**: Handles payment initiation with proper validation
## Features
- ✅ **Strict Phone Validation**: Only accepts Vodafone Cash numbers (0100XXXXXXX format)
- ✅ **Payment Instructions**: Provides clear step-by-step payment instructions to customers
- ✅ **Admin Verification**: Allows admins to verify and manage payments manually
- ✅ **Error Handling**: Comprehensive error handling with detailed validation messages
- ✅ **TypeScript Support**: Fully typed implementation following Medusa best practices
## Compatibility
This plugin is compatible with versions >= 2.4.0 of `@medusajs/medusa`.
## Installation
1. Install the plugin in your Medusa project:
```bash
npm install vodafonecash-manual-payment-plugin
# or
yarn add vodafonecash-manual-payment-plugin
```
2. Add the plugin to your `medusa-config.js`:
```javascript
module.exports = {
plugins: [
{
resolve: "vodafonecash-manual-payment-plugin",
options: {
debug: false // Optional: enable debug logging
}
}
],
modules: {
paymentProviders: {
resolve: "@medusajs/medusa/payment",
options: {
providers: [
{
resolve: "vodafonecash-manual-payment-plugin/providers/vodafone-cash",
id: "vodafone-cash",
options: {
debug: false
}
}
]
}
}
}
}
```
## Usage
### Customer Payment Flow
1. **Payment Initiation**: Customer selects Vodafone Cash at checkout
2. **Phone Number Entry**: Customer provides their Vodafone Cash number (must start with 0100)
3. **Payment Instructions**: Customer receives detailed payment instructions
4. **Manual Payment**: Customer completes payment via Vodafone Cash app or USSD
5. **Order Pending**: Order remains pending until admin verification
### Admin Verification Flow
1. **Payment Review**: Admin reviews pending Vodafone Cash payments
2. **Verification**: Admin verifies payment receipt and updates status
3. **Order Completion**: Verified payments trigger order completion
## API Endpoints
### Store API
#### GET `/store/plugin`
Get plugin information and supported formats.
**Response:**
```json
{
"message": "Vodafone Cash Payment Provider",
"provider_id": "vodafone-cash",
"supported_currencies": ["EGP"],
"phone_format": "0100XXXXXXX (11 digits starting with 0100)"
}
```
#### POST `/store/plugin`
Initiate a Vodafone Cash payment.
**Request Body:**
```json
{
"phone_number": "01001234567",
"customer_name": "John Doe",
"amount": 1000,
"currency_code": "EGP"
}
```
**Response:**
```json
{
"success": true,
"data": {
"id": "vodafone_1234567890_abc123",
"provider_id": "vodafone-cash",
"amount": 1000,
"currency_code": "EGP",
"phone_number": "0100 123 4567",
"status": "pending",
"payment_instructions": {
"message": "Please send 1000 EGP via Vodafone Cash",
"phone_number": "0100 123 4567",
"steps": [
"Open your Vodafone Cash app or dial *9*",
"Send 1000 EGP to the merchant",
"Keep your transaction reference number",
"Your order will be confirmed once payment is verified"
]
}
}
}
```
### Admin API
#### GET `/admin/plugin`
List pending Vodafone Cash payments.
**Query Parameters:**
- `status`: Filter by payment status
- `limit`: Number of results (default: 50)
- `offset`: Pagination offset (default: 0)
#### POST `/admin/plugin`
Verify a Vodafone Cash payment.
**Request Body:**
```json
{
"payment_id": "vodafone_1234567890_abc123",
"transaction_reference": "VF123456789",
"verified": true,
"admin_notes": "Payment verified via Vodafone Cash statement"
}
```
#### PATCH `/admin/plugin`
Update payment status.
**Request Body:**
```json
{
"payment_id": "vodafone_1234567890_abc123",
"status": "verified",
"admin_notes": "Payment confirmed"
}
```
## Phone Number Validation
The plugin enforces strict validation for Vodafone Cash phone numbers:
- **Format**: Must start with `0100`
- **Length**: Exactly 11 digits
- **Pattern**: `0100XXXXXXX` where X is any digit (0-9)
**Valid Examples:**
- `01001234567`
- `01009876543`
- `0100 123 4567` (spaces are automatically removed)
**Invalid Examples:**
- `01101234567` (doesn't start with 0100)
- `0100123456` (too short)
- `010012345678` (too long)
- `0100abcd567` (contains non-digits)
## Error Handling
The plugin provides detailed error messages for various scenarios:
### Validation Errors
```json
{
"success": false,
"error": "Validation failed",
"details": [
{
"field": "phone_number",
"message": "Phone number must start with 0100 and be exactly 11 digits"
}
]
}
```
### Payment Errors
```json
{
"success": false,
"error": "Invalid Vodafone Cash phone number",
"code": "INVALID_PHONE_NUMBER",
"detail": "Phone number must start with 0100 and be exactly 11 digits (e.g., 01001234567)"
}
```
## Development
### Building the Plugin
```bash
npm run build
# or
yarn build
```
### Development Mode
```bash
npm run dev
# or
yarn dev
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
MIT License - see the [LICENSE](LICENSE) file for details.
Learn more about [Medusa’s architecture](https://docs.medusajs.com/learn/introduction/architecture) and [commerce modules](https://docs.medusajs.com/learn/fundamentals/modules/commerce-modules) in the Docs.
## Community & Contributions
The community and core team are available in [GitHub Discussions](https://github.com/medusajs/medusa/discussions), where you can ask for support, discuss roadmap, and share ideas.
Join our [Discord server](https://discord.com/invite/medusajs) to meet other community members.
## Other channels
- [GitHub Issues](https://github.com/medusajs/medusa/issues)
- [Twitter](https://twitter.com/medusajs)
- [LinkedIn](https://www.linkedin.com/company/medusajs)
- [Medusa Blog](https://medusajs.com/blog/)