Description
I'm starting from the assumption that an integration should know as little as possible about the payment processor. If are using the Rest interface with Paypal then on the Authorize side it is pretty seamless about handling the Authorize request appropriately depending on whether the card number is present or not (in the latter case the response object will signal a redirect is required.
However, when it comes to createCard there are 2 possible interfaces at the paypal end. When we have a credit card we can call createCard which does return a token but when the card is not present there is also the RestCreateSubscriptionRequest which generates a billing id - which is pretty consistent with other gateways like Eway & stripe.
Currently the calling code it needs to know 'call createCard' except when you are using paypal Rest and there is no card present. I feel like the CreateCard code could call CreateSubscription when the card is not present
Also see thephpleague/omnipay#522