Thanks for your patience, Timothy. Here’s what Jason said:
Jason Caldwell said:
How to reproduce the behavior:
– Sell a yearly recurring subscription with an Authorize.Net Pro Form. (e.g. [hilite code]rt="Y"[/hilite] and [hilite code]rr="1"[/hilite]).
– Signup today and use a credit card that is good today, but it expires before this time again next year.
What happens is that s2Member charges you today for a full year (and you get in no problem); but s2Member does NOT create an ARB, because it’s not possible. Your credit card will expire before next year comes around.
You will see this in your authnet-api.log file (e.g. the charge for today’s transaction).
array (
0 => '1',
1 => '1',
2 => '1',
3 => 'This transaction has been approved.',
Followed by s2Member’s attempt to create the ARB to handle billing next year.
array (
'response_reason_code' => 'E00018',
'response_code' => 'E00018',
'response_reason_text' => 'Credit Card expires before the start of the subscription.',
'response_text' => 'Credit Card expires before the start of the subscription.',
'__error' => 'Error #E00018. Credit Card expires before the start of the subscription.',
)
s2Member ignores this error, because you did pay for a full year today. So you’re good for a full year. Instead of producing an error during checkout, we let this slide through, and instead of creating an ARB (which is not possible in this scenario); we set an EOT Time for this user (forcing the EOT Time to this time next year).
I investigated the log files submitted by this site owner and found this is exactly what’s happening to them.
So basically the subscription can’t be created because of the card’s expiration date, but the first charge is okay and is processed as a one-time payment.