Coder Social home page Coder Social logo

arpha01 / apppayment Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 3.61 MB

AppPayment is a payment gateway implementation and integration using Laravel and Midtrans

Shell 0.66% PHP 85.72% JavaScript 0.42% Blade 13.21%
api laravel midtrans payment paymentgateway rest-api

apppayment's Introduction

AppPayment

Halo ๐Ÿ‘‹ Selamat Datang di Repository Payment Gateway Saya. AppPayment adalah sebuah implementasi dan integrasi payment gateway yang dibangun menggunakan Laravel 9 dalam bentuk API.

Creator: Mohammad Arfan Maulana

API ini tidak hanya mencakup payment gateway checkout dan pembayaran saja, namun juga mencakup pengelolaan event (membuat, mengupdate, menghapus, melihat daftar event), dan juga kelola transaksi (membatalkan, melihat daftar transaksi)

Tools yang digunakan dalam pengembangan

Tools Version
Composer 2.1.14
Midtrans core API (Payment gateway) -
Laravel 9.11
PHP 8.0.2
Laravel Sanctum (Authentication) 2.15
Laragon 5.0
Postman -

Instalasi

  • Klon Repository ini
  • Ekstrak file yang telah didownload
  • Jalankan terminal, dan arahkan terminal ke direktori ekstrak file menggunakan cd pathtodirectory
  • Dalam terminal jalankan composer install
  • Ubah nama file .env.example file ke .env
  • Edit file .env pada DB_CONNECTION, DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD sesuaikan dengan konfigurasi database anda
  • Didalam terminal jalankan php artisan migrate
  • Lalu jalankan php artisan db:seed untuk mengisi database dengan data default
  • Selanjutnya, dalam terminal jalankan php artisan serve

Selesai, API berjalan pada localhost:8000/api

Struktur Basis Data

Class Diagram

image

PhpMyAdmin Designer

image

Autentikasi

Users

Ada dua tipe user pada API ini, diantaranya

  1. User biasa
  2. User organisasi

Pembeda dari dua user tersebut ada pada atribut organization_id dan is_organization pada tabel users.

Pada user oganisasi, atribut is_organization mengandung value true atau nilai 1, dan memiliki relasi dengan entitas Organization, dihubungkan dengan foreign key organization_id

Berikut adalah use case diagram untuk menggambarkan apa saja yang dapat dilakukkan oleh masing-masing user.

image

Kredensial

Berikut adalah email dan password default untuk melakukan login pada API

Email Password Role
[email protected] test123 User biasa
[email protected] test123 User organisasi

Login

Sebelum menggunakan fitur lain, diharuskan login terlebih dahulu

Type Endpoint
POST localhost:8000/api/login

Request Format (Body)

Name Description
email required
password required

Sample Response

Berikut adalah contoh response yang akan didapatkan jika login berhasil, silahkan simpan access_token pada header, untuk tipe authorization pilih Bearer. Token tersebut digunakan untuk mengakses fitur yang membutuhkan login.

{
    "status": "success",
    "message": "Login successfully",
    "errors": null,
    "content": {
        "status_code": 200,
        "access_token": "2|pyzsEI59uRqnKFe0NxVMJK9BZH2CnfnSNyy5uUNy",
        "token_type": "Bearer"
    }
}

Contoh

Berikut screenshot contoh request login menggunakan aplikasi postman

image

Logout

Setelah selesai melakukan aktivitas, user dapat melakukan logout

Type Endpoint
POST localhost:8000/api/logout

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika logout berhasil, token yang digunakan sebelumnya tidak akan lagi berfungsi.

{
    "status": "success",
    "message": "Logout successfully",
    "errors": null,
    "content": null
}

Example

Berikut screenshot contoh request logout menggunakan aplikasi postman

image

Mendapatkan Daftar Event

User dapat melihat event apa saja yang terdapat pada sistem, berikut adalah cara mendapatkan daftar event, daftar event dilimit default 10 item menggunakan pagination

Type Endpoint
GET localhost:8000/api/events

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika request berhasil

{
    "data": [
        {
            "id": 4,
            "name": "Pemanfaatan Data Mining pada Revolusi Industri 4.0",
            "description": "Memanfaatkan secara maksimal prosedur data mining",
            "price": "Rp. 50.000",
            "schedule": "[\"11-06-2022\", \"12-06-2022\"]",
            "location": "Tangerang Selatan",
            "location_description": "Depan Pasar Ciputat",
            "rules": "Mengenakan Masker dan faceshield",
            "organization": {
                "id": 1,
                "name": "Kemendikbud RI",
                "slug": "kemendikbud-ri",
                "created_at": "14-06-2022"
            }
        }
    ],
    "links": {
        "first": "http://localhost:8000/api/events?page=1",
        "last": "http://localhost:8000/api/events?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://localhost:8000/api/events?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://localhost:8000/api/events",
        "per_page": 10,
        "to": 2,
        "total": 2
    },
    "success": true,
    "total": 2,
    "code": 206
}

