Skip to content

Commit

Permalink
API Foodmarket
Browse files Browse the repository at this point in the history
  • Loading branch information
galpratama committed Sep 20, 2020
1 parent 7c321af commit 8148e22
Show file tree
Hide file tree
Showing 21 changed files with 333 additions and 18 deletions.
1 change: 1 addition & 0 deletions .idea/foodmarket-backend.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/php.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
Empty file.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
Empty file.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions .idea/sonarlint/issuestore/index.pb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

54 changes: 40 additions & 14 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

128 changes: 127 additions & 1 deletion app/Http/Controllers/API/MidtransController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,135 @@
namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Midtrans\Config;
use Midtrans\Snap;
use Midtrans\Notification;

class MidtransController extends Controller
{
//
/**
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function callback(Request $request)
{
// Set konfigurasi midtrans
Config::$serverKey = config('services.midtrans.serverKey');
Config::$isProduction = config('services.midtrans.isProduction');
Config::$isSanitized = config('services.midtrans.isSanitized');
Config::$is3ds = config('services.midtrans.is3ds');

// Buat instance midtrans notification
$notification = new Notification();

// Assign ke variable untuk memudahkan coding
$status = $notification->transaction_status;
$type = $notification->payment_type;
$fraud = $notification->fraud_status;
$order_id = $notification->order_id;

// Cari transaksi berdasarkan ID
$transaction = Transaction::findOrFail($order_id);

// Handle notification status midtrans
if ($status == 'capture') {
if ($type == 'credit_card'){
if($fraud == 'challenge'){
$transaction->payment_status = 'CHALLENGE';
}
else {
$transaction->payment_status = 'SUCCESS';
}
}
}
else if ($status == 'settlement'){
$transaction->payment_status = 'SUCCESS';
}
else if($status == 'pending'){
$transaction->payment_status = 'PENDING';
}
else if ($status == 'deny') {
$transaction->payment_status = 'FAILED';
}
else if ($status == 'expire') {
$transaction->payment_status = 'EXPIRED';
}
else if ($status == 'cancel') {
$transaction->payment_status = 'FAILED';
}

// Simpan transaksi
$transaction->save();

// Kirimkan email
if ($transaction)
{
if($status == 'capture' && $fraud == 'accept' )
{
//
}
else if ($status == 'settlement')
{
//
}
else if ($status == 'success')
{
//
}
else if($status == 'capture' && $fraud == 'challenge' )
{
return response()->json([
'meta' => [
'code' => 200,
'message' => 'Midtrans Payment Challenge'
]
]);
}
else
{
return response()->json([
'meta' => [
'code' => 200,
'message' => 'Midtrans Payment not Settlement'
]
]);
}

return response()->json([
'meta' => [
'code' => 200,
'message' => 'Midtrans Notification Success'
]
]);
}
}

/**
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function success(Request $request)
{
return view('midtrans.success');
}

/**
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function unfinish(Request $request)
{
return view('midtrans.unfinish');
}

/**
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function error(Request $request)
{
return view('midtrans.error');
}
}
61 changes: 61 additions & 0 deletions app/Http/Controllers/API/TransactionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
use App\Models\Transaction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Midtrans\Config;
use Midtrans\Snap;

class TransactionController extends Controller
{
Expand Down Expand Up @@ -47,4 +49,63 @@ public function all(Request $request)
'Data list transaksi berhasil diambil'
);
}

/**
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function checkout(Request $request)
{
$request->validate([
'food_id' => 'required|exists:food,id',
'user_id' => 'required|exists:users,id',
'quantity' => 'required',
'total' => 'required',
'status' => 'required',
]);

$transaction = Transaction::create([
'food_id' => $request->food_id,
'user_id' => $request->user_id,
'quantity' => $request->quantity,
'total' => $request->total,
'status' => $request->status,
'payment_url' => ''
]);

// Konfigurasi midtrans
Config::$serverKey = config('services.midtrans.serverKey');
Config::$isProduction = config('services.midtrans.isProduction');
Config::$isSanitized = config('services.midtrans.isSanitized');
Config::$is3ds = config('services.midtrans.is3ds');

$transaction = Transaction::with(['food','user'])->find($transaction->id);

$midtrans = array(
'transaction_details' => array(
'order_id' => $transaction->id,
'gross_amount' => (int) $transaction->total,
),
'customer_details' => array(
'first_name' => $transaction->user->name,
'email' => $transaction->user->email
),
'enabled_payments' => array('gopay','bank_transfer'),
'vtweb' => array()
);

try {
// Ambil halaman payment midtrans
$paymentUrl = Snap::createTransaction($midtrans)->redirect_url;

$transaction->payment_url = $paymentUrl;
$transaction->save();

// Redirect ke halaman midtrans
return ResponseFormatter::success($transaction,'Transaksi berhasil');
}
catch (Exception $e) {
return ResponseFormatter::error($e->getMessage(),'Transaksi Gagal');
}
}
}
2 changes: 1 addition & 1 deletion app/Http/Controllers/API/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class UserController extends Controller
*/
public function fetch(Request $request)
{
return $request->user();
return ResponseFormatter::success($request->user(),'Data profile user berhasil diambil');
}

/**
Expand Down
Loading

0 comments on commit 8148e22

Please sign in to comment.