1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- <?php
-
-
- namespace MirfalahTech\Laravel\Payment\Manager;
-
-
- use Illuminate\Contracts\Container\Container;
- use Illuminate\Http\Request;
- use Illuminate\Support\Manager;
- use InvalidArgumentException;
- use MirfalahTech\Laravel\Payment\Contracts\PayableEntity;
- use MirfalahTech\Laravel\Payment\Contracts\PaymentFactory;
- use MirfalahTech\Laravel\Payment\Contracts\PaymentGatewayDriver;
- use Symfony\Component\HttpFoundation\Response;
-
- /**
- * Class PaymentManager
- * @package MirfalahTech\Laravel\Payment\Manager
- *
- * @method PaymentGatewayDriver driver($driver = null)
- * @method string createPaymentURL(PayableEntity $payable, array $options = [])
- * @method bool verifyGatewayReturn(Request $request)
- * @method bool verifyGatewayCallback(Request $request, Response &$response = null)
- *
- */
- class PaymentManager extends Manager implements PaymentFactory
- {
- /**
- * @var string
- */
- protected $defaultGateway;
-
- public function __construct(Container $container, string $defaultGateway)
- {
- parent::__construct($container);
- $this->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;
- }
- }
|