Example

Berikut screenshot contoh request daftar event menggunakan aplikasi postman

image

Membuat Event

Jika user yang digunakan adalah tipe user organisasi, user dapat membuat event baru, berikut adalah cara dan format membuat event baru

Type Endpoint
POST localhost:8000/api/events

Request Format (Body)

Name Description
name required, min 3
description required, min 5
price required, numeric
schedule[] required
location required
location_description required
rules required

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika event berhasil dibuat

{
    "data": {
        "id": 4,
        "name": "Contoh nama event",
        "description": "deskripsi panjang event",
        "price": "Rp. 40.000",
        "schedule": "[\"11-06-2022\",\"12-07-2022\"]",
        "location": "Tangerang Selatan",
        "location_description": "Depan Pasar Ciputat",
        "rules": "Mengenakan Masker",
        "organization": {
            "id": 1,
            "name": "Kemendikbud RI",
            "slug": "kemendikbud-ri",
            "created_at": "14-06-2022"
        }
    },
    "success": true,
    "total": 2,
    "code": 206
}

Example

Berikut screenshot contoh request membuat event menggunakan aplikasi postman

image image

Mengupdate Event

Jika user yang digunakan adalah tipe user organisasi, user dapat mengedit event, berikut adalah cara dan format mengedit event. Event yang akan diedit haruslah memiliki atribut organization_id yang sama dengan user.

Type Endpoint
PUT localhost:8000/api/events/{eventid}

Request Format (Body)

Name Description
name required, min 3
description required, min 5
price required, numeric
schedule[] required
location required
location_description required
rules required

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika event berhasil diupdate.

{
    "data": {
        "id": 4,
        "name": "Contoh nama event",
        "description": "Memanfaatkan secara maksimal prosedur data mining",
        "price": "Rp. 50.000",
        "schedule": "[\"11-06-2022\",\"12-06-2022\"]",
        "location": "Tangerang Selatan",
        "location_description": "Depan Pasar Ciputat",
        "rules": "Mengenakan Masker dan faceshield",
        "organization": {
            "id": 1,
            "name": "Kemendikbud RI",
            "slug": "kemendikbud-ri",
            "created_at": "14-06-2022"
        }
    },
    "success": true,
    "total": 2,
    "code": 206
}

Example

Berikut screenshot contoh request mengedit event menggunakan aplikasi postman

image image

Menghapus Event

Jika user yang digunakan adalah tipe user organisasi, user dapat menghapus event, berikut adalah cara dan format mengedit event. Event yang akan dihapus haruslah memiliki atribut organization_id yang sama dengan user.

Type Endpoint
DELETE localhost:8000/api/events/{eventid}

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika event berhasil dihapus.

{
    "success": true,
    "code": 200
}

Example

Berikut adalah contoh response menghapus event menggunakan aplikasi postman.

image

Checkout Event

Berikut adalah bagian checkout tiket event

Type Endpoint
POST localhost:8000/api/checkout

Request Format (Body)

Pada event_id diharuskan sesuai dengan id event yang ada.

Name Description
event_id required, numeric, exists
amount required, numeric
payment_method required, enum:bni,bca,bri,indomaret,alfamart,gopay
ticket_schedules[] required

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika checkout tiket berhasil.

{
    "data": {
        "id": "order-1-1-1655548920",
        "event_id": "1",
        "amount": "2",
        "total_price": 80000,
        "status": "pending",
        "payment_method": "indomaret",
        "payment_code": "052179521795",
        "expired_at": "19-06-2022 10:42",
        "ticket_schedule": [
            "11-06-2022"
        ],
        "event": {
            "id": 1,
            "name": "Pemanfaatan Data Mining pada Revolusi Industri 4.0",
            "description": "Memanfaatkan secara maksimal prosedur data mining",
            "price": "Rp. 40.000",
            "schedule": "[\"11-06-2022\", \"12-07-2022\"]",
            "location": "Tangerang Selatan",
            "location_description": "Depan Pasar Ciputat",
            "rules": "Mengenakan Masker",
            "organization": {
                "id": 1,
                "name": "Kemendikbud RI",
                "slug": "kemendikbud-ri",
                "created_at": "18-06-2022"
            }
        }
    },
    "success": true,
    "total": 1,
    "code": 206
}

