717 lines
29 KiB
PHP
717 lines
29 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Contracts\LcardActionLogsInterface;
|
|
use App\Contracts\PaymentResourceInterface;
|
|
use App\Contracts\RatingsResourceInterface;
|
|
use App\Contracts\StationResourceInterface;
|
|
use App\Contracts\LoyaltyCardResourceInterface;
|
|
use App\Contracts\SystemPreferenceResourceInterface;
|
|
use App\Helpers\StringHelper;
|
|
use App\Helpers\HttpStatusCode;
|
|
use App\Libraries\CywareLibrary;
|
|
use App\Helpers\CurrentUserHelper;
|
|
use App\Libraries\StaticContents;
|
|
use App\Libraries\Paypal;
|
|
use App\Http\Requests\MobileTopUpFormValidation;
|
|
use App\Http\Requests\PaypalExecuteFormValidation;
|
|
use App\Http\Requests\PaymayaFormValidation;
|
|
use App\TopUp;
|
|
use App\Libraries\UuidHelper;
|
|
use App\Payment;
|
|
|
|
class PaymentController extends Controller
|
|
{
|
|
public $payment;
|
|
|
|
public $rating;
|
|
|
|
public $station;
|
|
|
|
protected $format;
|
|
|
|
protected $lcard_logs;
|
|
|
|
protected $loyalty_card;
|
|
|
|
protected $system_preferences;
|
|
|
|
public function __construct(PaymentResourceInterface $payment,
|
|
RatingsResourceInterface $rating,
|
|
StationResourceInterface $station,
|
|
HttpStatusCode $httpStatusCode,
|
|
LcardActionLogsInterface $lcard_logs,
|
|
LoyaltyCardResourceInterface $loyalty_card,
|
|
SystemPreferenceResourceInterface $system_preferences)
|
|
{
|
|
$this->format = $httpStatusCode;
|
|
$this->lcard_logs = $lcard_logs;
|
|
$this->payment = $payment;
|
|
$this->rating = $rating;
|
|
$this->station = $station;
|
|
$this->loyalty_card = $loyalty_card;
|
|
$this->system_preferences = $system_preferences;
|
|
|
|
}
|
|
|
|
public function filter_by_value ($array, $index, $value){
|
|
if(is_array($array) && count($array)>0)
|
|
{
|
|
foreach(array_keys($array) as $key){
|
|
$temp[$key] = $array[$key][$index];
|
|
|
|
if ($temp[$key] == $value){
|
|
$newarray[$key] = $array[$key];
|
|
}
|
|
}
|
|
}
|
|
return $newarray;
|
|
}
|
|
|
|
public function unique_multidim_array($array, $key) {
|
|
$temp_array = array();
|
|
$i = 0;
|
|
$key_array = array();
|
|
$res = [];
|
|
foreach($array as $val) {
|
|
if (!in_array($val[$key], $key_array)) {
|
|
$key_array[$i] = $val[$key];
|
|
$temp_array[$i] = $val;
|
|
}
|
|
$i++;
|
|
}
|
|
foreach($temp_array as $v) {
|
|
$res[] = $v;
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
public function transactions(Request $request)
|
|
{
|
|
$date_start = $request->has('date_start') ? date('Ymd',strtotime($request->date_start)) : date('Ymd');
|
|
$date_end = $request->has('date_end') ? date('Ymd',strtotime($request->date_end)) : date('Ymd');
|
|
$member_details = CurrentUserHelper::get_currentMember();
|
|
|
|
$cyware = new CywareLibrary();
|
|
|
|
$cyware->setCardNumber($member_details->card_number);
|
|
$cyware->setStartDate($date_start);
|
|
$cyware->setEndDate($date_end);
|
|
$cyware->setLcardID($member_details->lcard_id);
|
|
$cyware->state_trans();
|
|
$this->lcard_logs->log($member_details->lcard_id,'TRANSACTIONS','VIEW','Member viewed transaction lists');
|
|
|
|
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
|
|
{
|
|
|
|
if(isset($cyware->response['data']->total_amount))
|
|
{
|
|
// Note : if the result from cyware has only one transaction. The response data is not indexed
|
|
|
|
$det = $cyware->response['data'];
|
|
$cyware->response['data'] = null;
|
|
$cyware->response['data'][0] = $det;
|
|
}
|
|
|
|
if(count((array)$cyware->response['data']))
|
|
{
|
|
$in_app_stations = StaticContents::in_app_stations();
|
|
$data = [];
|
|
$ctr = 0;
|
|
$total_count = count((array)$cyware->response['data']);
|
|
foreach ($cyware->response['data'] as $key => $value)
|
|
{
|
|
// if(($total_count - 5) <= $ctr)
|
|
// {
|
|
$is_disabled = true;
|
|
$is_feedback_disabled = true;
|
|
$rating = 0;
|
|
if(!isset($value->receipt_num))
|
|
{
|
|
$payment = $this->payment->get_by_trans_num($value->trans_num);
|
|
|
|
if(!isset($in_app_stations[$value->store_id]))
|
|
{
|
|
$rating = isset($payment->ratings) ? $payment->ratings->rate : 0;
|
|
$is_disabled = (isset($payment->ratings) && $payment->ratings->rate > 0 )? true : false;;
|
|
$is_feedback_disabled = false;
|
|
}
|
|
}
|
|
|
|
$items = [];
|
|
if(isset($value->items) && count($value->items) > 0)
|
|
{
|
|
foreach ($value->items as $k => $i)
|
|
{
|
|
$items[] = [
|
|
'item' => $i->item_desc,
|
|
'quantity' => (double)$i->qty,
|
|
'price' => (double)$i->price,
|
|
];
|
|
}
|
|
}
|
|
|
|
// NOTE : removed for multiple items
|
|
// 'item' => isset($value->reward_desc) ? $value->reward_desc : $value->item_desc,
|
|
// 'price' => $value->total_amount,
|
|
|
|
$data[] = [
|
|
'station' => $value->store_name,
|
|
'total_amount' => (double)$value->total_amount,
|
|
'earned' => isset($value->reward_code) ? 0 : (double)$value->total_points,
|
|
'redeemed' => isset($value->reward_code) ? (double)$value->total_points : 0,
|
|
'date' => date('d M Y, h:i A',strtotime($value->date.' '.$value->time)),
|
|
'rating' => $rating,
|
|
'is_disabled' => $is_disabled,
|
|
'is_feedback_disabled' => $is_feedback_disabled,
|
|
'trans_num' => isset($value->receipt_num) ? $value->receipt_num : $value->trans_num,
|
|
'items' => $items,
|
|
];
|
|
// }
|
|
$ctr++;
|
|
}
|
|
|
|
$nResults = [];
|
|
foreach ($data as $key => $trans) {
|
|
$ftr = $this->filter_by_value($data, 'trans_num', $trans['trans_num']);
|
|
if(count($ftr) > 1){
|
|
//DUPLICATES FOUND
|
|
$trans['total_amount'] = 0;
|
|
$trans['redeemed'] = 0;
|
|
$trans['earned'] = 0;
|
|
$trans['items'] = [];
|
|
foreach ($ftr as $duplicates => $tran) {
|
|
$trans['redeemed'] += $tran['redeemed'];
|
|
$trans['earned'] += $tran['earned'];
|
|
$trans['total_amount'] += $tran['total_amount'];
|
|
foreach ($tran['items'] as $items => $item) {
|
|
$trans['items'][] = $item;
|
|
}
|
|
}
|
|
$nResults[] = $trans;
|
|
}else{
|
|
$nResults[] = $trans;
|
|
}
|
|
}
|
|
|
|
$result = $this->unique_multidim_array($nResults, 'trans_num');
|
|
$final = [];
|
|
$final['sorted'] = $result;
|
|
$final['original'] = $data;
|
|
|
|
return $this->format->mobile_success('Success', $result);
|
|
}
|
|
else
|
|
return $this->format->mobile_success('Success');
|
|
}
|
|
else
|
|
{
|
|
if($cyware->response['message'] == null)
|
|
return $this->format->mobile_success("No records found",[]);
|
|
else
|
|
return $this->format->mobile_error($cyware->response['message'],[]);
|
|
}
|
|
}
|
|
|
|
public function single_transaction(Request $request)
|
|
{
|
|
$date_start = $request->has('date_start') ? date('Ymd',strtotime($request->date_start)) : date('Ymd');
|
|
$date_end = $request->has('date_end') ? date('Ymd',strtotime($request->date_end)) : date('Ymd');
|
|
$member_details = CurrentUserHelper::get_currentMember();
|
|
|
|
$searched = $this->search_transaction(new CywareLibrary(), $member_details->card_number, $request->trans_num, $date_start, $date_end);
|
|
$this->lcard_logs->log($member_details->lcard_id,'TRANSACTIONS','VIEW','Member viewed a transaction');
|
|
if ($searched['success'])
|
|
{
|
|
|
|
$value = $searched['data'];
|
|
|
|
$is_disabled = true;
|
|
$is_feedback_disabled = true;
|
|
$rating = 0;
|
|
if(!isset($value->receipt_num))
|
|
{
|
|
$payment = isset($value->trans_num) ? $this->payment->get_by_trans_num($value->trans_num) : null;
|
|
$in_app_stations = StaticContents::in_app_stations();
|
|
if(!isset($in_app_stations[$value->store_id]))
|
|
{
|
|
$rating = isset($payment->ratings) ? $payment->ratings->rate : 0;
|
|
$is_disabled = (isset($payment->ratings) && $payment->ratings->rate > 0 )? true : false;
|
|
$is_feedback_disabled = false;
|
|
}
|
|
}
|
|
|
|
$customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile');
|
|
$customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile');
|
|
|
|
$items = [];
|
|
if(isset($value->items) && count($value->items) > 0)
|
|
{
|
|
foreach ($value->items as $k => $i)
|
|
{
|
|
$items[] = [
|
|
'item' => $i->item_desc,
|
|
'quantity' => (double)$i->qty,
|
|
'price' => (double)$i->price,
|
|
];
|
|
}
|
|
}
|
|
|
|
|
|
$data = [
|
|
'station' => $value->store_name,
|
|
// 'item' => isset($value->reward_desc) ? $value->reward_desc : $value->item_desc,
|
|
'total_amount' => (double)$value->total_amount,
|
|
'earned' => isset($value->reward_code) ? 0 : (double)$value->total_points,
|
|
'redeemed' => isset($value->reward_code) ? (double)$value->total_points : 0,
|
|
'date' => date('d M Y, h:i A',strtotime($value->date.' '.$value->time)),
|
|
// 'quantity' => isset($value->qty) ? (double)$value->qty : 1,
|
|
'rating' => $rating,
|
|
'is_disabled' => $is_disabled,
|
|
'is_feedback_disabled' => $is_feedback_disabled,
|
|
'trans_num' => isset($value->receipt_num) ? $value->receipt_num : $value->trans_num,
|
|
'contact_email' => $customer_service_email[0]['value'],
|
|
'contact_number' => $customer_service_number[0]['value'],
|
|
'items' => $items
|
|
];
|
|
return $this->format->mobile_success('Success',$data);
|
|
}
|
|
else
|
|
return $this->format->mobile_error($searched['message']);
|
|
}
|
|
|
|
public function rate_transaction(Request $request)
|
|
{
|
|
$payment = $this->payment->get_by_trans_num($request->trans_num);
|
|
$member_details = CurrentUserHelper::get_currentMember();
|
|
|
|
if($payment)
|
|
{
|
|
if(isset($payment->ratings))
|
|
{
|
|
$data = [
|
|
'lcard_id' => $member_details->lcard_id,
|
|
'station_id' => $payment->station_id,
|
|
'payment_id' => $payment->payment_id,
|
|
'rate' => $request->rate,
|
|
];
|
|
|
|
if($this->rating->update($data,$payment->ratings->rating_id))
|
|
{
|
|
$this->lcard_logs->log($member_details->lcard_id,'RATINGS','UPDATE','Member updated a rate on a transaction');
|
|
return $this->format->mobile_success('Success');
|
|
}
|
|
else
|
|
return $this->format->mobile_error('Something went wrong');
|
|
}
|
|
else
|
|
{
|
|
$data = [
|
|
'lcard_id' => $member_details->lcard_id,
|
|
'station_id' => $payment->station_id,
|
|
'payment_id' => $payment->payment_id,
|
|
'rate' => $request->rate,
|
|
];
|
|
|
|
if($this->rating->store($data))
|
|
{
|
|
$this->lcard_logs->log($member_details->lcard_id,'RATINGS','STORE','Member rated a transaction');
|
|
return $this->format->mobile_success('Success');
|
|
}
|
|
else
|
|
return $this->format->mobile_error('Something went wrong');
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$date_start = $request->has('date_start') ? date('Ymd',strtotime($request->date_start)) : date('Ymd');
|
|
$date_end = $request->has('date_end') ? date('Ymd',strtotime($request->date_end)) : date('Ymd');
|
|
|
|
$searched = $this->search_transaction(new CywareLibrary(), $member_details->card_number, $request->trans_num, $date_start, $date_end);
|
|
|
|
if($searched['success'])
|
|
{
|
|
$value = $searched['data'];
|
|
if($value)
|
|
{
|
|
$items = [];
|
|
if(isset($value->items) && count($value->items) > 0)
|
|
{
|
|
foreach ($value->items as $k => $i)
|
|
{
|
|
$items[] = [
|
|
'item' => $i->item_desc,
|
|
'quantity' => (double)$i->qty,
|
|
'price' => (double)$i->price,
|
|
];
|
|
}
|
|
}
|
|
|
|
$station = $this->station->getByField('code',$value->store_id);
|
|
$store_data = [
|
|
'station_id' => $station ? $station[0]['station_id'] : 0,
|
|
'trans_num' => isset($value->receipt_num) ? $value->receipt_num : $value->trans_num,
|
|
// 'item_name' => isset($value->reward_desc) ? $value->reward_desc : $value->item_desc,
|
|
// 'item_code' => isset($value->reward_code) ? $value->reward_code : $value->item_code,
|
|
'total_amount' => $value->total_amount,
|
|
'points' => isset($value->reward_code) ? $value->total_points : 0,
|
|
'entry_type_code' => isset($value->reward_code) ? $value->reward_code : $value->entry_type_code,
|
|
'entry_type_desc' => isset($value->reward_desc) ? $value->reward_desc : $value->entry_type_desc,
|
|
// 'receipt_num' => isset($data->receipt_num) ? $data->receipt_num : null,
|
|
// 'quantity' => isset($value->qty) ? $value->qty : 1,
|
|
'date' => date('Y-m-d H:i:00',strtotime($value->date.' '.$value->time)),
|
|
'items' => $items
|
|
];
|
|
|
|
$payment_id = $this->payment->store_non_app($store_data,$member_details);
|
|
if($payment_id)
|
|
{
|
|
$data = [
|
|
'lcard_id' => $member_details->lcard_id,
|
|
'station_id' => $store_data['station_id'],
|
|
'payment_id' => $payment_id,
|
|
'rate' => $request->rate,
|
|
];
|
|
|
|
if($this->rating->store($data))
|
|
{
|
|
$this->lcard_logs->log($member_details->lcard_id,'PAYMENTS','STORE','Member added a non-APP transaction through ratings');
|
|
return $this->format->mobile_success('Success');
|
|
}
|
|
else
|
|
return $this->format->mobile_error('Something went wrong');
|
|
}
|
|
}
|
|
|
|
return $this->format->mobile_error('Something went wrong');
|
|
}
|
|
else
|
|
return $this->format->mobile_error($searched['message']);
|
|
}
|
|
}
|
|
|
|
|
|
// paypal transactions
|
|
|
|
public function get_paypal_url(MobileTopUpFormValidation $request)
|
|
{
|
|
// check if already have 5 transactions in 24 hours
|
|
// $date_yesterday = date('Y-m-d H:i:s', strtotime('-24 hours'));
|
|
// $date_now = date('Y-m-d H:i:s');
|
|
|
|
// $payments = $this->payment->count_between($member_details->lcard_id, $date_yesterday, $date_now);
|
|
$payments = $this->count_transaction(new CywareLibrary, $member_details->card_number, date('Y-m-d'));
|
|
if($payments < 5)
|
|
{
|
|
$trans_count = $this->payment->count_trans_month() + 1;
|
|
$trans_num = (env('SI_NUM_RANDOM','false') == true ? StringHelper::random_num(2).date('m') : date('ym')).str_pad($trans_count, 4, "0", STR_PAD_LEFT);
|
|
|
|
$paypal = new Paypal;
|
|
$paypal->set_amount($request->amount);
|
|
$paypal->set_invoice_number($trans_num);
|
|
|
|
if($paypal->generate_paypal_url())
|
|
{
|
|
$this->payment->store([
|
|
'trans_num' => $trans_num,
|
|
// 'item_name' => 'PREPAID LOAD',
|
|
// 'item_code' => 'PREPAID',
|
|
'amount' => $request->amount,
|
|
'entry_type_code' => 'APP',
|
|
'entry_type_desc' => 'APP',
|
|
'paypal_id' => $paypal->get_paypal_id(),
|
|
'other' => serialize($paypal->get_response()),
|
|
'items' => [
|
|
[
|
|
'item' => 'PREPAID LOAD',
|
|
'quantity' => 1,
|
|
'price' => $request->amount
|
|
]
|
|
]
|
|
],$member_details);
|
|
|
|
$this->lcard_logs->log($member_details->lcard_id,'PAYMENTS','STORE','Member added a pending payment through Paypal. Transaction Number : '.$trans_num);
|
|
|
|
return $this->format->mobile_success('Success',[
|
|
'redirect_url' => $paypal->get_approval_url(),
|
|
'paypal_id' => $paypal->get_paypal_id(),
|
|
'trans_num' => $trans_num,
|
|
]);
|
|
}
|
|
else
|
|
return $this->format->mobile_error('Paypal Error');
|
|
}
|
|
else
|
|
return $this->format->mobile_error('You already reached the maximum allowed Top Up transactions per day. Please Top Up again after 24 hours.');
|
|
}
|
|
|
|
// Count the total number of transactions for the Payments Table
|
|
public function count_total_transactions(){
|
|
$listCount = Payment::with(['loyaltyCard'])->where('payments.created_at', '>=' ,date('Y-m-d').' 00:00:00')->where('payments.created_at', '<=' ,date('Y-m-d').' 23:59:59')->count();
|
|
if($listCount <= 5){
|
|
return $this->format->mobile_success("Success",$listCount,false);
|
|
}
|
|
return $this->format->unprocessableEntity("You have reached today's top up limit",$listCount);
|
|
}
|
|
|
|
public function paymaya_execute(PaymayaFormValidation $request){
|
|
// eval(\Psy\sh());
|
|
// return $this->format->success('Yep its working',[
|
|
// 'sample response' => "this is sample response",
|
|
// 'sample token' => $request->header('card_number')
|
|
// ]);
|
|
|
|
$member_details = CurrentUserHelper::get_currentMember();
|
|
$reference_number = $request->post('reference_number') ? $request->post('reference_number') : StringHelper::random_num(6);
|
|
$cyware = new CywareLibrary();
|
|
$cyware->setCardNumber($member_details->card_number);
|
|
$cyware->setCashier('APP');
|
|
$cyware->setBranch('APP');
|
|
$cyware->setRegisterNum('1');
|
|
$cyware->setSiNum($reference_number);
|
|
$cyware->setTotalAmount($request->post('amount'));
|
|
$cyware->setPaymentType('CC');
|
|
$cyware->setItemCode('PREPAID');
|
|
|
|
$cyware->state_points();
|
|
|
|
if($cyware->response['message'] == "SI Number already exist"){
|
|
$cyware->setSiNum(StringHelper::random_num(6));
|
|
$cyware->state_points();
|
|
}
|
|
|
|
$trans_count = $this->payment->count_trans_month() + 1;
|
|
$trans_num = (env('SI_NUM_RANDOM','false') == true ? StringHelper::random_num(2).date('m') : date('ym')).str_pad($trans_count, 4, "0", STR_PAD_LEFT);
|
|
|
|
$this->payment->store([
|
|
'trans_num' => $trans_num,
|
|
// 'item_name' => 'PREPAID LOAD',
|
|
// 'item_code' => 'PREPAID',
|
|
'amount' => $request->amount,
|
|
'entry_type_code' => 'APP',
|
|
'entry_type_desc' => 'APP',
|
|
'paypal_id' => $reference_number,
|
|
// 'other' => serialize($paypal->get_response()),
|
|
'other' => '',
|
|
'items' => [
|
|
[
|
|
'item' => 'PREPAID LOAD',
|
|
'quantity' => 1,
|
|
'price' => $request->amount
|
|
]
|
|
]
|
|
],$member_details);
|
|
|
|
return $this->format->success('Transaction Successful',[
|
|
'cyware' => $cyware->response,
|
|
'card_number' => $request->header('card_number')
|
|
]);
|
|
|
|
// if($cyware->response['status_code'] == "200" && $cyware->response['success'] == "Prepaid load is successfully loaded in your account")
|
|
// {
|
|
// return $this->format->success('Transaction Successful',[
|
|
// 'message' => "It works",
|
|
// 'cyware' => $cyware->response
|
|
// ]);
|
|
// }
|
|
// else return $this->format->unprocessableEntity('Payment is successful. However, we encountered a problem updating your Loyalty Points. Please contact Customer Service for assistance.');
|
|
|
|
}
|
|
|
|
private function generateFeeCode(){
|
|
$fee_code = "0001";
|
|
$details = TopUp::orderBy('created_at', 'desc')->first();
|
|
|
|
if($details){
|
|
$fee_code = ltrim($details->fee_code, '0') + 1;
|
|
}
|
|
|
|
$data = str_pad($fee_code, 4, '0', STR_PAD_LEFT);
|
|
return $data;
|
|
}
|
|
|
|
public function paypal_execute(PaypalExecuteFormValidation $request)
|
|
{
|
|
$paypal = new Paypal;
|
|
$paypal->set_paypal_id($request->paymentId);
|
|
$paypal->set_payer_id($request->PayerID);
|
|
|
|
if($paypal->paypal_execute())
|
|
{
|
|
/*
|
|
Note :
|
|
invoice_number = trans_num --custom transaction number to be passed to cyware
|
|
trans_num = paypal_trans_num --transaction number generated from paypal
|
|
*/
|
|
$save_db = $this->payment->success_transaction($paypal->get_invoice_number(),[
|
|
'other' => $paypal->get_response(),
|
|
'firstname' => $paypal->get_payer_firstname(),
|
|
'lastname' => $paypal->get_payer_lastname(),
|
|
'payer_email' => $paypal->get_payer_email(),
|
|
'receiver_email' => $paypal->get_receiver_email(),
|
|
'paypal_trans_num' => $paypal->get_trans_num(),
|
|
'paid_at' => date('Y-m-d H:i:s',strtotime($paypal->get_paid_at())),
|
|
]);
|
|
|
|
if($save_db)
|
|
{
|
|
$db = $this->payment->get_by_trans_num($paypal->get_invoice_number());
|
|
$member_details = $this->loyalty_card->getByField(['lcard_id' => $db->lcard_id]);
|
|
|
|
$cyware = new CywareLibrary();
|
|
$cyware->setCardNumber($member_details[0]->card_number);
|
|
$cyware->setCashier('APP');
|
|
$cyware->setBranch('APP');
|
|
$cyware->setRegisterNum('1');
|
|
$cyware->setSiNum($paypal->get_invoice_number());
|
|
$cyware->setTotalAmount($db->amount);
|
|
$cyware->setPaymentType('CC');
|
|
$cyware->setItemCode('PREPAID');
|
|
|
|
$cyware->state_points();
|
|
|
|
if($cyware->response['status_code'] == "200" && $cyware->response['success'] == "Prepaid load is successfully loaded in your account")
|
|
{
|
|
|
|
$this->payment->cyware_synced($db->payment_id,(isset($searched['data']->total_points) ? $searched['data']->total_points : 0));
|
|
$this->lcard_logs->log($member_details[0]->lcard_id,'PAYMENTS','UPDATE','Member successfully paid transaction number '.$paypal->get_invoice_number());
|
|
|
|
$searched = $this->search_transaction($cyware,$member_details[0]->card_number,$paypal->get_invoice_number(),date('Ymd'),date('Ymd'));
|
|
return $this->format->success('Transaction Successful',[
|
|
'date' => date('d F y h:i A',strtotime($db->paid_at)),
|
|
'card_number' => $member_details[0]->card_number,
|
|
'invoice' => $paypal->get_invoice_number(),
|
|
'points' => isset($searched['data']->total_points) ? $searched['data']->total_points : $paypal->get_total(),
|
|
'payment_val' => $paypal->get_total(),
|
|
'paypal_fee' => $paypal->get_paypal_fee(),
|
|
]);
|
|
}
|
|
else return $this->format->unprocessableEntity('Payment is successful. However, we encountered a problem updating your Loyalty Points. Please contact Customer Service for assistance.',['details' => $cyware->response['message']]);
|
|
}
|
|
else return $this->format->unprocessableEntity('Error on database saving');
|
|
|
|
}
|
|
else
|
|
{
|
|
$this->payment->failed_transaction($request->paymentId, $paypal->get_response());
|
|
return $this->format->unprocessableEntity(($paypal->get_error_message() != null ? $paypal->get_error_message() : 'Your purchase for top-up is not successful. Please try again.'));
|
|
}
|
|
|
|
}
|
|
|
|
public function get_status($trans_num)
|
|
{
|
|
$details = $this->payment->get_by_trans_num($trans_num);
|
|
if($details)
|
|
{
|
|
if($details->status == 1 && $details->cyware_synced == 1)
|
|
return $this->format->mobile_success('Transaction Successful');
|
|
else
|
|
return $this->format->mobile_error('Transaction Failed');
|
|
}
|
|
else
|
|
return $this->format->mobile_error('Transaction Doesn\'t Exist');
|
|
}
|
|
|
|
private function search_transaction($cyware, $card_number, $trans_num, $date_start, $date_end)
|
|
{
|
|
$cyware->setCardNumber($card_number);
|
|
$cyware->setStartDate($date_start);
|
|
$cyware->setEndDate($date_end);
|
|
$cyware->state_trans();
|
|
|
|
$data = [];
|
|
|
|
if($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
|
|
{
|
|
if(count((array)$cyware->response['data']))
|
|
{
|
|
if(isset($cyware->response['data']->total_amount))
|
|
{
|
|
// Note : if the result from cyware has only one transaction. The response data is not indexed
|
|
if(
|
|
(isset($cyware->response['data']->trans_num) && (strcasecmp($cyware->response['data']->trans_num,$trans_num) || $cyware->response['data']->trans_num == $trans_num)/*($cyware->response['data']->trans_num == $trans_num)*/) ||
|
|
(isset($cyware->response['data']->receipt_num) && strcasecmp($cyware->response['data']->receipt_num,$trans_num)/*($cyware->response['data']->receipt_num == $trans_num)*/)
|
|
)
|
|
{
|
|
$data = $cyware->response['data'];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ($cyware->response['data'] as $key => $value)
|
|
{
|
|
if(
|
|
(isset($value->trans_num) && strcasecmp($value->trans_num,$trans_num) == 0/*($value->trans_num == $trans_num)*/) ||
|
|
(isset($value->receipt_num) && strcasecmp($value->receipt_num,$trans_num) == 0/*($value->receipt_num == $trans_num)*/)
|
|
)
|
|
{
|
|
$data = $value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($data)
|
|
return ['success' => true, 'data' => $data];
|
|
else
|
|
return ['success' => false, 'message' => 'Transaction Not Found'];
|
|
}
|
|
return ['success' => false, 'message' => $cyware->response['message']];
|
|
}
|
|
|
|
private function count_transaction($cyware, $card_number, $date)
|
|
{
|
|
$cyware->setCardNumber($card_number);
|
|
$cyware->setStartDate($date);
|
|
$cyware->setEndDate($date);
|
|
$cyware->state_trans();
|
|
|
|
$count = 0;
|
|
|
|
if($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
|
|
{
|
|
if(isset($cyware->response['data']) && count((array)$cyware->response['data']))
|
|
{
|
|
if(isset($cyware->response['data']->total_amount))
|
|
{
|
|
// Note : if the result from cyware has only one transaction. The response data is not indexed
|
|
if($cyware->response['data']->date == $date)
|
|
$count++;
|
|
}
|
|
else
|
|
{
|
|
foreach ($cyware->response['data'] as $key => $value) {
|
|
if($value->date == $date)
|
|
$count++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $count;
|
|
}
|
|
|
|
public function test()
|
|
{
|
|
$cyware = new CywareLibrary();
|
|
$cyware->setCardNumber('1100000000000003');
|
|
$cyware->setCashier('APP');
|
|
$cyware->setBranch('APP');
|
|
$cyware->setRegisterNum('1');
|
|
$cyware->setSiNum('2015111500001');
|
|
$cyware->setTotalAmount('9999.99');
|
|
$cyware->setPaymentType('CC');
|
|
$cyware->setItemCode('PREPAID');
|
|
|
|
$cyware->state_points();
|
|
|
|
dd($cyware->response);
|
|
}
|
|
|
|
}
|