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 | 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 | - |
- 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
Ada dua tipe user pada API ini, diantaranya
- User biasa
- 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.
Berikut adalah email dan password default untuk melakukan login pada API
Password | Role | |
---|---|---|
[email protected] | test123 | User biasa |
[email protected] | test123 | User organisasi |
Sebelum menggunakan fitur lain, diharuskan login terlebih dahulu
Type | Endpoint |
---|---|
POST | localhost:8000/api/login |
Name | Description |
---|---|
required | |
password | required |
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"
}
}
Berikut screenshot contoh request login menggunakan aplikasi postman
Setelah selesai melakukan aktivitas, user dapat melakukan logout
Type | Endpoint |
---|---|
POST | localhost:8000/api/logout |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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
}
Berikut screenshot contoh request logout menggunakan aplikasi postman
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 |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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
}
Berikut screenshot contoh request daftar event menggunakan aplikasi postman
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 |
Name | Description |
---|---|
name | required, min 3 |
description | required, min 5 |
price | required, numeric |
schedule[] | required |
location | required |
location_description | required |
rules | required |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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
}
Berikut screenshot contoh request membuat event menggunakan aplikasi postman
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} |
Name | Description |
---|---|
name | required, min 3 |
description | required, min 5 |
price | required, numeric |
schedule[] | required |
location | required |
location_description | required |
rules | required |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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
}
Berikut screenshot contoh request mengedit event menggunakan aplikasi postman
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} |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
Berikut adalah contoh response yang akan didapatkan jika event berhasil dihapus.
{
"success": true,
"code": 200
}
Berikut adalah contoh response menghapus event menggunakan aplikasi postman.
Berikut adalah bagian checkout tiket event
Type | Endpoint |
---|---|
POST | localhost:8000/api/checkout |
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 |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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
Berikut adalah contoh response checkout menggunakan aplikasi postman.
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 |
- 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.
- Lalu tekan tombol Inquire
- Setelah itu akan muncul detail tiket event yang dibeli, klik tombol Pay
- 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
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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.
Berikut adalah contoh response verifikasi pembayaran menggunakan aplikasi postman.
Fitur ini digunakan untuk melihat daftar transaksi user yang sedang login
Type | Endpoint |
---|---|
GET | localhost:8000/api/transaction |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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"
}
}
}
]
}
Berikut adalah contoh response daftar transaksi menggunakan aplikasi postman.
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
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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
}
Berikut adalah contoh response detail transaksi menggunakan aplikasi postman.
Type | Endpoint |
---|---|
DELETE | localhost:8000/api/transaction/{id} |
Key | Value |
---|---|
Authorization | Bearer tokendisini |
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
}
Berikut adalah contoh response membatalkan transaksi menggunakan aplikasi postman.