<?php namespace App\Http\Controllers; use App\Classes\Kyc; use App\Classes\Record; use App\Classes\TransactionGeneration; use App\GeneralAdvice; use App\Imali\ImaliAccount; use App\PurchaseVoucher; use Illuminate\Http\Request; use SoapClient; use SoapFault; use DB; class TopUpTestController extends Controller { protected $username; protected $password; protected $topUpUrl; protected $client; protected $msid; protected $imaliUser; protected $request; public function __construct() { //TESTE $this->username = "TEST_PAYTEK"; $this->password = "TESTpassPAYtek"; $this->topUpUrl = 'https://topupretail.com:18880/Service.asmx?wsdl'; // PRODUCTION // $this->username = "PAYTEK_PROD"; // $this->password = "fs.S}nf4:IGXT|R"; // $this->topUpUrl = 'https://topupretail.com:18873/Service.asmx?wsdl'; // $this->request = $request; $this->client = new SoapClient($this->topUpUrl, ['trace' => true]); $this->msid = new TransactionGeneration(); } public function checkClientStartTimes($smartCard) { $transaction = $this->msid->generateMSID(); $directRecharge = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $transaction, 'test' => true, // 'smartCardnumber' => '01012301234' 'smartCardnumber' => $smartCard ) ); $data = json_decode(json_encode($directRecharge), true); $response = $this->client->StarConfirmCustomer($data); if ($response->StarConfirmCustomerResult->hasFault == true) { // return response()->json($response->StarConfirmCustomerResult); return response()->json([ 'message' => $response->StarConfirmCustomerResult->fault->POR_operatorMsg ], 400); } else { if (is_array($response->StarConfirmCustomerResult->availProducts->StarProduct)) { return response()->json([ 'account' => $response->StarConfirmCustomerResult, 'data' => $response->StarConfirmCustomerResult->availProducts->StarProduct ]); } else { return response()->json([ 'account' => $response->StarConfirmCustomerResult, 'data' => array($response->StarConfirmCustomerResult->availProducts->StarProduct) ]); } } } public function payStartTimesPackage(Request $request) { $this->validate($request, [ 'productDesc' => 'required', 'productNumber' => 'required', 'purchaseValue' => 'required', 'smartCardnumber' => 'required' ]); $kyc = new Kyc(); $result = $kyc->checkUserBuyStartimes($request); if ($result) { $log = new Record(); $log->createLog([ 'description' => 'Nr Cliente: ' . $request->smartCardnumber . 'code: ' . $request->productNumber, 'price: ' . $request->purchaseValue, 'details' => $result, 'operation' => 'Buy StarTimes', 'status' => 'Error', 'origin_ip' => $request->ip(), 'origin_request' => $request->url(), 'user_id' => $request->user()->id ]); return $result; } else { $transaction = $this->msid->generateMSID(); $directRecharge = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $transaction, 'test' => true, 'smartCardnumber' => '01012301234', 'productDesc' => $request->productDesc, 'productNumber' => $request->productNumber, 'purchaseValue' => $request->purchaseValue, 'receiptFormat' => 'POR_FORMATED_50', 'terminalChannel' => 'iMali_APP', 'terminalCompanyName' => 'Paytek', 'terminalOperator' => 'iMali', 'terminalLocation' => 'Maputo' ) ); $data = json_decode(json_encode($directRecharge), true); $response = $this->client->StarPayment($data); if ($response->StarPaymentResult->hasFault == false) { $result = $response->StarPaymentResult; $imaliUser = ImaliAccount::query()->where('user_id', $request->user()->id)->first(); $totalAmount = $request->purchaseValue + $imaliUser->taxa; DB::table('imali_accounts')->where('user_id', $request->user()->id)->decrement('balance', $totalAmount); $recarga = PurchaseVoucher::create([ 'transaction' => $result->transactionId, 'vouchername' => 'StarTimes-' . $request->productDesc, 'vouchercode' => $request->productNumber, 'vouchervalue' => $request->purchaseValue, 'price' => $request->purchaseValue, 'datepurchased' => $result->respDateTime, 'reqterminalMsgID' => $result->reqterminalMsgID, 'reqterminalID' => $result->reqterminalID, 'reqMsgID' => $result->reqMsgID, 'respDateTime' => $result->respDateTime, 'receiptFormat' => $result->receiptFormat, 'receipt' => $result->receipt, 'smsreceipt' => $result->smsreceipt, 'user_id' => $request->user()->id, 'voucher_list_id' => null, 'type' => 'Tv', 'smartCard' => $request->smartCardnumber ]); $log = new Record(); $log->createLog([ 'description' => 'Transaction' . $recarga->reqMsgID . ' Nr Cliente: ' . $request->smartCardNumber . 'code: ' . $request->productNumber, 'price: ' . $request->purchaseValue, 'details' => "Pacote Activado Com Sucesso", 'operation' => 'Buy StarTimes', 'status' => 'Success', 'origin_ip' => $request->ip(), 'origin_request' => $request->url(), 'user_id' => $request->user()->id ]); $notification = array( 'icon' => 'ic_i_mali_cover', 'title' => 'i.Mali recargas', 'body' => 'Parabéns, ' . ' comprou recarga ' . $recarga->vouchername . '.' . ' i.Mali é o Futuro', 'click_action' => 'com.imali.payapp.payment_RECARGA_NOTIFICATION', 'color' => '#ffffff' ); $data = array( 'reqMsgID' => $recarga->reqMsgID, 'vouchername' => $recarga->vouchername, 'vouchercode' => (double)$recarga->vouchercode, 'data' => $recarga->created_at, 'price' => $recarga->price, 'vouchervalue' => $recarga->vouchervalue, 'sms' => $recarga->receipt, 'terminal' => 'firebase' ); $this->pushNotifification($request->user()->firebase_token, $notification, $data); return response()->json([ 'payment' => $response, 'message' => 'Pacote activado com Sucesso', 'reqMsgID' => $recarga->reqMsgID, 'sms' => $recarga->smsreceipt ], 200); } else { if ($response->StarPaymentResult->fault->mustALR == true) { $imaliUser = ImaliAccount::query()->where('user_id', $request->user()->id)->first(); $totalAmount = $request->amount + $imaliUser->taxa; DB::table('imali_accounts')->where('user_id', $request->user()->id)->increment('captive_balance', $totalAmount); $g = GeneralAdvice::create([ 'reqMsgID' => $response->StarPaymentResult->reqMsgID, 'reqterminalID' => $response->StarPaymentResult->reqterminalID, 'receiptFormat' => $response->StarPaymentResult->receiptFormat, 'respDateTime' => $response->StarPaymentResult->respDateTime, 'faultNumber' => $response->StarPaymentResult->fault->faultnumber, 'message' => $response->StarPaymentResult->fault->POR_operatorMsg, 'user_id' => $request->user()->id, 'type' => 'direct', 'amount' => $request->purchaseValue, 'msno' => $request->productNumber, 'description' => $request->productDesc ]); $log = new Record(); $log->createLog([ 'description' => 'Transaction ' . $g->reqMsgID . ' Voucher: ' . $request->productDesc, 'details' => $response->StarPaymentResult->fault->POR_operatorMsg, 'operation' => 'Buy StarTimes', 'status' => 'Error', 'origin_ip' => $request->ip(), 'origin_request' => $request->url(), 'user_id' => $request->user()->id ]); } else { return response()->json([ // 'payment' => $response, 'message' => $response->StarPaymentResult->fault->POR_operatorMsg ], 400); } } } } public function getDstvProducts($number, $type) { $msidGeneration = new TransactionGeneration(); $transaction = $msidGeneration->generateMSID(); $directRecharge = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $msidGeneration->generateMSID(), 'test' => true, // 'paymentType' => 'GOTV', // 'smartCardnumber' => '1001003' // HAS BOX OFFICE // 'smartCardnumber' => '1001008' 'smartCardnumber' => $number // 'smartCardnumber' => '7026701729' // ORIGINAL MAFUMO // 'smartCardnumber' => '1001006' // HAS NO BOX OFFICE ) ); $data = json_decode(json_encode($directRecharge), true); $response = $this->client->DSTVConfirmCustomer($data); $result = $response->DSTVConfirmCustomerResult; $responseNew = null; $responseDue = null; $amount = null; if ($result->hasFault == true) { return response()->json(['message' => $response->DSTVConfirmCustomerResult->fault->POR_operatorMsg], 400); } else { if ($type == "GOTV") { if ($result->hasGoTV == true) { if ($result->hasNormal == false and $result->statusGoTV == 'Open' and $result->hasBoxOffice == false) { $dataSumbit = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $msidGeneration->generateMSID(), 'test' => true, 'customerNumber' => $result->customerNumber ) ); $data = json_decode(json_encode($dataSumbit), true); $responseNew = $this->client->DSTVAccountPmntQuote($data); } if ($result->hasNormal == false and $result->statusGoTV == 'Suspended' and $result->hasBoxOffice == false) { $dataSumbit = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $msidGeneration->generateMSID(), 'test' => true, 'customerNumber' => $result->customerNumber ) ); $data = json_decode(json_encode($dataSumbit), true); $client = new SoapClient($this->topUpUrl, ['trace' => true]); $responseDue = $client->DSTVAccountPmntDue($data); } if ($responseDue != null) { $responseDue = $responseDue->DSTVAccountPmntDueResult; } $dataNew = null; if ($responseNew != null) { $responseNew = $responseNew->DSTVAccountPmntQuoteResult->products->DSTVProduct; } // $product = $this->getDstvProduct($type, $result->customerNumber); $product = $this->getDstvProduct($type, $number); if ($product->DSTVAvailableProductsResult->hasFault == true) { return response()->json([ // 'product' => $product->DSTVAvailableProductsResult->products->DSTVProduct, // 'product' => $product->DSTVAvailableProductsResult, 'products' => $product, 'client_result' => $result, 'payment_quote' => $responseNew, 'data' => array($responseNew), 'payment_due' => $responseDue ]); } else { return response()->json([ 'product' => $product->DSTVAvailableProductsResult->products->DSTVProduct, // 'product' => $product->DSTVAvailableProductsResult, 'products' => $product, 'client_result' => $result, 'payment_quote' => $responseNew, 'data' => array($responseNew), 'payment_due' => $responseDue ]); } } else { return response()->json(['message' => 'Este número não tem GOTV'], 400); } } elseif ($type == "DSTV") { if ($result->hasGoTV == false and $result->hasNormal == true) { // if ($result->hasNormal == true and $result->statusGoTV == 'Open' and $result->hasBoxOffice == false) { if ($result->hasNormal == true and $result->statusNormal == 'Open' and $result->hasBoxOffice == false) { $dataSumbit = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $msidGeneration->generateMSID(), 'test' => true, 'customerNumber' => $result->customerNumber ) ); $data = json_decode(json_encode($dataSumbit), true); $responseNew = $this->client->DSTVAccountPmntQuote($data); } // if ($result->hasNormal == false and $result->statusNormal == 'Suspended' and $result->hasBoxOffice == false) { if ($result->hasNormal == true and $result->statusNormal == 'Suspended' and $result->hasBoxOffice == false) { $dataSumbit = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $msidGeneration->generateMSID(), 'test' => true, 'customerNumber' => $result->customerNumber ) ); $data = json_decode(json_encode($dataSumbit), true); $client = new SoapClient($this->topUpUrl, ['trace' => true]); $responseDue = $client->DSTVAccountPmntDue($data); } if ($responseDue != null) { $responseDue = $responseDue->DSTVAccountPmntDueResult; } if ($responseNew != null) { $responseNew = $responseNew->DSTVAccountPmntQuoteResult->products->DSTVProduct; } $product = $this->getDstvProduct($type, $number); // return response()->json([ // 'product' => $product->DSTVAvailableProductsResult->products->DSTVProduct, // 'products' => $product, // 'client_result' => $result, // 'payment_quote' => array($responseNew), // 'data' => array($responseNew), // 'payment_due' => $responseDue // ]); if ($product->DSTVAvailableProductsResult->hasFault == true) { return response()->json([ 'products' => $product, 'client_result' => $result, 'payment_quote' => $responseNew, 'data' => array($responseNew), 'payment_due' => $responseDue ]); } else { return response()->json([ 'product' => $product->DSTVAvailableProductsResult->products->DSTVProduct, 'products' => $product, 'client_result' => $result, 'payment_quote' => $responseNew, 'data' => array($responseNew), 'payment_due' => $responseDue ]); } } else { return response()->json(['message' => 'Este número não tem DSTV'], 400); } } } } private function getDstvProduct($type, $customerSmartCard) { $msidGeneration = new TransactionGeneration(); $transaction = $msidGeneration->generateMSID(); $dataSumbit = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $transaction, 'test' => false, 'paymentType' => $type, 'customerNumber' => '', 'smartCardnumber' => $customerSmartCard ) ); // 'customerNumber' => "7026701729", // 'customerNumber' => '', // 'smartCardnumber' => "7026701729", // 'smartCardnumber' => "4620835248", $data = json_decode(json_encode($dataSumbit), true); $response = $this->client->DSTVAvailableProducts($data); return $response; } public function buyDstvPacote(Request $request) { $kyc = new Kyc(); $result = $kyc->checkUserBuyDSTV($request); if ($result) { return $result; } else { $msidGeneration = new TransactionGeneration(); $directRecharge = array( 'req' => array( 'authCred' => array( 'opName' => $this->username, 'password' => $this->password ), 'terminalID' => 'i.Mali', 'terminalMsgID' => '2020010700060', 'msgID' => $msidGeneration->generateMSID(), 'test' => true, 'customerNumber' => $request->customerNumber, 'paymentType' => $request->payment_type, 'purchaseValue' => $request->price, // 'period' => $request->period, 'period' => 1, 'receiptFormat' => 'POR_FORMATED_50', 'terminalLocation' => 'Maputo Cidade', 'terminalChannel' => "i.Mali", 'terminalCompanyName' => 'Paytek Africa', 'terminalOperator' => 'i.Mali', ) ); $data = json_decode(json_encode($directRecharge), true); $response = $this->client->DSTVSubmitPayment($data); $result = $response->DSTVSubmitPaymentResult; if ($result->hasFault == true and $result->fault->mustALR == true) { GeneralAdvice::create([ 'reqMsgID' => $result->reqMsgID, 'reqterminalID' => $result->reqterminalID, 'receiptFormat' => $result->receiptFormat, 'respDateTime' => $result->respDateTime, 'faultnumber' => $result->fault->faultnumber, 'user_id' => $request->user()->id, 'type' => 'dstv', 'amount' => $request->price, 'msno' => $request->code, 'description' => $request->description ]); $imaliUser = ImaliAccount::query()->where('user_id', $request->user()->id)->first(); $totalAmount = $request->price + $imaliUser->taxa; DB::table('imali_accounts')->where('user_id', $request->user()->id)->increment('captive_balance', $totalAmount); $log = new Record(); $log->createLog([ 'description' => 'Nr Cliente: ' . $request->customerNumber . 'code: ' . $request->code, 'price: ' . $request->price, 'details' => $result->fault->POR_operatorMsg, 'operation' => 'Compra do Pacote '.$request->payment_type, 'status' => 'Error', 'origin_ip' => $request->ip(), 'origin_request' => $request->url(), 'user_id' => $request->user()->id ]); // if ($result->fault->faultnumber == "9") { // // // TRATAMOS O METODO DE MUSTALT // // return response()->json([ // 'message' => $result->fault->POR_operatorMsg, // 'description' => 'VAmos tratar o must Alr', // 'faultnumber' => $result->fault->faultnumber, // 'data' => $response // ], 400); // } // DEVEMOS TRATAR O MUSTALR return response()->json([ 'message' => $result->fault->POR_operatorMsg, 'faultnumber' => $result->fault->faultnumber, 'description2' => 'VAmos tratar o must Alr', 'data' => $response ], 400); } elseif ($result->hasFault == true and $result->fault->mustALR == false) { if ($result->fault->faultnumber == "35") { return response()->json([ 'message' => "Serviço de recargas indisponível.", 'faultnumber' => $result->fault->faultnumber, 'data' => $response ], 400); } else { return response()->json([ 'message' => $result->fault->POR_operatorMsg, 'faultnumber' => $result->fault->faultnumber, 'data' => $response ], 400); } } else { // METODOS DE PAGAMENTO $this->imaliUser = ImaliAccount::query()->where('user_id', $request->user()->id)->first(); $totalAmount = $request->price + $this->imaliUser->taxa; DB::table('imali_accounts')->where('user_id', $request->user()->id)->decrement('balance', $totalAmount); $recarga = PurchaseVoucher::create([ 'transaction' => $result->transactionNo, 'vouchername' => $request->payment_type . '-' . $request->description, // 'vouchername' =>$request->description, 'vouchercode' => $request->code, 'vouchervalue' => $request->price, 'price' => $request->price, 'datepurchased' => $result->respDateTime, 'reqterminalMsgID' => $result->reqterminalMsgID, 'reqterminalID' => $result->reqterminalID, 'reqMsgID' => $result->reqMsgID, 'respDateTime' => $result->respDateTime, 'receiptFormat' => $result->receiptFormat, 'receipt' => $result->receipt, 'smsreceipt' => $result->smsreceipt, 'user_id' => $request->user()->id, 'voucher_list_id' => null, 'type' => 'Tv', 'smartCard' => $request->customerNumber ]); $log = new Record(); $log->createLog([ 'description' => 'Transaction' . $recarga->reqMsgID . ' Nr Cliente: ' . $request->customerNumber . 'code: ' . $request->code, 'price: ' . $request->price, 'details' => "Pacote Activado Com Sucesso", 'operation' => 'Buy StarTimes', 'status' => 'Success', 'origin_ip' => $request->ip(), 'origin_request' => $request->url(), 'user_id' => $request->user()->id ]); $notification = array( 'icon' => 'ic_i_mali_cover', 'title' => 'i.Mali recargas', 'body' => 'Parabéns, ' . ' comprou recarga ' . $recarga->vouchername . '.' . ' i.Mali é o Futuro', 'click_action' => 'com.imali.payapp.payment_RECARGA_NOTIFICATION', 'color' => '#ffffff' ); $data = array( 'reqMsgID' => $recarga->reqMsgID, 'vouchername' => $recarga->vouchername, 'vouchercode' => (double)$recarga->vouchercode, 'data' => $recarga->created_at, 'price' => $recarga->price, 'vouchervalue' => $recarga->vouchervalue, 'sms' => $recarga->receipt, 'terminal' => 'firebase' ); $this->pushNotifification($request->user()->firebase_token, $notification, $data); return response()->json([ 'message' => 'Pagamento Feito com Sucesso', 'data' => $response, 'reqMsgID' => $response->DSTVSubmitPaymentResult->reqMsgID], 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); } }