# 5.5 3DS payments (PSD2)

PSD2 is a European regulation for electronic payment services.

In order to comply with this regulation you will need to adjust the following steps in your migration

  1. Implement wallet V3
  2. Listen to event paymentCompleted which is being published by wallet V3. Please note, the equivalent event on wallet V2 is called after3DsComplete
  3. Adjust the billing call to include additional parameters of encrypted_cvv and fingerprint when present. See more details below

# 5.5.1 Server side required changes:

  1. on billing calls – when payment method type = traditional
    • please send the additional parameters of encrypted_cvv and fingerprint when present. DO NOT manipulate these objects prior to sending them to the server.
    • If the source is APPLE_PAY, make sure to send the correct merchant of the processor to do the transaction through, and not the sps merchant.
    • Note: the response can flag this transaction as SALE and not SALE_3DS. This can happen in cases where the user was not presented with a challenge frame.

# 5.5.2 Example server call

curl --location--request 
POST 'https://the-test.mycheckapp.com/wallet/api/v1/billing'\ 
--header 'Content-Type : application/x-www-form-urlencoded'\ 
--header 'Authorization : <Token (Access)>'\ 
--header 'Cookie:route_0169caff_ad21_4680_8ff9_ef7d2b1045f4=315b606f29c1ff21176e9ef5efc52d35'\ 
--data-urlencode 'method = SALE_3DS'\ 
--data-urlencode 'ccToken = <CC_TOKEN>'\ 
--data-urlencode 'amount = 10'\ 
--data-urlencode 'currency = USD'\ 
--data-urlencode 'orderID = 12b4dor1-ef48-45f7-8717-37cd3db5e016534655'\ 
--data-urlencode 'merchant_id = 3639'\ 
--data-urlencode 'business_id = 3877'\ 
--data-urlencode 'fingerprint =
    {
        "walletSdkSessionId" : "550e8400-e29b-41d4-a716-446655440000",
        "ip" :"70.231.14.1",
        "screenHeight" :"1567",
        "timezoneOffset" :"240",
        "browserAgent" :"Mozilla/5.0 (Windows NT 10.0; Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
    }'\ 
--data-urlencode 'encrypted_cvv = 0177459a85e84aa29749462e11dc04a5'\ 
--data-urlencode 'language = en'