hey @shawnyv,
This is tricking the customer, because he might not want to use that payment method as a one to be charged.
You should show a list of payment methods attached for that customer, and then allow the customer to chose which one should be default, only then the subscription will work as it should :)
Earlier today we had similar discussion with a user here. So from the Billable trait, hasPaymentMethod() will also return false if you don't have a Default payment method for the customer.
So I think that the proper way is to list all the payment methods for the customer, and allow him/her to select which one should be used by default.
You can take a look at the discussion here:
https://laracasts.com/discuss/channels/laravel/cashier-addpaymentmethod-does-not-update-card-brand
Now that user is pretty angry with me, but nonetheless I am trying to help here :)
You can try that approach and let me know if it does the job.. just to test if it will work when the user has a default payment method, try this line first:
$user->updateDefaultPaymentMethod($user->paymentMethods()->first()->id);
// then
$subscription = $user->newSubscription('product','plan')->quantity($quantity)->create();
should work I believe :) but let's see :)