initial project
This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
<?php
|
||||
|
||||
namespace App\Libraries;
|
||||
|
||||
use App\Models\LogPaymentTransactions;
|
||||
use App\Models\Orders;
|
||||
use App\Models\TopupModel;
|
||||
|
||||
class Fiuu
|
||||
{
|
||||
protected $endpoint;
|
||||
protected $merchantId;
|
||||
protected $verifyKey;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->endpoint = FIUU_SANDBOX_ENDPOINT;
|
||||
$this->merchantId = FIUU_MERCHANT_ID;
|
||||
$this->verifyKey = FIUU_VERIFY_KEY;
|
||||
helper('general');
|
||||
helper('order');
|
||||
}
|
||||
// public function createPayment($orderId, $amount)
|
||||
// {
|
||||
// $vcode = md5($amount . $this->merchantId . $orderId . $this->verifyKey);
|
||||
|
||||
// $query = http_build_query([
|
||||
// 'merchantid' => $this->merchantId,
|
||||
// 'orderid' => $orderId,
|
||||
// 'amount' => $amount,
|
||||
// 'vcode' => $vcode,
|
||||
// ]);
|
||||
|
||||
// $redirectUrl = 'https://sandbox-payment.fiuu.com/RMS/pay/' . $this->merchantId . '/?' . $query;
|
||||
|
||||
// return [
|
||||
// 'status' => 'success',
|
||||
// 'vcode' => $vcode,
|
||||
// 'redirect_url' => $redirectUrl,
|
||||
// ];
|
||||
// }
|
||||
|
||||
public function createPayment($order_so, $amount, $customer = [])
|
||||
{
|
||||
$vcode = md5($amount . $this->merchantId . $order_so . $this->verifyKey);
|
||||
|
||||
$fields = [
|
||||
'orderid' => $order_so,
|
||||
'currency' => 'MYR',
|
||||
'amount' => $amount,
|
||||
'vcode' => $vcode,
|
||||
'bill_name' => 'John Doe',
|
||||
'bill_email' => 'johndoe@example.com',
|
||||
'bill_mobile' => '60123456789',
|
||||
'bill_desc' => 'Test Payment',
|
||||
'returnurl' => 'https://uspizza.ipsgroup.com.my/screens/payment/loading_payment?type=order',
|
||||
'callbackurl' => 'https://icom.ipsgroup.com.my/api/payment/fiuu/notification'
|
||||
];
|
||||
|
||||
|
||||
$query = http_build_query($fields);
|
||||
|
||||
$redirectUrl = $this->endpoint . '?' . $query;
|
||||
|
||||
return [
|
||||
'status' => 'success',
|
||||
'vcode' => $vcode,
|
||||
'redirect_url' => $redirectUrl,
|
||||
];
|
||||
}
|
||||
|
||||
public function createTopup($order_so, $amount, $customer = [])
|
||||
{
|
||||
$vcode = md5($amount . $this->merchantId . $order_so . $this->verifyKey);
|
||||
|
||||
$fields = [
|
||||
'orderid' => $order_so,
|
||||
'currency' => 'MYR',
|
||||
'amount' => $amount,
|
||||
'vcode' => $vcode,
|
||||
'bill_name' => 'John Doe',
|
||||
'bill_email' => 'johndoe@example.com',
|
||||
'bill_mobile' => '60123456789',
|
||||
'bill_desc' => 'Test Payment',
|
||||
'returnurl' => 'https://uspizza.ipsgroup.com.my/screens/payment/loading_payment?type=topup',
|
||||
'callbackurl' => 'https://icom.ipsgroup.com.my/api/topup/fiuu/notification'
|
||||
];
|
||||
|
||||
|
||||
$query = http_build_query($fields);
|
||||
|
||||
$redirectUrl = $this->endpoint . '?' . $query;
|
||||
|
||||
return [
|
||||
'status' => 'success',
|
||||
'vcode' => $vcode,
|
||||
'redirect_url' => $redirectUrl,
|
||||
];
|
||||
}
|
||||
|
||||
public function validateToken($data){
|
||||
$tranID = $data['tranID'];
|
||||
$order_so = $data['orderid'];
|
||||
$status = $data['status'];
|
||||
$domain = $data['domain'];
|
||||
$amount = $data['amount'];
|
||||
$currency = $data['currency'];
|
||||
$appcode = $data['appcode'];
|
||||
$paydate = $data['paydate'];
|
||||
$skey = $data['skey'];
|
||||
|
||||
$pre_skey = md5($tranID.$order_so.$status.$domain.$amount.$currency);
|
||||
$myskey = md5($paydate.$domain.$pre_skey.$appcode.$this->verifyKey);
|
||||
return $skey == $myskey;
|
||||
}
|
||||
|
||||
public function paymentNotification($data){
|
||||
$tranID = $data['tranID'];
|
||||
$order_so = $data['orderid'];
|
||||
$status = $data['status'];
|
||||
$domain = $data['domain'];
|
||||
$amount = $data['amount'];
|
||||
$currency = $data['currency'];
|
||||
$appcode = $data['appcode'];
|
||||
$paydate = $data['paydate'];
|
||||
$skey = $data['skey'];
|
||||
|
||||
$log_payment_transactions = new LogPaymentTransactions();
|
||||
$log_payment_transactions->insert([
|
||||
'order_id' => 0,
|
||||
'order_type' => 'order',
|
||||
'url' => 'notification',
|
||||
'request' => json_encode($data),
|
||||
'respond' => '',
|
||||
'result' => $skey.'-check-token',
|
||||
'status' => $status,
|
||||
]);
|
||||
|
||||
$is_valid = $this->validateToken($data);
|
||||
|
||||
if (!$is_valid) {
|
||||
$result = 'invalid-token'; // Invalid SKEY, ignore or log as fraud attempt
|
||||
}
|
||||
|
||||
$orders = new Orders();
|
||||
$order = $orders->where('order_so', $order_so)->first();
|
||||
$order_id = $order['id'];
|
||||
|
||||
if($status == '00' || $status == '0'){
|
||||
if(completeOrder($order_id)){
|
||||
$result = 'success-payment';
|
||||
}else{
|
||||
$result = 'failed-payment';
|
||||
}
|
||||
}else{
|
||||
$explode_order_so = explode('-', $order_so);
|
||||
$order_so_number = $explode_order_so[1] ?? 0;
|
||||
$order_so_number++;
|
||||
$order_so = $explode_order_so[0].'-'.$order_so_number;
|
||||
$orders->update($order_id, ['order_so' => $order_so]);
|
||||
$result = 'failed-payment';
|
||||
}
|
||||
|
||||
$log_payment_transactions = new LogPaymentTransactions();
|
||||
$log_payment_transactions->insert([
|
||||
'order_id' => $order_id,
|
||||
'order_type' => 'order',
|
||||
'url' => 'notification',
|
||||
'request' => json_encode($data),
|
||||
'respond' => json_encode($result),
|
||||
'result' => $skey.'-'.$is_valid,
|
||||
'status' => $status,
|
||||
]);
|
||||
|
||||
return $result;
|
||||
// if($status == '00'){
|
||||
// //send notification to fiuu server
|
||||
// send_api_request('POST', );
|
||||
// }
|
||||
}
|
||||
|
||||
public function topupNotification($data)
|
||||
{
|
||||
$tranID = $data['tranID'];
|
||||
$topup_number = $data['orderid'];
|
||||
$status = $data['status'];
|
||||
$domain = $data['domain'];
|
||||
$amount = $data['amount'];
|
||||
$currency = $data['currency'];
|
||||
$appcode = $data['appcode'];
|
||||
$paydate = $data['paydate'];
|
||||
$skey = $data['skey'];
|
||||
|
||||
$log_payment_transactions = new LogPaymentTransactions();
|
||||
$log_payment_transactions->insert([
|
||||
'order_id' => 0,
|
||||
'order_type' => 'topup',
|
||||
'url' => 'topup-notification',
|
||||
'request' => json_encode($data),
|
||||
'respond' => '',
|
||||
'result' => $skey.'-check-token',
|
||||
'status' => $status,
|
||||
]);
|
||||
|
||||
$is_valid = $this->validateToken($data);
|
||||
|
||||
if (!$is_valid) {
|
||||
$result = 'invalid-token';
|
||||
}
|
||||
|
||||
$topups = new TopupModel();
|
||||
$topup = $topups->where('topup_number', $topup_number)->first();
|
||||
|
||||
if (!$topup) {
|
||||
$result = 'topup-not-found';
|
||||
} else {
|
||||
if ($status == '00' || $status == '0') {
|
||||
$topups->update($topup['id'], ['status' => 'Success']);
|
||||
$result = 'success-topup';
|
||||
} else {
|
||||
$topups->update($topup['id'], ['status' => 'Failed']);
|
||||
$result = 'failed-topup';
|
||||
}
|
||||
}
|
||||
|
||||
$log_payment_transactions->insert([
|
||||
'order_id' => $topup['id'] ?? 0,
|
||||
'order_type' => 'topup',
|
||||
'url' => 'topup-notification',
|
||||
'request' => json_encode($data),
|
||||
'respond' => json_encode($result),
|
||||
'result' => $skey.'-'.$is_valid,
|
||||
'status' => $status,
|
||||
]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user