Pernahkah kamu membeli Gift Code Facebook untuk keperluan game atau FB Ads?, Pernahkah kamu bertanya gimana cara kerjanya untuk membuat sistem tersebut? . Tutorial kali ini sangat cocok apabila kamu sangat ingin tau sistem reedem gift code tersebut :D, Let's code B).
Untuk keperluan belajar, Saya hanya akan mencotohkan cara kerjanya saja bukanmengaplikasikan kedalam aplikasi apapun, Silahkan kembangkan sendiri codenya yah hehehe :p, Di akhir postingan saya akan membuat suatu class yang bisa kalian gunakan buat diaplikasikan ke gift code kalian yah hehehe :D.
Buat database terlebih dahulu untuk menyimpan gift codenya.
CREATE TABLE `giftcode`.`gift_code` (
`gift_id` INT(13) NOT NULL AUTO_INCREMENT ,
`gift_number` VARCHAR(255) NOT NULL ,
`gift_amount` VARCHAR(255) NOT NULL ,
`gift_expire_date` VARCHAR(255) NOT NULL ,
`gift_create_date` VARCHAR(255) NOT NULL ,
`gift_status` VARCHAR(255) NOT NULL ,
PRIMARY KEY (`gift_id`)) ENGINE = InnoDB;
Anggap saja itu table yang akan digunakan untuk gift code kali ini, Saya akan membuat class yang akan memudahkan dalam penggunaan gift code ini :D
1. class.php
<?php
class gift {
var $now;
function __construct() {
$this->mysqli = new mysqli('localhost','root','','giftcode');
if(mysqli_connect_error()) {
die("Tidak dapat membangun koneksi ke database karena -> " . mysqli_connect_error() . " Error code -> " . mysqli_connect_errno());
}
}
function generateGiftCode($amount,$expire) {
$this->now = date('d-m-Y');
$rand = strtoupper(substr(base64_encode(md5(uniqid())),0,5));
$rand .= "-" . strtoupper(substr(md5(base64_encode(uniqid())),0,5));
$rand .= "-" . strtoupper(substr(base64_encode(md5(uniqid())),0,5));
$rand .= "-" . strtoupper(substr(md5(md5(base64_encode(base64_encode(uniqid())))),0,5));
if($this->mysqli->query("INSERT INTO gift_code(gift_number,gift_amount,gift_expire_date,gift_create_date,gift_status)
VALUES('$rand','$amount','$expire','$this->now','valid')")) {
return "
<div class='alert alert-success'>
Sukses, Gift Code anda adalah <b>" . $rand . "
</div>
";
} else {
return "
<div class='alert alert-danger'>
Generate Failed, Please try again!
</div>
";
}
}
function reedemGiftCode($gift) {
$this->now = date('d-m-Y');
$result = $this->mysqli->query("SELECT * FROM gift_code WHERE gift_number = '$gift'");
if($result->num_rows > 0 ) {
if($value = mysqli_fetch_array($result)) {
if($value['gift_expire_date'] != $this->now) {
if($value['gift_status'] == 'valid') {
/*
tempatkan code yang menandakan bahwa reedem sukses disini,
Misal saldo user berhasil ditambah intinya sukses reedem
*/
// update database yang mengubah status gift card jadi sudah di gunakan, INI PENTING
$this->mysqli->query("UPDATE gift_code SET gift_status = 'sudah digunakan' WHERE gift_number = '$gift'");
// contoh saya akan menampilkan pesan sukses saja bahwa reedem berhasil, dan update database menjadi sudah terdaftar
return "
<div class='alert alert-success'>
Gift Code Sukses di reedem ^_^ Selamat!
</div>
";
} else {
return "
<div class='alert alert-danger'>
Gift Code tidak valid / sudah digunakan!
</div>
";
}
} else {
return "
<div class='alert alert-danger'>
Masa berlaku Gift Code Sudah berakhir!
</div>
";
}
}
} else {
return "
<div class='alert alert-danger'>
Gift Code anda tidak berlaku!
</div>
";
}
}
}
2. index.php
File ini hanya contoh untuk latihan, jadi saya menggunakan file ini agar mudah untuk kalian memahami alur script yang sedang kalian buat, dan melihat sendiri cara kerjanya.
<?php
include 'class.php';
if(isset($_GET['do'])) {
$param = $_GET['do'];
} else {
die("no parameter do");
}
?>
<html>
<head>
<title>GIFT CODE</title>
<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css'>
<link href='https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css' rel='stylesheet' integrity='sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1' crossorigin='anonymous'>
<script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
</head>
<body>
<style>
body {
background: url(http://images4.wikia.nocookie.net/__cb20110814161848/cod/es/images/d/d8/Call-of-duty-black-ops-HD-wallpaper-02.jpg) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
.panel-default {
opacity: 0.9;
margin-top:200px;
margin-left: 90px;
margin-right: 90px;
}
.form-group.last { margin-bottom:0px; }
</style>
<div class='container'>
<div class='row'>
<div class='col-md-12'>
<div class='panel panel-default'>
<div class='panel-heading'>
<span class='glyphicon glyphicon-lock'></span> <?php echo strtoupper($param); ?> GIFT CODE
</div>
<div class='panel-body' style='word-wrap: break-word;'>
<?php
if($param == 'generate') {
?>
<center><h2>GENERATE GIFT CODE </h2></center>
<div class='col-md-9' style='margin-left:110px; !important'>
<div class='well well-lg'>
<?php
if(isset($_POST['btn-generate'])) {
$amount = $_POST['amount'];
$expire = $_POST['expire'];
$gift = new gift();
echo $gift->generateGiftCode($amount,$expire);
}
?>
<form method='post'>
<label for='amount'>Jumlah Saldo</label>
<input type="text" name='amount' class='form-control' placeholder='contoh : 10.000' required>
<label for='expire'>Tanggal Kadaluarsa</label>
<input type='text' name='expire' class='form-control' placeholder='contoh : 12-06-2016' required>
<br />
<button type='submit' name='btn-generate' class='btn btn-success' style='width:100%;'>GENERATE! <span class='glyphicon glyphicon-repeat'></span></button>
</form>
</div>
</div>
<?php
} elseif($param == 'reedem') {
?>
<center><h2>REEDEM GIFT CODE</h2></center>
<div class='col-md-9' style='margin-left:110px; !important'>
<div class='well well-lg'>
<?php
if(isset($_POST['btn-reedem'])) {
$gc = $_POST['gc'];
$gift = new gift();
echo $gift->reedemGiftCode($gc);
}
?>
<form method='post'>
<label for='amount'>Gift Code Anda</label>
<input type="text" name='gc' class='form-control' placeholder='contoh : BZKV-ERT6D-KEJH-EIKL' required>
<br />
<button type='submit' name='btn-reedem' class='btn btn-success' style='width:100%;'>REEDEM! <span class='glyphicon glyphicon-repeat'></span></button>
</form>
</div>
</div>
<?php
}
?>
</div>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
</body>
</html>
Silahkan jalankan file index.php yang baru saja kalian tulis, dengan parameter $_GET['do'] generate, Atau dalam bentuk url seperti ini domain.com/?do=generate, jika di localhost jadi localhost/?do=generate, untuk menggenerate gift codenya.
Yaps, Bekerja, Saya akan mencoba reedem codenya :D
REEDEM SUKSES! :D
Jika saya reedem dnegan code yang sama maka akan seperti dibawah ini.
Jika Gift Code tidak terdapat di database maka akan seperti dibawah ini.
Yap kira2 seperti itu cara kerjanya :D
Mari saya jelaskan bagaimana codenya bekerja.
Inti dari code ini adalah memeriksa, apakah ada data, lalu validasi dengan melihat status nya apakah valid atau sudeh digunakan, Kira2 jika di database akan seperti dibawah ini.
Pada function generateGiftCode saya melakukan beberapa pengacakan string, mari kita lihat code dibawah ini.
function generateGiftCode($amount,$expire) {
$this->now = date('d-m-Y');
$rand = strtoupper(substr(base64_encode(md5(uniqid())),0,5));
$rand .= "-" . strtoupper(substr(md5(base64_encode(uniqid())),0,5));
$rand .= "-" . strtoupper(substr(base64_encode(md5(uniqid())),0,5));
$rand .= "-" . strtoupper(substr(md5(md5(base64_encode(base64_encode(uniqid())))),0,5));
if($this->mysqli->query("INSERT INTO gift_code(gift_number,gift_amount,gift_expire_date,gift_create_date,gift_status)
VALUES('$rand','$amount','$expire','$this->now','valid')")) {
return "
<div class='alert alert-success'>
Sukses, Gift Code anda adalah <b>" . $rand . "
</div>
";
} else {
return "
<div class='alert alert-danger'>
Generate Failed, Please try again!
</div>
";
}
}
Pada variable $rand, saya mengacak string yang akan saya jadikan gift codenya, dengan kombinasi base64_encode, md5, uniqid, dan substr akan membuat kombinasi sulit ditebak seperti contoh gift code ini ODYXZ-CCA53-NDA3O-D3922, Jika generate berhasil akan "return" pesan sukses bahwa generate berhasil, dan jika gagal, maka akan "return" pesan bahwa generate gagal.
Pada function reedemGiftCode, Saya melakukan beberapa validasi untuk memastikan bahwa giftcode yang dimasukan benar, Mari kita lihat code dibawah ini.
function reedemGiftCode($gift) {
$this->now = date('d-m-Y');
$result = $this->mysqli->query("SELECT * FROM gift_code WHERE gift_number = '$gift'");
if($result->num_rows > 0 ) {
if($value = mysqli_fetch_array($result)) {
if($value['gift_expire_date'] != $this->now) {
if($value['gift_status'] == 'valid') {
/*
tempatkan code yang menandakan bahwa reedem sukses disini,
Misal saldo user berhasil ditambah intinya sukses reedem
*/
// update database yang mengubah status gift card jadi sudah di gunakan, INI PENTING
$this->mysqli->query("UPDATE gift_code SET gift_status = 'sudah digunakan' WHERE gift_number = '$gift'");
// contoh saya akan menampilkan pesan sukses saja bahwa reedem berhasil, dan update database menjadi sudah terdaftar
return "
<div class='alert alert-success'>
Gift Code Sukses di reedem ^_^ Selamat!
</div>
";
} else {
return "
<div class='alert alert-danger'>
Gift Code tidak valid / sudah digunakan!
</div>
";
}
} else {
return "
<div class='alert alert-danger'>
Masa berlaku Gift Code Sudah berakhir!
</div>
";
}
}
} else {
return "
<div class='alert alert-danger'>
Gift Code anda tidak berlaku!
</div>
";
}
}
Yap, Validasi pertama yaitu saya melakukan pengecekan apakah gift code yang dimasukan ada di database, dengan memanfaatkan built in function num_rows dari PHP.
Di validasi kedua saya mengecek, apakah gift code tersebut expired dengan mengcompare tanggal expired dan tanggal hari ini, Namun belum bekerja semestinya saya masih bingung :p jadi ya silahkan di kembangkan :D
Validasi ketiga, saya mengecek apakah status dari gift code tersebut "valid" Jika iya, maka akan mengeksekusi code selanjutnya.
Jika lulus semua test validasi tersebut, maka reedem sukses :D, jika salah satu tidak lulus saya sudah memberikan pesan error masing2 silahkan dipahami codenya :D :p







