membership application (civicrm)
TRANSCRIPT
CIVICRMMulti-level Membership and online paymentCiviCon Amsterdam
2015
Description
Membership organizations are confronted with a lot of challenges. Not in the least that members want an accurate overview of their membership status, their interactions, … CiviCRM is a great tool for that. Anno 2015 it has to happen now. People are used to e-commerce.
A case from one of our clients, a Belgium Membership organization about the challenges we faced when implementing a complex membership matrix into CiviCRM and how we solved it from a technical point of view.
2Mpact
About 2Mpact
2Mpact is the leading Belgian Association Management company
• Day-to-day administration and management of the association
• Membership retention, fulfillment and efficient use of member benefits and services
• Communication services: websites, print media, digital newsletters
• Event services: working groups, task forces, educational sessions, conferences
• Strategic advice concerning content, lobby and thought leadership
Index
1. Multi-level MembershipA. IntroductionB. MatrixC. CiviCRM integration
2. Online paymentA. IntroductionB. OGMC. Online paymentD. Bank tranfer payment
3. Application/TechnicalA. IntroductionB. ChallengesC. Future/wishlist
Multi-level Membership
A. Introduction
7 Membership organizations• 1 main organization• 6 sub organizations
4 Categories3 Languages3 Kinds of registrations
• Individual• Group• Student
2 Methods• New registration• Prefilled renewal
1 Application
Multi-level Membership
B. Matrix
Our client has multi-level pricing
• Main organization• Mandatory membership• Cost A = different price based on professional status
• Employed, Self employed, Student, Retired, …• Sub organization
• 1 Mandatory, multiple possible• Cost B1,B2,B3, … = fixed price for each sub organization
Total for membership: A + B1 + B2 … And extra options (subscriptions based on choices)
B. Matrix
Multi-level Membership
Leden Voorwaarden MAIN SUB1 SUB2 SUB3 SUB4 SUB5 SUB6Loontrekkenden Lic./master (in loondienst) 80 105 75 0 37 40 0Zelfstandigen Lic./master (in hoofd - of bijberoep) 80 105 95 0 37 40 0Studenten Student master 0 0 0 0 0 0 0Geassocieerden Geen 80 105 75 0 37 40 0Gepensioneerden Gepensioneerden 80 105 75 0 37 40 0
KortingWerkloos Werkloos zijn 25 25 75 0 37 40 0
Pas afgestudeerd Tot 3 jaar na afstuderen 15 105 75 0 37 40 0
Samenwonend Partner is lid 55 105 75 0 37 40 0
Groep Vanaf 5 inschrijvingen 55 105 75 0 37 40 0
C. CiviCRM integrationCategory selection (sub organization)
Multi-level Membership
C. CiviCRM integrationProfessional status (main organization)
Multi-level Membership
C. CiviCRM integration
Created 7 Organizations
Multi-level Membership
C. CiviCRM integration
Created 7 Organizations• Custom fields for “Sector” and “Language”
Multi-level Membership
C. CiviCRM integration
Created 7 Membership types for every Organization• Main Organization: without price (priceset)• Sub Organizations: membership + price
Multi-level Membership
C. CiviCRM integration
1 Priceset for Main Organization
Multi-level Membership
C. CiviCRM integration
1 Priceset for Main Organization
Multi-level Membership
C. CiviCRM integration
Created 7 Organizations• Custom fields
Created 7 Membership types for every Organization• Main Organization• Sub Organizations
1 Priceset for Main Organization
Multi-level Membership
Index
1. Multi-level MembershipA. IntroductionB. MatrixC. CiviCRM integration
2. Online paymentA. IntroductionB. OGMC. Online paymentD. Bank tranfer payment
3. Application/TechnicalA. IntroductionB. ChallengesC. Future/wishlist
Online payment
A. Introduction2 Payment methods
• Ogone online payment• Bank transfer
1 Reference code (OGM)
Online payment
B. OGM
+++090/9337/55493+++
“Overschrijving met Gestructureerde Mededeling”
Used in Belgium for automated payments
First ten are reference number
Last 2 are checksum (restnumber euclidean division by 97)
(+++) or (***) placed before and after
Online payment
C. Online payment
Integration with Ingenico services (Ogone)*
Parameters send to Ogone with an hidden html form
Callback from ogone (succes, fail, cancel)
* More about Ogone/Ingenico services: http://payment-services.ingenico.com/be/nl
Online payment
D. Bank transfer payment
Send member payment information (OGM)
Integration with civiBanking extension*
3 matchers• OGM matcher• Membership number matcher• Name matcher
* Thanks to Björn Endres, more information about civiBanking:https://london2014.civicrm.org/sessions/civibanking-processing-bank-statements-made-easyhttps://amsterdam2015.civicrm.org/sessions/civibanking-processing-bank-statements-made-easy
Index
1. Multi-level MembershipA. IntroductionB. MatrixC. CiviCRM integration
2. Online paymentA. IntroductionB. OGMC. Online paymentD. Bank tranfer payment
3. Application/TechnicalA. IntroductionB. ChallengesC. Future/wishlist
Application/Technical
A. Introduction
Application step 1:
Application/Technical
A. Introduction
Application step 2:
Application/Technical
A. Introduction
Application step 3:
Application/Technical
A. Introduction
Application step 4:
Application/Technical
A. Introduction
Application step 5:
Application/Technical
A. Introduction
Application step 6:
Application/Technical
B. Challenges
There were quite a few technical challenges to get the application running:
• Challenge 1: Glue
• Challenge 2: Membership & contribution via CiviCRM API
• Challenge 3: Registration vs Renewal
• Challenge 4: Multistep Form > Temporary Saves
• Challenge 5: OGM code
• Challenge 6: Activities
Application/Technical
B. Challenge 1: Glue
Angular JS: inspired by CiviCon London 2014 session*• MVC model• Write less code• Flexible• API integration• Translation integration module: https://angular-gettext.rocketeer.be
• Multistep tutorial: https://scotch.io/tutorials/angularjs-multi-step-form-using-ui-router
* More about Robin Mitra’s session: https://london2014.civicrm.org/sessions/using-angularjs-enhance-user-experience
Application/Technical
B. Challenge 2: Membership & contribution via CiviCRM API
1. Link cid to membership type
$mt = civicrm_api3('Membership', 'create', array('membership_type_id' => "X",'contact_id' =>"Y",));
2. Link cid to contribution & amount
$ct = civicrm_api3('Contribution', 'create', array('sequential' => 1, 'financial_type_id' => 2, 'total_amount' => $$, 'contact_id' => “Y", 'contribution_status_id' => 2,));
3. Link membership to payment
$ok = civicrm_api3('MembershipPayment', 'create', array('membership_id' => $mt,'contribution_id' => $ct, ));
Application/Technical
B. Challenge 3: Registration vs Renewal
For renewal applications
We provide a url with the civicrm hash append to it:
https://demo.be/registration/#form/step1?hash=dd51b44ba4808a9651a9ef068acb81f3
Then the data gets loaded from the CiviCRM API
Application/Technical
B. Challenge 4: Multistep Form > Temporary Saves
Because it was a multistep form we wanted to save data regulary within the application
These saves were easily done with the CiviCRM API
Application/Technical
B. Challenge 5: OGM code
cid_zerod mod_cid current_date MOD_date OGM_EX_MOD OGM_PART_1 (3) OGM_PART_2 (4) OGM000001 01 20141127160001 56 0000010156 000 0010 000/0010/15668901234 88 20141127160014 69 9012348869 901 2348 901/2348/86908234568 49 20141127160015 70 2345684970 234 5684 234/5684/97027123457 73 20141127160016 71 1234577371 123 4577 123/4577/37174456789 55 20141127160017 72 4567895572 456 7895 456/7895/57290567890 00 20141127160018 73 5678900073 567 8900 567/8900/07356
last 6 cid mod 97 current date mod 97 concat 6 + 2 + 2
Application/Technical
B. Challenge 6: Activities
• We created different activities to log different steps within the application
Application/Technical
C. Future/wishlist
Integration with CiviRules*
Universal registration process as CiviCRM extension
* More about CiviRules: https://civicrm.org/blogs/erikhommel/civirules-basic-engine-result-our-first-sprint
Index
1. Multi-level MembershipA. IntroductionB. MatrixC. CiviCRM integration
2. Online paymentA. IntroductionB. OGMC. Online paymentD. Bank tranfer payment
3. Application/TechnicalA. IntroductionB. ChallengesC. Future/wishlist
4. Demo
Contact information
2Mpact nv
Wouter Hechtermans [email protected]
Kortrijksesteenweg 10079000 Gent Belgium
Tel. 09 233 48 66Fax 09 233 51 19
That’s all folks