You are browsing a read-only backup copy of Wikitech. The live site can be found at wikitech.wikimedia.org

Difference between revisions of "Fundraising/Data and flow/PSP integrations/Adyen Checkout"

From Wikitech-static
Jump to navigation Jump to search
imported>Cstone
 
imported>Ejegg
m (→‎Payment Methods: Fix image wrapping)
(One intermediate revision by one other user not shown)
Line 1: Line 1:
Places with some current documentation:
{{Infobox payment service provider
| original_name = Adyen Checkout
| current_name = Adyen Checkout
| payment_methods = Credit Card, iDEAL, Apple Pay
| countries = FR
| console =
| contact =
}}
== Overview ==
Adyen is our backup credit card processor.


https://www.mediawiki.org/wiki/Fundraising_tech/Adyen
In 2021, we updated our Adyen code to use their 'Checkout' integration, version 4. Checkout integration sources Adyen-hosted JS on our payments page and renders payment fields in the same form as the donor data, encrypting the data before submitting it to our server. We are using the 'components' style Checkout integration rather than the 'drop-in' style. Both styles use the same Adyen JS objects, but with components we instantiate a slightly lower-level JS object that is specific to the payment method.


A month after we deployed our new integration, Adyen released Checkout version 5 with some breaking changes and a simplified control flow. We have not made plans to update to version 5.
All calls to the Adyen API are routed through the SmashPig library. There are PaymentProcessor subclasses for each payment method.
Documentation for the former (Hosted Payment Pages) integration is at https://www.mediawiki.org/wiki/Fundraising_tech/Adyen
== Payment Methods ==
=== Credit Cards ===
=== iDEAL ===
User flow
Available with payment_method=rtbt&country=NL
The Checkout UI has a dropdown of available banks. This is gotten with an api call to get available payment methods
{| class="wikitable"
|+
![[File:Idealexample.png|left|frameless]]
![[File:Idealredirectexample.png|frameless|400x400px]]
|}
=== Apple Pay ===
* Implemented using https://docs.adyen.com/payment-methods/apple-pay/web-component
* Using "own certificate" approach
==== Apple Pay Testing Links (TBC) ====
* Apple Pay Developer Account login [https://developer.apple.com/account here]
* Apple Pay test cards [https://developer.apple.com/apple-pay/sandbox-testing/ here]
* Fundraising-tech Apple Pay Sandbox tester accounts [https://docs.google.com/spreadsheets/d/1F-g3j5qdpDTkjigM2Q4CAiODI6YaBF0027PjkgI8ymc/edit#gid=0 here]
* Fundraising-tech Apple Pay Test Server List [https://docs.google.com/spreadsheets/d/1Ng-L0qBWma1U_SHW_u-brtZQSv_PLntyPP9SuknW7Y0/edit#gid=0 here]
== Recurring ==
Recurring Adyen donations are tokenized and are charged on our schedule by the SmashPig Civi extension's recurring payment charge job. Adyen recurring donations require two identifiers:
* Standard payment token, stored in the civicrm_payment_token table and called recurring_payment_token in queue messages and SmashPig parameters, referred to as 'storedPaymentMethodId' in the Adyen API
* Shopper identifier, stored in civicrm_contribution_recur. and called processor_contact_id in queue messages and SmashPig parameters, referred to as shopperReference in the Adyen API
== IPN messages ==
We continue to receive Adyen IPN messages in SOAP format, as with the HPP integration. Because with Checkout we are able to capture card payments directly from payments-wiki, we have disabled the asynchronous capture flow that we were using with the HPP integration. Code for async capture is still present in SmashPig but is disabled in config/adyen/main.yaml by setting capture-from-ipn-listener: false. We should probably remove that code and config variable as part of [[phab:T291448|T291448]].
== Audits ==
Adyen generates csv files on an irregular schedule 'whenever a payable batch closes' https://docs.adyen.com/reporting/settlement-detail-report . We process them with the wmf_audits drupal module that calls functions from SmashPig to parse the CSVs.
== Pending Table ==
The DonationInterface Adyen Checkout adapter as of November 2021 sends duplicated messages to the Pending queue. It might not need to send any messages for card payments, as that queue is mostly used for pending transaction resolution, and that scenario is much less likely under Adyen Checkout due to us making the payment authorization and capture in the same HTTP request where we get the donor data.
== Jobs Queue ==
The IPN listener sends 'RecordCaptureJob' messages to the Jobs-Adyen queue. These jobs combine information from the IPN message with information from the pending queue and send information to the donations queue.
== Testing ==
https://www.mediawiki.org/wiki/Fundraising_tech/Testing#Adyen
https://www.mediawiki.org/wiki/Fundraising_tech/Testing#Adyen

Revision as of 03:49, 19 November 2021

Fundraising/Data and flow/PSP integrations
Original Name Adyen Checkout
Our Name ?
Current Name Adyen Checkout
Payment Methods Credit Card, iDEAL, Apple Pay
Countries FR
Documentation ?
Test Console ?
Contact ?

Overview

Adyen is our backup credit card processor.

In 2021, we updated our Adyen code to use their 'Checkout' integration, version 4. Checkout integration sources Adyen-hosted JS on our payments page and renders payment fields in the same form as the donor data, encrypting the data before submitting it to our server. We are using the 'components' style Checkout integration rather than the 'drop-in' style. Both styles use the same Adyen JS objects, but with components we instantiate a slightly lower-level JS object that is specific to the payment method.

A month after we deployed our new integration, Adyen released Checkout version 5 with some breaking changes and a simplified control flow. We have not made plans to update to version 5.

All calls to the Adyen API are routed through the SmashPig library. There are PaymentProcessor subclasses for each payment method.

Documentation for the former (Hosted Payment Pages) integration is at https://www.mediawiki.org/wiki/Fundraising_tech/Adyen

Payment Methods

Credit Cards

iDEAL

User flow

Available with payment_method=rtbt&country=NL The Checkout UI has a dropdown of available banks. This is gotten with an api call to get available payment methods

File:Idealredirectexample.png

Apple Pay

Apple Pay Testing Links (TBC)

  • Apple Pay Developer Account login here
  • Apple Pay test cards here
  • Fundraising-tech Apple Pay Sandbox tester accounts here
  • Fundraising-tech Apple Pay Test Server List here

Recurring

Recurring Adyen donations are tokenized and are charged on our schedule by the SmashPig Civi extension's recurring payment charge job. Adyen recurring donations require two identifiers:

  • Standard payment token, stored in the civicrm_payment_token table and called recurring_payment_token in queue messages and SmashPig parameters, referred to as 'storedPaymentMethodId' in the Adyen API
  • Shopper identifier, stored in civicrm_contribution_recur. and called processor_contact_id in queue messages and SmashPig parameters, referred to as shopperReference in the Adyen API

IPN messages

We continue to receive Adyen IPN messages in SOAP format, as with the HPP integration. Because with Checkout we are able to capture card payments directly from payments-wiki, we have disabled the asynchronous capture flow that we were using with the HPP integration. Code for async capture is still present in SmashPig but is disabled in config/adyen/main.yaml by setting capture-from-ipn-listener: false. We should probably remove that code and config variable as part of T291448.

Audits

Adyen generates csv files on an irregular schedule 'whenever a payable batch closes' https://docs.adyen.com/reporting/settlement-detail-report . We process them with the wmf_audits drupal module that calls functions from SmashPig to parse the CSVs.

Pending Table

The DonationInterface Adyen Checkout adapter as of November 2021 sends duplicated messages to the Pending queue. It might not need to send any messages for card payments, as that queue is mostly used for pending transaction resolution, and that scenario is much less likely under Adyen Checkout due to us making the payment authorization and capture in the same HTTP request where we get the donor data.

Jobs Queue

The IPN listener sends 'RecordCaptureJob' messages to the Jobs-Adyen queue. These jobs combine information from the IPN message with information from the pending queue and send information to the donations queue.

Testing

https://www.mediawiki.org/wiki/Fundraising_tech/Testing#Adyen