When creating recurring schedules thru 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 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
RaiseDonors does send "orderInfo.Invoice", which will be formatted as "RaiseDonors-{Donation.Id}", where the donation.Id will be the true Id generated from RaiseDonors for the donation. This alone, should help make every schedule unique in Authorize.net.