Multi gateway de pagamento
Professor, em um sistema multi tenat pode acontecer que tenants usem gateway de pagamento diferentes, qual seria a melhor forma para trabalhar com mais de um gatway, seria criando controller para cada gatway ou criar facades ?
Olá, Mateus!
Tudo bem?
O ideal é fazer o binding através de interfaces.
Veja o curso de Laravel Repositories, o conceito que aplico lá de trocar o ORM pode (e deve) ser estendido para trabalhar com gateways de pagamento.
Seguindo a mesma logica do repositories, devo criar uma "BaseGatewayX" , criar um "GatewayRepositorioX" que extende o BaseGatewayX" e implementa meu "GatewayRepositorioInterface". Seria mais ou menos assim ?
E como devo fazer a mudança do Gatway X para Y, no caso do repositories, se cria o ServiceProvider e uso o app bind para não dar erro na interface criada no __construct. Devo criar um controle para cada Gateway ou existe alguma forma de mudar a interface do meu Gateway no unico controller ?
Opa, tudo bem Mateus?
Pelo que entendi, você quer alterar o Gateway de acordo com a escolha que o cliente selecionar. Por exemplo, você disponibiliza Mercado Pago, Stripe, Pagar.me e o cliente escolhe dentre as opções o que melhor te atende.
O problema aqui não é trocar o Gateway mas o que você vai oferecer para o seu cliente. Alguns tem a opção split de pagamento, outros não, dentre outras funcionalidades específicas do Gateway.
Vamos pegar o exemplo do Hotmart, não sei qual Gateway eles utilizam, ou seja, isso é transparente para quem compra deles. A única coisa que você sabe é qual a forma que você decide pagar: cartão de crédito, débito, boleto, caixa tem (Aqui talvez um outro possível Gateway). Provavelmente eles não utilizam vários Gateways, mas apenas UM que entrega o que eles precisam. Entende?
Se você realmente precisa usar vários Gateways, talvez o padrão Adapter lhe atenda. Cada um dos Gateways oferencem uma API (Interface) diferente, e seu controller precisa de uma Interface comum para todas as operações que os Gateways oferecem. Junto ao Adapter você pode usar um Strategy para apenas trocar o Gateway de acordo com a preferência do seu cliente. A classe que implementa o Strategy vai receber um objeto do tipo Gateway que implementa um Adapter para assim realizar o pagamento, apesar dos Gateways terem interfaces totalmente diferentes. Entendeu?
Também gostaria de saber o ponto de vista do professor, conhecimento nunca é demais!
Forte abraço, Mateus! :)
Muito bem pontuado Rafael.
Veja o curso que indiquei Mateus, porque nele mostro como trabalhar com implementação de interfaces, isso ajuda nesse processo de tirar a lógica dos controllers e jogar ela para uma implementação mais correta e prática.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!