Allow external invoice generation
May I suggest to make the invoice handling an swappable interface like the payment gateway? I would prefer that the invoices are generated through my external invoicing software (which already provides me a REST API anyhow).
For example an interface, "InvoiceManager" which has two methods "create(options)" and "show(id)" which both just return a URL to the invoice PDF. Extracting such an interface from the current invoice handling would allow it easily install an alternative invoice generator.