<?php
namespace App\Http\Controllers\Partner;
use App\Bank\MasterAccount;
use App\Classes\Kyc;
use App\Classes\Record;
use App\Classes\SendSMS;
use App\Classes\TransactionGeneration;
use App\Http\Controllers\Controller;
use App\Imali\ImaliAccount;
use App\Imali\RechargeImaliAccount;
use Illuminate\Http\Request;
class BimController extends Controller
{
public function verificarEntidadeReferencia(Request $request)
{
$this->validate($request, [
'entity' => 'required',
'reference' => 'required',
'apiKey' => 'required',
'amount' => 'required'
// 'amount' => 'required',
// 'transaction_id' => 'required',
], [
'entity.required' => 'O Campo entity é de carácter Obrigatório',
'reference.required' => 'Referencia obrigatoria',
'apiKey.required' => 'Chave da api obrigatoria',
'amount.required' => 'Montante necessário',
// 'transaction_id.required' => 'Identificador da transacção necessária',
]);
$kyc = new Kyc();
$result = $kyc->checkEntidadeReferencia($request);
if ($result) {
return $result;
} else {
return response()->json(['msg' => 'Validacao efectuada com Sucesso', 'msgtype' => 'S', 'msgid' => 'S001', 'estado' => 'P002', 'valorTotal' => $request->amount, 'dataDoc'=> date('Y/m/d')], 200);
}
}
public function makeRecharge(Request $request)
{
$this->validate($request, [
'entity' => 'required',
'reference' => 'required',
'apiKey' => 'required',
'amount' => 'required',
'transaction_id' => 'required',
], [
'entity.required' => 'O Campo entity é de carácter Obrigatório',
'reference.required' => 'Referencia obrigatoria',
'amount.required' => 'Montante necessário',
'transaction_id.required' => 'Identificador da transacção necessária',
'apiKey.required' => 'Api Key necessária',
]);
$kyc = new Kyc();
$result = $kyc->checkEntidadeReferencia($request);
if ($result) {
return $result;
} else {
$imaliAccount = ImaliAccount::query()->where('reference', $request->reference)->first();
$transactionString = new TransactionGeneration();
$user = ImaliAccount::query()->join('users', 'users.id', '=', 'imali_accounts.user_id')
->where('users.id', $imaliAccount->user_id)
->select('users.*')
->first();
$kyc = new Kyc();
$kyckCheck = $kyc->checkRecharge($request);
if ($kyckCheck) {
return $kyckCheck;
} else {
if ($imaliAccount) {
$balanceActual = $imaliAccount->balance + ($request->amount)/100;
$masterAccount = MasterAccount::find(2);
$recharge = RechargeImaliAccount::create([
'imali_account_id' => $imaliAccount->id,
'transaction_id' => $transactionString->generateTransaction(),
'amount' => $request->amount/100,
'last_balance' => $imaliAccount->balance,
'balance' => $balanceActual,
'recharge_way' => 'Banco',
// 'recharge_way' => 'Banco Referencia' . $imaliAccount->reference,
'estado' => 'sucesso',
'estado_color' => '#388E3C',
'master_account_id' => $masterAccount->id,
'data_partner' => $request->partner_date,
'reference_partner' => $request->transaction_id,
'reference_doc_partner' => $request->partner_reference_doc
]);
$masterBalance = $masterAccount->balance + $request->amount/100;
$masterAccount->update(['balance' => $masterBalance]);
if ($recharge) {
$sms = new SendSMS();
$imaliAccount->update(['balance' => $balanceActual]);
$notification = array(
'icon' => 'ic_imali_logo_verde_01',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Carregamento ' . $recharge->amount . ' MT',
'body' => 'Parabéns, ' . ' carregaste com ' . $recharge->amount . ' MT ' . ' na sua conta ' . $imaliAccount->account_number,
'click_action' => 'com.imali.payapp.payment_RECHARGE_DETAILS',
// 'color' => '#008577'
'color' => '#ffffff'
);
$data = array(
'transaction' => $recharge->transaction_id,
'name' => $user->name,
'amount' => (double)$recharge->amount,
'phone' => $user->phone,
'reference' => $imaliAccount->reference,
'data' => $recharge->created_at,
'estado' => $recharge->estado,
'recharge_way' => $recharge->recharge_way,
'route' => 'RECHARGE_DETAILS',
'terminal' => 'firebase'
);
$this->pushNotifification($user->firebase_token, $notification, $data);
$sms->sendSMSForUserRecharge($recharge);
// $sms->sendSMSForUserRecharge($recharge);
}
if ($recharge) {
// Mail::to($user->email)->send(new Carregamento($recharge));
}
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number,
'details' => $user->name . ' ' . $user->last_name,
'operation' => 'Recharge by Reference',
'status' => 'success',
'user_id' => 1
]);
if ($recharge) {
// return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);
return response()->json(['msg' => 'Validacao efectuada com Sucesso', 'msgtype' => 'S', 'msgid' => 'S001',
'referenciarecibo' => $recharge->transaction_id, 'data' => $recharge->created_at->format('Y/m/d')], 200);
}
}
}
// return response()->json(['msg' => 'Validacao efectuada com Sucesso', 'msgtype' => 'S', 'msgid' => 'S001'], 200);
}
}
public function pushNotifification($token, $notification = array(), $data = array())
{
$apiKey = 'AAAA8zVzEPQ:APA91bHl_DXB6UGb_6gZlmFnaLTQoANtX_OBjvl3nOy2bSlnFhxedvk6EhGj7cZoIvmlbKeCnqGxXbuyMH_rEPuhRXvuitXzo6Pfl2TMXLar1PlifXqEhYq6tS55UMrY2Kffzj-P_UH-';
$fields = array('to' => $token, 'notification' => $notification, 'data' => $data);
$headers = array('Authorization: key=' . $apiKey, 'Content-Type: application/json');
$url = 'https://fcm.googleapis.com/fcm/send';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($curl);
curl_close($curl);
return json_decode($result, true);
}
}