Toop demais mano. Queria poder ajudar a desenvolver.
Deixarei uma sugestão aqui: Você já tem uma "contrato" para definição do que é um provider na sua aplicação. E eles seguem os seguintes métodos.
- generatePix
- getPixStatus
- delPixCob
- transfer
Na hora de instanciar sua classe principal, receba como parâmetro a classe do provider, e sua classe de provider que vai lidar com a chave de API ou se ta em sandbox ou não, separando assim as responsabilidades. Por que o que ce ta fazendo é recebendo APIKey e sandbox pela classe EasyPix e passando ela para o provider.
No momento sua classe EasyPix ta totalmente acoplada aos provider que você da suporte, caso eu usuário da sua lib tenha um serviço próprio e queira criar minha própria classe de provider eu não conseguiria sem mexer na classe EasyPix e adicionando la no switch do construtor o meu provider personalizado.