Setelah berhasil checkout, transaksi akan terbuat namun pembayaran masih dalam status pending

Example

Berikut adalah contoh response checkout menggunakan aplikasi postman.

image

Verifikasi atau Konfirmasi Pembayaran

Sebelum melakukan konfirmasi atau verifikasi pembayaran ini, diharuskan terlebih dahulu untuk membayar atau menggunakan simulasi pembayaran yang disediakan oleh Midtrans sebagai berikut: (Sesuaikan dengan metode pembayarannya)

Nama Link
Indomaret simulator https://simulator.sandbox.midtrans.com/indomaret/index
Alfamart simulator https://simulator.sandbox.midtrans.com/alfamart/index
BCA Virtual Account simulator https://simulator.sandbox.midtrans.com/bca/va/index
BNI Virtual Account simulator https://simulator.sandbox.midtrans.com/bni/va/index
BRI Virtual Account simulator https://simulator.sandbox.midtrans.com/bri/va/index

Cara penggunaan simulator

  1. Ikuti sesuai petunjuk yang tertera. Pada halaman simulator, dalam contoh ini saya menggunakan metode pembayaran Indomaret, pada kolom payment code masukkan payment code yang didapat saat checkout.
  2. Lalu tekan tombol Inquire image
  3. Setelah itu akan muncul detail tiket event yang dibeli, klik tombol Pay image
  4. Akan muncul message success transaction. lalu lakukkan konfirmasi pembayaran pada API
Type Endpoint
GET localhost:8000/api/payment/verify/{id}

Ket : id diisi dengan id yang didapat pada saat checkout, dalam format order-x-x-xxxxxx, contoh localhost:8000/api/payment/verify/order-6-3-1655451787

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika verifikasi pembayaran sukses.

{
    "data": {
        "id": "order-1-1-1655548920",
        "event_id": 1,
        "amount": 2,
        "total_price": "80000",
        "status": "paid",
        "payment_method": "indomaret",
        "payment_code": "052179521795",
        "expired_at": "19-06-2022 10:42",
        "ticket_schedule": [
            "11-06-2022"
        ],
        "event": {
            "id": 1,
            "name": "Pemanfaatan Data Mining pada Revolusi Industri 4.0",
            "description": "Memanfaatkan secara maksimal prosedur data mining",
            "price": "Rp. 40.000",
            "schedule": "[\"11-06-2022\", \"12-07-2022\"]",
            "location": "Tangerang Selatan",
            "location_description": "Depan Pasar Ciputat",
            "rules": "Mengenakan Masker",
            "organization": {
                "id": 1,
                "name": "Kemendikbud RI",
                "slug": "kemendikbud-ri",
                "created_at": "18-06-2022"
            }
        }
    },
    "success": true,
    "total": 1,
    "code": 206
}

Dalam response tersebut, akan terlihat bahwa status akan berubah menjadi paid jika dalam kondisi sudah dibayar atau menggunakan simulator.

Example

Berikut adalah contoh response verifikasi pembayaran menggunakan aplikasi postman.

image

Melihat daftar transaksi

Fitur ini digunakan untuk melihat daftar transaksi user yang sedang login

Type Endpoint
GET localhost:8000/api/transaction

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika daftar transaksi berhasil didapat.

{
    "data": [
        {
            "id": "order-2-3-1655202009",
            "event_id": 3,
            "amount": 3,
            "total_price": "934320",
            "status": "pending",
            "payment_method": "gopay",
            "payment_code": null,
            "expired_at": "15-06-2022 10:20",
            "ticket_schedule": "\"[\\\"1995-05-23\\\",\\\"1985-12-20\\\"]\"",
            "event": {
                "id": 3,
                "name": "Iste quos pariatur reprehenderit doloribus voluptas.",
                "description": "Quo repellendus quisquam ut ut voluptatibus impedit. Vitae rem modi quos et sunt eaque. Et quos voluptatem est.",
                "price": "Rp. 311.440",
                "schedule": "\"[\\\"1995-05-23\\\",\\\"1985-12-20\\\"]\"",
                "location": "Reidview",
                "location_description": "Voluptatem doloremque.",
                "rules": "Consequatur voluptates iusto quo rerum molestiae. Dolorum sit libero voluptatem ipsum. Corrupti voluptatem ut dolores fugiat dolorum reiciendis quia.",
                "organization": {
                    "id": 1,
                    "name": "Kemendikbud RI",
                    "slug": "kemendikbud-ri",
                    "created_at": "14-06-2022"
                }
            }
        },
        {
            "id": "order-6-3-1655451787",
            "event_id": 3,
            "amount": 1,
            "total_price": "311440",
            "status": "paid",
            "payment_method": "indomaret",
            "payment_code": "926537065370",
            "expired_at": "18-06-2022 07:43",
            "ticket_schedule": [
                "11-06-2022"
            ],
            "event": {
                "id": 3,
                "name": "Iste quos pariatur reprehenderit doloribus voluptas.",
                "description": "Quo repellendus quisquam ut ut voluptatibus impedit. Vitae rem modi quos et sunt eaque. Et quos voluptatem est.",
                "price": "Rp. 311.440",
                "schedule": "\"[\\\"1995-05-23\\\",\\\"1985-12-20\\\"]\"",
                "location": "Reidview",
                "location_description": "Voluptatem doloremque.",
                "rules": "Consequatur voluptates iusto quo rerum molestiae. Dolorum sit libero voluptatem ipsum. Corrupti voluptatem ut dolores fugiat dolorum reiciendis quia.",
                "organization": {
                    "id": 1,
                    "name": "Kemendikbud RI",
                    "slug": "kemendikbud-ri",
                    "created_at": "14-06-2022"
                }
            }
        }
    ]
}

