483 lines
9.3 KiB
Markdown
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 |