CreditCard::class, GatewayType::BANK_TRANSFER => ACH::class, ]; /** * Returns the gateway types. */ public function gatewayTypes(): array { $types = []; $types[] = GatewayType::CREDIT_CARD; $types[] = GatewayType::BANK_TRANSFER; return $types; } public const SYSTEM_LOG_TYPE = SystemLog::TYPE_FORTE; //define a constant for your gateway ie TYPE_YOUR_CUSTOM_GATEWAY - set the const in the SystemLog model public function setPaymentMethod($payment_method_id) { $class = self::$methods[$payment_method_id]; $this->payment_method = new $class($this); return $this; } public function authorizeView(array $data) { return $this->payment_method->authorizeView($data); } public function authorizeResponse($request) { return $this->payment_method->authorizeResponse($request); } public function processPaymentView(array $data) { return $this->payment_method->paymentView($data); } public function processPaymentResponse($request) { return $this->payment_method->paymentResponse($request); } public function refund(Payment $payment, $amount, $return_client_response = false) { $forte_base_uri = "https://sandbox.forte.net/api/v3/"; if ($this->company_gateway->getConfigField('testMode') == false) { $forte_base_uri = "https://api.forte.net/v3/"; } $forte_api_access_id = $this->company_gateway->getConfigField('apiAccessId'); $forte_secure_key = $this->company_gateway->getConfigField('secureKey'); $forte_auth_organization_id = $this->company_gateway->getConfigField('authOrganizationId'); $forte_organization_id = $this->company_gateway->getConfigField('organizationId'); $forte_location_id = $this->company_gateway->getConfigField('locationId'); try { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $forte_base_uri.'organizations/'.$forte_organization_id.'/locations/'.$forte_location_id.'/transactions', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => '{ "action":"reverse", "authorization_amount":'.$amount.', "original_transaction_id":"'.$payment->transaction_reference.'", "authorization_code": "9ZQ754" }', CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-Forte-Auth-Organization-Id: '.$forte_organization_id, 'Authorization: Basic '.base64_encode($forte_api_access_id.':'.$forte_secure_key) ], ]); $response = curl_exec($curl); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $response = json_decode($response); } catch (\Throwable $th) { $message = [ 'action' => 'error', 'data' => $th, ]; SystemLogger::dispatch( $message, SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, SystemLog::TYPE_FORTE, $this->client, $this->client->company, ); } $message = [ 'action' => 'refund', 'server_message' => $response->response->response_desc, 'server_response' => $response, 'data' => $payment->paymentables, ]; if ($httpcode > 299) { SystemLogger::dispatch( $message, SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, SystemLog::TYPE_FORTE, $this->client, $this->client->company, ); return [ 'transaction_reference' => $payment->transaction_reference, 'transaction_response' => $response, 'success' => false, 'description' => $payment->paymentables, 'code' => 422, ]; } SystemLogger::dispatch( $message, SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_SUCCESS, SystemLog::TYPE_FORTE, $this->client, $this->client->company, ); return [ 'transaction_reference' => $payment->transaction_reference, 'transaction_response' => $response, 'success' => $response->response->response_code == 'A01' ? true : false, 'description' => $payment->paymentables, 'code' => $httpcode, ]; } //////////////////////////////////////////// // DB /////////////////////////////////////////// public function auth(): bool { $forte_base_uri = "https://sandbox.forte.net/api/v3/"; if ($this->company_gateway->getConfigField('testMode') == false) { $forte_base_uri = "https://api.forte.net/v3/"; } $forte_api_access_id = $this->company_gateway->getConfigField('apiAccessId'); $forte_secure_key = $this->company_gateway->getConfigField('secureKey'); $forte_auth_organization_id = $this->company_gateway->getConfigField('authOrganizationId'); $forte_organization_id = $this->company_gateway->getConfigField('organizationId'); $forte_location_id = $this->company_gateway->getConfigField('locationId'); $response = Http::withBasicAuth($forte_api_access_id, $forte_secure_key) ->withHeaders(['X-Forte-Auth-Organization-Id' => $forte_organization_id]) ->get("{$forte_base_uri}/organizations/{$forte_organization_id}/locations/{$forte_location_id}/customers/"); return $response->successful(); } public function baseUri(): string { $forte_base_uri = "https://sandbox.forte.net/api/v3/"; if ($this->company_gateway->getConfigField('testMode') == false) { $forte_base_uri = "https://api.forte.net/v3/"; } return $forte_base_uri; } private function getOrganisationId(): string { return $this->company_gateway->getConfigField('organizationId'); } public function getLocationId(): string { return $this->company_gateway->getConfigField('locationId'); } public function stubRequest() { $forte_api_access_id = $this->company_gateway->getConfigField('apiAccessId'); $forte_secure_key = $this->company_gateway->getConfigField('secureKey'); $forte_auth_organization_id = $this->company_gateway->getConfigField('authOrganizationId'); return Http::withBasicAuth($forte_api_access_id, $forte_secure_key) ->withHeaders(['X-Forte-Auth-Organization-Id' => $this->getOrganisationId()]); } public function importCustomers() { $response = $this->stubRequest() ->withQueryParameters(['page_size' => 10000]) ->get("{$this->baseUri()}/organizations/{$this->getOrganisationId()}/locations/{$this->getLocationId()}/customers"); if($response->successful()){ foreach($response->json()['results'] as $customer) { $client_repo = new ClientRepository(new ClientContactRepository()); $factory = new ForteCustomerFactory(); $data = $factory->convertToNinja($customer, $this->company_gateway->company); $client_repo->save($data, ClientFactory::create($this->company_gateway->company_id, $this->company_gateway->user_id)); } } } }