When creating recurring schedules thru Legacy RaiseDonors, Authorize.net has a built in duplication detector - that when triggered, will prevent a subscription from being created.
When this error message is present, it means Authorize.net believes the information being submitted to create a recurring schedule, will duplicate an existing and active schedule. And thus, Authorize.net throws this error and prevents this from happening.
You can work around this by understanding what fields Authorize.net is looking at to determine if this subscription qualifies as a match.
The ARB system checks a new subscription for duplicates, using these fields:
- merchantID
- customerInfo.payment.creditCard.cardNumber
- customerInfo.payment.eCheck.routingNumber
- customerInfo.payment.eCheck.accountNumber
- customerInfo.customerID
- customerInfo.billingInfo.billToAddress.firstName
- customerInfo.billingInfo.billToAddress.lastName
- customerInfo.billingInfo.billToAddress.company
- customerInfo.billingInfo.billToAddress.streetAddress
- customerInfo.billingInfo.billToAddress.city
- customerInfo.billingInfo.billToAddress.stateProv
- customerInfo.billingInfo.billToAddress.zip
- orderInfo.amount
- orderInfo.invoice
- rcurrence.startDate
- recurrence.interval
- recurrence.unit
If all of these fields are duplicated in an existing subscription, E00012 will result. Modifying any of these fields should result in a unique subscription.
The following fields are NOT sent by Legacy RaiseDonors to Authorize.net, so there is no ability to modify these fields:
- customerInfo.billingInfo.billToAddress.company
- recurrence.unit
If ALL of the following fields match the information in an existing subscription, error E00012 will result. To prevent this error from happening, modify one of these fields to ensure the data submitted to Authorize.net is unique from existing subscriptions.
- merchantID
- customerInfo.payment.creditCard.cardNumber
- customerInfo.payment.eCheck.routingNumber
- customerInfo.payment.eCheck.accountNumber
- customerInfo.billingInfo.billToAddress.firstName
- customerInfo.billingInfo.billToAddress.lastName
- customerInfo.billingInfo.billToAddress.streetAddress
- customerInfo.billingInfo.billToAddress.city
- customerInfo.billingInfo.billToAddress.stateProv
- customerInfo.billingInfo.billToAddress.zip
- orderInfo.amount
- recurrence.startDate
- recurrence.interval
Legacy RaiseDonors does send "orderInfo.Invoice", which will be formatted as "Legacy RaiseDonors-{Donation.Id}", where the donation.Id will be the true Id generated from Legacy RaiseDonors for the donation. This alone, should help make every schedule unique in Authorize.net.