MIF_E31221305/TA_API/docs/wallet-api.md

9.3 KiB

Wallet & Withdrawal API Documentation

Table of Contents

  1. Midtrans Payment
  2. Wallet Management
  3. Bank Account Management
  4. Withdrawal Management
  5. Admin Withdrawal Management

Midtrans Payment

Initiate Midtrans Payment

POST /api/bookings/{booking}/midtrans/pay

Headers:

Authorization: Bearer {token}

Response:

{
    "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

GET /api/bookings/{booking}/payment-status

Headers:

Authorization: Bearer {token}

Response:

{
    "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

POST /api/bookings/{booking}/payment-status/check

Headers:

Authorization: Bearer {token}

Response:

{
    "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

GET /api/wallet

Headers:

Authorization: Bearer {token}

Response:

{
    "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

POST /api/bank-accounts

Headers:

Authorization: Bearer {token}
Content-Type: application/json

Request Body:

{
    "bank_name": "BCA",
    "account_number": "1234567890",
    "account_holder_name": "John Doe"
}

Response:

{
    "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)

POST /api/admin/bank-accounts/{bankAccount}/verify

Headers:

Authorization: Bearer {token}
Content-Type: application/json

Request Body:

{
    "status": "active",
    "rejection_reason": null
}

Response:

{
    "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

POST /api/withdrawals

Headers:

Authorization: Bearer {token}
Content-Type: application/json

Request Body:

{
    "bank_account_id": 1,
    "amount": 500000
}

Response:

{
    "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:

{
    "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

GET /api/withdrawals

Headers:

Authorization: Bearer {token}

Query Parameters:

  • status (optional) - Filter by withdrawal status. Allowed values: "pending", "processing", "completed", "rejected"

Response:

{
    "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

GET /api/admin/withdrawals/pending

Headers:

Authorization: Bearer {token}

Response:

{
    "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

GET /api/admin/bank-accounts/pending

Headers:

Authorization: Bearer {token}

Response:

{
    "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

POST /api/admin/withdrawals/{withdrawal}/process

Headers:

Authorization: Bearer {token}
Content-Type: multipart/form-data

Request Body:

{
    "status": "processing",
    "proof_of_payment": [file]
}

Response:

{
    "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

POST /api/admin/withdrawals/{withdrawal}/complete

Headers:

Authorization: Bearer {token}

Response:

{
    "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

{
    "success": false,
    "data": {
        "bank_name": ["The bank name field is required."],
        "account_number": ["The account number field is required."]
    },
    "message": "Validation Error."
}

Insufficient Balance

{
    "success": false,
    "data": {
        "error": "Insufficient balance."
    },
    "message": "Error."
}

Invalid Bank Account

{
    "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