Although this works, it has these 3 faults that occur on
ARBCreateSubscriptionRequest (subscriptions) but do not occur on
CreateTransactionRequest (single payments):
- It does not confirm CVC (card code).
- It does not confirm valid card expiration date.
- It does not confirm available funds to start the subscription.
Working with Authorize.Net tech support, they confirmed that the proper procedure is to:
CreateTransactionRequestto create the initial payment of the subscription, thereby giving an immediate response and getting around the listed problems above.
- Then, they said to follow this with a
ARBCreateSubscriptionRequestwhere the start date is the next term of their subscription.
Granted, yes, even without a
CreateTransactionRequest, but solely using
ARBCreateSubscriptionRequest when the subscription initial payment kicks in 24 hours later, the card will fail and a webhook message can be sent to my cart to let me know to disable whatever I enabled. However, an immediate response would be more suitable and would certainly alleviate potential customer frustration and merchant frustration. Plus, if one is shipping something with the purchase, it is crucial for the merchant to know that the purchase worked.
So, for instance, let's say I charge $9 a month on a subscription. The first payment would be with
CreateTransactionRequest for $9 for the current month. Then, create
ARBCreateSubscriptionRequest with a delay to start on the first day of the next month, and an interval of every month. So, the customer gets processed (pass/fail) on the initial $9 immediately on purchase. Then, when the next month kicks in, their subscription engages for $9/month thereafter.
Okay, I understand this 100%. But here's where I'm not getting a clear answer in the docs or in a support ticket. The
CreateTransactionRequest and the
ARBCreateSubscriptionRequest both need their own unique payment nonce.
Key Problem: If Accept.js is used to generate a single nonce, how do I get two nonces? If I use Accept.js to generate the second nonce, does it invalidate the prior one? I'm confused and the documentation doesn't explain.