I’m using Accept Hosted to handle donations given online for a non-profit entity. I’m currently trying to add support for recurring gifts, which I intend to handle as ARB subscriptions. In view of maintaining PCI compliance, I’m using Accept Hosted to avoid storing or having access to any credit card data (other than the last four digits that Authorize.Net allows users of the backend to see).
Right now I’m following these steps for recurring transactions
This works great as long as the donor sticks with the same credit card (e.g., XXXX1111). The customer payment profile is created automatically in the createCustomerProfileFromTransaction() call along with the customer profile. However, if the donor tries to submit another gift with a new credit card (e.g., XXXX8888), the transaction still goes through with the old credit card number (such as XXXX1111), not the new number as expected.
I’m creating the customer payment profile with the createCustomerProfileFromTransaction() call because that’s the only way I can see to create a payment profile from a transaction without inputting the credit card number. Unfortunately, createCustomerProfileFromTransaction() is only called on a first-time donation so a new payment profile isn’t created on any subsequent gifts, even if a new credit card is used.
A few possible solutions I’ve looked into:
Any help/advice? Thanks in advance.
Solved! Go to Solution.
10-02-2020 02:47 PM
Solution:
- Set up the first ARB subscription by adding a transaction and subsequently calling createSubscriptionFromCustomerProfile(), passing in the active customer profile, the associated customer payment profile, and relevant transaction information (not card data, which I can't access other than the last 4 digits of the card #).
- For additional ARB subscriptions, display the list of payment profiles with the limited information I can get from the API. Allow the user to select the payment profile they desire or to create a new payment profile.
- If a new payment profile needs created, get a token with GetAcceptCustomerProfilePage and use that token to display an Authorize.net hosted embedded iFrame. Add the payment profile using this iFrame. In this way, I can avoid storing card data.
- On submission of a 2nd (or 3rd, 4th, ...) ARB subscription, call createSubscriptionFromCustomerProfile() again, passing in the active customer profile, the associated customer payment profile, and relevant transaction information (not card data).
01-23-2021 05:19 PM
Solution:
- Set up the first ARB subscription by adding a transaction and subsequently calling createSubscriptionFromCustomerProfile(), passing in the active customer profile, the associated customer payment profile, and relevant transaction information (not card data, which I can't access other than the last 4 digits of the card #).
- For additional ARB subscriptions, display the list of payment profiles with the limited information I can get from the API. Allow the user to select the payment profile they desire or to create a new payment profile.
- If a new payment profile needs created, get a token with GetAcceptCustomerProfilePage and use that token to display an Authorize.net hosted embedded iFrame. Add the payment profile using this iFrame. In this way, I can avoid storing card data.
- On submission of a 2nd (or 3rd, 4th, ...) ARB subscription, call createSubscriptionFromCustomerProfile() again, passing in the active customer profile, the associated customer payment profile, and relevant transaction information (not card data).
01-23-2021 05:19 PM