Example

Berikut adalah contoh response daftar transaksi menggunakan aplikasi postman.

image

Melihat detail transaksi

User juga dapat melihat detail transaksi dengan id tertentu

Type Endpoint
GET localhost:8000/api/transaction/{id}

Keterangan : id diisi dengan id transaksi, dalam format order-x-x-xxxx, contoh localhost:8000/api/transaction/order-6-3-1655451787

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika detail transaksi berhasil didapatkan.

{
    "data": {
        "id": "order-6-3-1655451787",
        "event_id": 3,
        "amount": 1,
        "total_price": "311440",
        "status": "paid",
        "payment_method": "indomaret",
        "payment_code": "926537065370",
        "expired_at": "18-06-2022 07:43",
        "ticket_schedule": [
            "11-06-2022"
        ],
        "event": {
            "id": 3,
            "name": "Iste quos pariatur reprehenderit doloribus voluptas.",
            "description": "Quo repellendus quisquam ut ut voluptatibus impedit. Vitae rem modi quos et sunt eaque. Et quos voluptatem est.",
            "price": "Rp. 311.440",
            "schedule": "\"[\\\"1995-05-23\\\",\\\"1985-12-20\\\"]\"",
            "location": "Reidview",
            "location_description": "Voluptatem doloremque.",
            "rules": "Consequatur voluptates iusto quo rerum molestiae. Dolorum sit libero voluptatem ipsum. Corrupti voluptatem ut dolores fugiat dolorum reiciendis quia.",
            "organization": {
                "id": 1,
                "name": "Kemendikbud RI",
                "slug": "kemendikbud-ri",
                "created_at": "14-06-2022"
            }
        }
    },
    "success": true,
    "total": 6,
    "code": 206
}

Example

Berikut adalah contoh response detail transaksi menggunakan aplikasi postman.

image

Membatalkan transaksi

Type Endpoint
DELETE localhost:8000/api/transaction/{id}

Headers

Key Value
Authorization Bearer tokendisini

Sample Response

Berikut adalah contoh response yang akan didapatkan jika transaksi berhasil dibatalkan.

{
    "data": {
        "id": "order-6-3-1655451787",
        "event_id": 3,
        "amount": 1,
        "total_price": "311440",
        "status": "cancelled",
        "payment_method": "indomaret",
        "payment_code": "926537065370",
        "expired_at": "18-06-2022 07:43",
        "ticket_schedule": [
            "11-06-2022"
        ],
        "event": {
            "id": 3,
            "name": "Iste quos pariatur reprehenderit doloribus voluptas.",
            "description": "Quo repellendus quisquam ut ut voluptatibus impedit. Vitae rem modi quos et sunt eaque. Et quos voluptatem est.",
            "price": "Rp. 311.440",
            "schedule": "\"[\\\"1995-05-23\\\",\\\"1985-12-20\\\"]\"",
            "location": "Reidview",
            "location_description": "Voluptatem doloremque.",
            "rules": "Consequatur voluptates iusto quo rerum molestiae. Dolorum sit libero voluptatem ipsum. Corrupti voluptatem ut dolores fugiat dolorum reiciendis quia.",
            "organization": {
                "id": 1,
                "name": "Kemendikbud RI",
                "slug": "kemendikbud-ri",
                "created_at": "14-06-2022"
            }
        }
    },
    "success": true,
    "total": 6,
    "code": 206
}

Example

Berikut adalah contoh response membatalkan transaksi menggunakan aplikasi postman.

image

apppayment's People

Contributors

arpha01 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.