defaultGateway = $defaultGateway; } public function via(string $gateway = null): PaymentGatewayDriver { return $this->driver($gateway); } public function custom(string $driverClass, array $options): PaymentGatewayDriver{ $kelas = new \ReflectionClass($driverClass); if($kelas->isSubclassOf(PaymentGatewayDriver::class)){ throw new InvalidArgumentException("[$driverClass] is not a payment gateway driver."); } return new $driverClass($this->config, $options); } protected function createDriver($driver) { $options = $this->config->get('payment.options'); if(key_exists($driver, $options) && class_exists($options['driver'])){ return $this->custom($options['driver'], $options); } throw new InvalidArgumentException("Driver [$driver] not supported."); } public function getDefaultDriver() { return $this->defaultGateway; } }