Skip to main content

Arkademi Koin

Introduction​

This document provides technical specifications for the Arkademi Koin on the Back End team side. Before reading this documentation, read here to understand basic information about Arkademi Koin.

Database Schema​

For Arkademi Koin on the Back End side, data is managed by 2 data management, which are Firebase and MySQL.

database

Workflow​

workflow

note

Adding Koin process in handled by Back End after the payment success (in charge to calculate the cashback amount from the price).

The Codes​

Calculate The Price​

../app/Api/V1/Controllers/Woocommerce/OrderController.php
if (isset($request["cashback"])) {
if ($koin == 0) {
$cashback = $price * 0.05;
}
}

AddCoins​

if ($get->coin_price == 0 && $get->coupon_price == 0) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://asia-southeast2-arkademi-flutter-v201.cloudfunctions.net/v2/add-coins");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);
$params = '
{
"coins":' . $get->cashback . ',
"user_id":' . $get->user_id . '
}
';

curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"Location: /api/v2/contract"
));

curl_exec($ch);
curl_close($ch);
}

Checking User's Koin​

app/Api/V1/Controllers/Woocommerce/OrderController.php
$url = "https://asia-southeast2-arkademi-flutter-v201.cloudfunctions.net/v2/coin/" . $user_id . "";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$curl,
CURLOPT_HTTPHEADER,
array(
"Content-Type: application/json"
)
);
$result = curl_exec($curl);
$responses = json_decode($result, 1);

$coinChange[] = $responses['data']['coins'];

Add Coin to MySQL Database​

app/Api/V1/Controllers/Woocommerce/OrderController.php
$arkademi_koin = abs($coinChange[0]);
curl_close($curl);
if ($total[2] <= $arkademi_koin) {
$koin = $total[2];
} else {
$koin = 0;
}

Create Order​

app/Api/V1/Controllers/Woocommerce/OrderController.php
$object = NewOrder::create([
'product_id' => $product_id,
'user_id' => $user_id,
'payment_method' => $request['payment_method'],
'payment_method_title' => $request['payment_method_title'],
'customer_ip_address' => request()->ip(),
'customer_user_agent' => request()->userAgent(),
'created_via' => 'rest-api',
'billing_first_name' => $request['billing']['first_name'],
'billing_last_name' => $request['billing']['last_name'],
'billing_email' => $request['billing']['email'],
'billing_phone' => $request['billing']['phone'],
'order_currency' => 'IDR',
'code_coupon' => $code,
'coupon_price' => $discount,
'tax_price' => $tax_price ?? 0,
'sale_price' => $sale_price ?? 0,
'reguler_price' => $regular_price,
'diskon_price' => substr($kode_unik, 1),
'coin_price' => $koin,
'cashback' => $cashback ?? 0,
'order_total' => $order_total,
'order_status' => $request['status'],
'created_at' => Carbon::now()
]);

Created On: 25 May 2023
Written By: Media
Discussed With: Fauzan
Checked By: Fauzan