You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PaymentManager.php 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace MirfalahTech\Laravel\Payment\Manager;
  3. use Illuminate\Contracts\Container\Container;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Manager;
  6. use InvalidArgumentException;
  7. use MirfalahTech\Laravel\Payment\Contracts\PayableEntity;
  8. use MirfalahTech\Laravel\Payment\Contracts\PaymentFactory;
  9. use MirfalahTech\Laravel\Payment\Contracts\PaymentGatewayDriver;
  10. use Symfony\Component\HttpFoundation\Response;
  11. /**
  12. * Class PaymentManager
  13. * @package MirfalahTech\Laravel\Payment\Manager
  14. *
  15. * @method PaymentGatewayDriver driver($driver = null)
  16. * @method string createPaymentURL(PayableEntity $payable, array $options = [])
  17. * @method bool verifyGatewayReturn(Request $request)
  18. * @method bool verifyGatewayCallback(Request $request, Response &$response = null)
  19. *
  20. */
  21. class PaymentManager extends Manager implements PaymentFactory
  22. {
  23. /**
  24. * @var string
  25. */
  26. protected $defaultGateway;
  27. public function __construct(Container $container, string $defaultGateway)
  28. {
  29. parent::__construct($container);
  30. $this->defaultGateway = $defaultGateway;
  31. }
  32. public function via(string $gateway = null): PaymentGatewayDriver
  33. {
  34. return $this->driver($gateway);
  35. }
  36. public function custom(string $driverClass, array $options): PaymentGatewayDriver{
  37. $kelas = new \ReflectionClass($driverClass);
  38. if($kelas->isSubclassOf(PaymentGatewayDriver::class)){
  39. throw new InvalidArgumentException("[$driverClass] is not a payment gateway driver.");
  40. }
  41. return new $driverClass($this->config, $options);
  42. }
  43. protected function createDriver($driver)
  44. {
  45. $options = $this->config->get('payment.options');
  46. if(key_exists($driver, $options) && class_exists($options['driver'])){
  47. return $this->custom($options['driver'], $options);
  48. }
  49. throw new InvalidArgumentException("Driver [$driver] not supported.");
  50. }
  51. public function getDefaultDriver()
  52. {
  53. return $this->defaultGateway;
  54. }
  55. }