MIF_E31221305/TA_API/docs/wallet-api.md

483 lines
9.3 KiB
Markdown

# Wallet & Withdrawal API Documentation
## Table of Contents
1. [Midtrans Payment](#midtrans-payment)
2. [Wallet Management](#wallet-management)
3. [Bank Account Management](#bank-account-management)
4. [Withdrawal Management](#withdrawal-management)
5. [Admin Withdrawal Management](#admin-withdrawal-management)
## Midtrans Payment
### Initiate Midtrans Payment
```http
POST /api/bookings/{booking}/midtrans/pay
```
**Headers:**
```
Authorization: Bearer {token}
```
**Response:**
```json
{
"success": true,
"data": {
"snap_token": "66e4fa55-fdac-4ef9-91b5-733b97d1b862",
"redirect_url": "https://app.sandbox.midtrans.com/snap/v2/vtweb/66e4fa55-fdac-4ef9-91b5-733b97d1b862",
"booking": {
"id": 1,
"transaction_code": "TRX-20240503-A1B2C3",
"total_price": 150000,
"status": "selesai"
}
},
"message": "Token pembayaran berhasil dibuat"
}
```
### Check Payment Status
```http
GET /api/bookings/{booking}/payment-status
```
**Headers:**
```
Authorization: Bearer {token}
```
**Response:**
```json
{
"success": true,
"data": {
"booking_id": 1,
"transaction_code": "TRX-20240503-A1B2C3",
"payment_status": "pending",
"payment_method": "bank_transfer",
"total_price": 150000,
"status": "selesai",
"midtrans_snap_token": "66e4fa55-fdac-4ef9-91b5-733b97d1b862"
},
"message": "Status pembayaran berhasil diambil"
}
```
### Manual Check and Update Payment Status
```http
POST /api/bookings/{booking}/payment-status/check
```
**Headers:**
```
Authorization: Bearer {token}
```
**Response:**
```json
{
"success": true,
"data": {
"booking_id": 1,
"transaction_code": "TRX-20240503-A1B2C3",
"payment_status": "paid",
"payment_method": "bank_transfer",
"total_price": 150000,
"status": "selesai",
"midtrans_status": "settlement",
"midtrans_snap_token": "66e4fa55-fdac-4ef9-91b5-733b97d1b862"
},
"message": "Status pembayaran berhasil diperbarui"
}
```
## Wallet Management
### Get Wallet Information
```http
GET /api/wallet
```
**Headers:**
```
Authorization: Bearer {token}
```
**Response:**
```json
{
"success": true,
"data": {
"balance": 1000000.00,
"pending_withdrawals": 300000.00,
"available_balance": 700000.00,
"transactions": [
{
"id": 1,
"type": "credit",
"amount": 500000.00,
"description": "Pembayaran booking #TRX-001",
"status": "success",
"created_at": "2024-05-03T10:00:00.000000Z",
"booking": {
"id": 1,
"transaction_code": "TRX-001",
"service_type": "jahit",
"category": "baju"
}
}
]
},
"message": "Wallet information retrieved successfully"
}
```
## Bank Account Management
### Register Bank Account
```http
POST /api/bank-accounts
```
**Headers:**
```
Authorization: Bearer {token}
Content-Type: application/json
```
**Request Body:**
```json
{
"bank_name": "BCA",
"account_number": "1234567890",
"account_holder_name": "John Doe"
}
```
**Response:**
```json
{
"success": true,
"data": {
"id": 1,
"bank_name": "BCA",
"account_number": "1234567890",
"account_holder_name": "John Doe",
"status": "pending",
"created_at": "2024-05-03T10:00:00.000000Z"
},
"message": "Bank account registered successfully"
}
```
### Verify Bank Account (Admin Only)
```http
POST /api/admin/bank-accounts/{bankAccount}/verify
```
**Headers:**
```
Authorization: Bearer {token}
Content-Type: application/json
```
**Request Body:**
```json
{
"status": "active",
"rejection_reason": null
}
```
**Response:**
```json
{
"success": true,
"data": {
"id": 1,
"bank_name": "BCA",
"account_number": "1234567890",
"account_holder_name": "John Doe",
"status": "active",
"verified_at": "2024-05-03T10:00:00.000000Z",
"updated_at": "2024-05-03T10:00:00.000000Z"
},
"message": "Bank account verification completed"
}
```
## Withdrawal Management
### Request Withdrawal
```http
POST /api/withdrawals
```
**Headers:**
```
Authorization: Bearer {token}
Content-Type: application/json
```
**Request Body:**
```json
{
"bank_account_id": 1,
"amount": 500000
}
```
**Response:**
```json
{
"success": true,
"data": {
"withdrawal": {
"id": 1,
"wallet_id": 1,
"bank_account_id": 1,
"amount": 500000.00,
"status": "pending",
"created_at": "2024-05-03T10:00:00.000000Z"
},
"wallet": {
"balance": 1000000.00,
"pending_withdrawals": 500000.00,
"available_balance": 500000.00
}
},
"message": "Withdrawal request submitted successfully"
}
```
**Error Response - Insufficient Balance:**
```json
{
"success": false,
"data": {
"balance": 1000000.00,
"pending_withdrawals": 800000.00,
"available_balance": 200000.00,
"requested_amount": 500000.00
},
"message": "Insufficient available balance."
}
```
### Get Withdrawal History
```http
GET /api/withdrawals
```
**Headers:**
```
Authorization: Bearer {token}
```
**Query Parameters:**
- `status` (optional) - Filter by withdrawal status. Allowed values: "pending", "processing", "completed", "rejected"
**Response:**
```json
{
"success": true,
"data": [
{
"id": 1,
"amount": 500000.00,
"status": "completed",
"created_at": "2024-05-03T10:00:00.000000Z",
"processed_at": "2024-05-03T11:00:00.000000Z",
"bank_account": {
"bank_name": "BCA",
"account_number": "1234567890",
"account_holder_name": "John Doe"
}
}
],
"message": "Withdrawal history retrieved successfully"
}
```
## Admin Withdrawal Management
### Get Pending Withdrawals
```http
GET /api/admin/withdrawals/pending
```
**Headers:**
```
Authorization: Bearer {token}
```
**Response:**
```json
{
"success": true,
"data": [
{
"id": 1,
"amount": 500000.00,
"status": "pending",
"created_at": "2024-05-03T10:00:00.000000Z",
"wallet": {
"user": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
},
"bank_account": {
"bank_name": "BCA",
"account_number": "1234567890",
"account_holder_name": "John Doe"
}
}
],
"message": "Pending withdrawals retrieved successfully"
}
```
### Get Pending Bank Accounts
```http
GET /api/admin/bank-accounts/pending
```
**Headers:**
```
Authorization: Bearer {token}
```
**Response:**
```json
{
"success": true,
"data": [
{
"id": 1,
"user_id": 2,
"bank_name": "BCA",
"account_number": "1234567890",
"account_holder_name": "John Doe",
"status": "pending",
"created_at": "2024-05-03T10:00:00.000000Z",
"updated_at": "2024-05-03T10:00:00.000000Z",
"user": {
"id": 2,
"name": "John Doe",
"email": "john@example.com",
"role": "penjahit"
}
}
],
"message": "Pending bank accounts retrieved successfully"
}
```
### Process Withdrawal
```http
POST /api/admin/withdrawals/{withdrawal}/process
```
**Headers:**
```
Authorization: Bearer {token}
Content-Type: multipart/form-data
```
**Request Body:**
```json
{
"status": "processing",
"proof_of_payment": [file]
}
```
**Response:**
```json
{
"success": true,
"data": {
"id": 1,
"amount": 500000.00,
"status": "processing",
"proof_of_payment": "proof_of_payments/abc123.jpg",
"updated_at": "2024-05-03T11:00:00.000000Z"
},
"message": "Withdrawal status updated successfully"
}
```
### Complete Withdrawal
```http
POST /api/admin/withdrawals/{withdrawal}/complete
```
**Headers:**
```
Authorization: Bearer {token}
```
**Response:**
```json
{
"success": true,
"data": {
"id": 1,
"amount": 500000.00,
"status": "completed",
"processed_at": "2024-05-03T12:00:00.000000Z",
"updated_at": "2024-05-03T12:00:00.000000Z"
},
"message": "Withdrawal completed successfully"
}
```
## Error Responses
### Validation Error
```json
{
"success": false,
"data": {
"bank_name": ["The bank name field is required."],
"account_number": ["The account number field is required."]
},
"message": "Validation Error."
}
```
### Insufficient Balance
```json
{
"success": false,
"data": {
"error": "Insufficient balance."
},
"message": "Error."
}
```
### Invalid Bank Account
```json
{
"success": false,
"data": {
"error": "Invalid bank account."
},
"message": "Error."
}
```
## Status Codes
- 200: Success
- 201: Created
- 400: Bad Request
- 401: Unauthorized
- 403: Forbidden
- 404: Not Found
- 422: Validation Error
- 500: Server Error