I'm building a software system that uses CiviCRM as a membership database and a billing engine for recurring dues. Our members do not have direct access to CiviCRM or the server on which it runs, and the software I'm writing can only communicate with CiviCRM through CiviCRM's REST API.
My signup flow needs to perform the following steps:
- Create a contact in CiviCRM
- Collect payment information and retreive an iATS token
- Pass that token to CiviCRM, and associate it with the contact.
- Record, somehow, whether the prospective member wants a monthly, biannual, or annual membership. Important: At this point, CiviCRM must not activate a membership or charge money.
- Wait for a period of time, potentially days, for some offline stuff to happen.
- Finally, process payment and activate the membership.
Again, all of this has to happen through the REST API. The software that processes signups cannot use CiviCRM's forms and cannot read or write to CiviCRM's database directly.
Is what I want to do possible without writing custom CiviCRM extensions?
From looking at the V3 endpoints for the iATS extension, I see code that lets me get information out of CiviCRM, but no way to get payment information in. What am I missing?
Edit: In retrospect, this might not be clear: I don't want to write my own CRM -- I just want to use CiviCRM as our CRM and only interact with it through its REST API. If, for instance, my custom software is decommissioned or replaced, I want CiviCRM to keep on storing and processing memberships without having to migrate data from one custom webapp to the next. I can do most of what I need to do through the V3 API, but membership signup seems to be a more complicated problem.