[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Mateus Soares
Criador Mateus Soares 26/10/2020

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 ?

Manager Carlos Ferreira 26/10/2020

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.

Carlos Ferreira
Criador Mateus Soares 26/10/2020

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 ?

Mateus Soares
Rafael Felipe 26/10/2020

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! :)

 

Rafael Felipe
Manager Carlos Ferreira 26/10/2020

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.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!