diff --git a/api-reference/v1/openapi_spec_v1.json b/api-reference/v1/openapi_spec_v1.json index ac27acf5b3..d41aa307da 100644 --- a/api-reference/v1/openapi_spec_v1.json +++ b/api-reference/v1/openapi_spec_v1.json @@ -9157,6 +9157,17 @@ "$ref": "#/components/schemas/SepaBankDebitAdditionalData" } } + }, + { + "type": "object", + "required": [ + "sepa_guarenteed_debit" + ], + "properties": { + "sepa_guarenteed_debit": { + "$ref": "#/components/schemas/SepaBankDebitAdditionalData" + } + } } ] }, @@ -9283,6 +9294,41 @@ } } }, + { + "type": "object", + "required": [ + "sepa_guarenteed_bank_debit" + ], + "properties": { + "sepa_guarenteed_bank_debit": { + "type": "object", + "required": [ + "iban", + "bank_account_holder_name" + ], + "properties": { + "billing_details": { + "allOf": [ + { + "$ref": "#/components/schemas/BankDebitBilling" + } + ], + "nullable": true + }, + "iban": { + "type": "string", + "description": "International bank account number (iban) for SEPA", + "example": "DE89370400440532013000" + }, + "bank_account_holder_name": { + "type": "string", + "description": "Owner name for bank debit", + "example": "A. Schneider" + } + } + } + } + }, { "type": "object", "required": [ @@ -22671,6 +22717,7 @@ "samsung_pay", "sepa", "sepa_bank_transfer", + "sepa_guarenteed_debit", "skrill", "sofort", "swish", diff --git a/api-reference/v2/openapi_spec_v2.json b/api-reference/v2/openapi_spec_v2.json index ca554a988b..3493669d5e 100644 --- a/api-reference/v2/openapi_spec_v2.json +++ b/api-reference/v2/openapi_spec_v2.json @@ -5660,6 +5660,17 @@ "$ref": "#/components/schemas/SepaBankDebitAdditionalData" } } + }, + { + "type": "object", + "required": [ + "sepa_guarenteed_debit" + ], + "properties": { + "sepa_guarenteed_debit": { + "$ref": "#/components/schemas/SepaBankDebitAdditionalData" + } + } } ] }, @@ -5786,6 +5797,41 @@ } } }, + { + "type": "object", + "required": [ + "sepa_guarenteed_bank_debit" + ], + "properties": { + "sepa_guarenteed_bank_debit": { + "type": "object", + "required": [ + "iban", + "bank_account_holder_name" + ], + "properties": { + "billing_details": { + "allOf": [ + { + "$ref": "#/components/schemas/BankDebitBilling" + } + ], + "nullable": true + }, + "iban": { + "type": "string", + "description": "International bank account number (iban) for SEPA", + "example": "DE89370400440532013000" + }, + "bank_account_holder_name": { + "type": "string", + "description": "Owner name for bank debit", + "example": "A. Schneider" + } + } + } + } + }, { "type": "object", "required": [ @@ -19065,6 +19111,7 @@ "samsung_pay", "sepa", "sepa_bank_transfer", + "sepa_guarenteed_debit", "skrill", "sofort", "swish", diff --git a/config/config.example.toml b/config/config.example.toml index e35a691c4a..5ab88b353d 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -826,6 +826,8 @@ debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS apple_pay = { country = "EG, MA, ZA, CN, HK, JP, MY, MN, SG, KR, VN, AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, GE, DE, GR, GL, HU, IS, IE, IT, LV, LI, LT, LU, MT, MD, MC, ME, NL, NO, PL, PT, RO, SM, RS, SK, SI, ES, SE, CH, UA, GB, VA, CA, US, BH, IL, JO, KW, OM, QA, SA, AE, AR, BR, CL, CO, CR, SV, GT, MX, PY, PE, UY, BS, DO, AM, KZ, NZ", currency = "EGP, MAD, ZAR, AUD, CNY, HKD, JPY, MOP, MYR, MNT, NZD, SGD, KRW, TWD, VND, AMD, EUR, AZN, BGN, CZK, DKK, GEL, GBP, HUF, ISK, KZT, CHF, MDL, NOK, PLN, RON, RSD, SEK, UAH, ARS, BRL, CLP, COP, CRC, DOP, USD, GTQ, HNL, MXN, PAB, PYG, PEN, BSD, UYU, BHD, ILS, JOD, KWD, OMR, QAR, SAR, AED, CAD"} google_pay = { country = "AO, EG, KE, ZA, AR, BR, CL, CO, MX, PE, UY, AG, DO, AE, TR, SA, QA, OM, LB, KW, JO, IL, BH, KZ, VN, TH, SG, MY, JP, HK, LK, IN, US, CA, GB, UA, CH, SE, ES, SK, PT, RO, PL, NO, NL, LU, LT, LV, IE, IT, HU, GR, DE, FR, FI, EE, DK, CZ, HR, BG, BE, AT, AL", currency = "ALL, DZD, USD, XCD, ARS, AUD, EUR, AZN, BHD, BRL, BGN, CAD, CLP, COP, CZK, DKK, DOP, EGP, HKD, HUF, INR, IDR, ILS, JPY, JOD, KZT, KES, KWD, LBP, MYR, MXN, NZD, NOK, OMR, PKR, PAB, PEN, PHP, PLN, QAR, RON, RUB, SAR, SGD, ZAR, LKR, SEK, CHF, TWD, THB, TRY, UAH, AED, GBP, UYU, VND"} paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"} +sepa = {country = "FR, IT, GR, BE, BG, FI, EE, HR, IE, DE, DK, LT, LV, MT, LU, AT, NL, PT, RO, PL, SK, SE, ES, SI, HU, CZ, CY, GB, LI, NO, IS, MC, CH, YT, PM, SM", currency="EUR"} +sepa_guarenteed_debit = {country = "AT, CH, DE", currency="EUR"} [pm_filters.mifinity] mifinity = { country = "BR,CN,SG,MY,DE,CH,DK,GB,ES,AD,GI,FI,FR,GR,HR,IT,JP,MX,AR,CO,CL,PE,VE,UY,PY,BO,EC,GT,HN,SV,NI,CR,PA,DO,CU,PR,NL,NO,PL,PT,SE,RU,TR,TW,HK,MO,AX,AL,DZ,AS,AO,AI,AG,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BE,BZ,BJ,BM,BT,BQ,BA,BW,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CX,CC,KM,CG,CK,CI,CW,CY,CZ,DJ,DM,EG,GQ,ER,EE,ET,FK,FO,FJ,GF,PF,TF,GA,GM,GE,GH,GL,GD,GP,GU,GG,GN,GW,GY,HT,HM,VA,IS,IN,ID,IE,IM,IL,JE,JO,KZ,KE,KI,KW,KG,LA,LV,LB,LS,LI,LT,LU,MK,MG,MW,MV,ML,MT,MH,MQ,MR,MU,YT,FM,MD,MC,MN,ME,MS,MA,MZ,NA,NR,NP,NC,NZ,NE,NG,NU,NF,MP,OM,PK,PW,PS,PG,PH,PN,QA,RE,RO,RW,BL,SH,KN,LC,MF,PM,VC,WS,SM,ST,SA,SN,RS,SC,SL,SX,SK,SI,SB,SO,ZA,GS,KR,LK,SR,SJ,SZ,TH,TL,TG,TK,TO,TT,TN,TM,TC,TV,UG,UA,AE,UZ,VU,VN,VG,VI,WF,EH,ZM", currency = "AUD,CAD,CHF,CNY,CZK,DKK,EUR,GBP,INR,JPY,NOK,NZD,PLN,RUB,SEK,ZAR,USD,EGP,UYU,UZS" } diff --git a/config/deployments/integration_test.toml b/config/deployments/integration_test.toml index e2eb4f23c6..46f15f0620 100644 --- a/config/deployments/integration_test.toml +++ b/config/deployments/integration_test.toml @@ -604,6 +604,8 @@ debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS apple_pay = { country = "EG, MA, ZA, CN, HK, JP, MY, MN, SG, KR, VN, AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, GE, DE, GR, GL, HU, IS, IE, IT, LV, LI, LT, LU, MT, MD, MC, ME, NL, NO, PL, PT, RO, SM, RS, SK, SI, ES, SE, CH, UA, GB, VA, CA, US, BH, IL, JO, KW, OM, QA, SA, AE, AR, BR, CL, CO, CR, SV, GT, MX, PY, PE, UY, BS, DO, AM, KZ, NZ", currency = "EGP, MAD, ZAR, AUD, CNY, HKD, JPY, MOP, MYR, MNT, NZD, SGD, KRW, TWD, VND, AMD, EUR, AZN, BGN, CZK, DKK, GEL, GBP, HUF, ISK, KZT, CHF, MDL, NOK, PLN, RON, RSD, SEK, UAH, ARS, BRL, CLP, COP, CRC, DOP, USD, GTQ, HNL, MXN, PAB, PYG, PEN, BSD, UYU, BHD, ILS, JOD, KWD, OMR, QAR, SAR, AED, CAD"} google_pay = { country = "AO, EG, KE, ZA, AR, BR, CL, CO, MX, PE, UY, AG, DO, AE, TR, SA, QA, OM, LB, KW, JO, IL, BH, KZ, VN, TH, SG, MY, JP, HK, LK, IN, US, CA, GB, UA, CH, SE, ES, SK, PT, RO, PL, NO, NL, LU, LT, LV, IE, IT, HU, GR, DE, FR, FI, EE, DK, CZ, HR, BG, BE, AT, AL", currency = "ALL, DZD, USD, XCD, ARS, AUD, EUR, AZN, BHD, BRL, BGN, CAD, CLP, COP, CZK, DKK, DOP, EGP, HKD, HUF, INR, IDR, ILS, JPY, JOD, KZT, KES, KWD, LBP, MYR, MXN, NZD, NOK, OMR, PKR, PAB, PEN, PHP, PLN, QAR, RON, RUB, SAR, SGD, ZAR, LKR, SEK, CHF, TWD, THB, TRY, UAH, AED, GBP, UYU, VND"} paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"} +sepa = {country = "FR, IT, GR, BE, BG, FI, EE, HR, IE, DE, DK, LT, LV, MT, LU, AT, NL, PT, RO, PL, SK, SE, ES, SI, HU, CZ, CY, GB, LI, NO, IS, MC, CH, YT, PM, SM", currency="EUR"} +sepa_guarenteed_debit = {country = "AT, CH, DE", currency="EUR"} [pm_filters.volt] open_banking_uk = {country = "DE,GB,AT,BE,CY,EE,ES,FI,FR,GR,HR,IE,IT,LT,LU,LV,MT,NL,PT,SI,SK,BG,CZ,DK,HU,NO,PL,RO,SE,AU,BR", currency = "EUR,GBP,DKK,NOK,PLN,SEK,AUD,BRL"} diff --git a/config/deployments/production.toml b/config/deployments/production.toml index ebc1ba6800..4eb69bdefb 100644 --- a/config/deployments/production.toml +++ b/config/deployments/production.toml @@ -515,6 +515,8 @@ debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS apple_pay = { country = "EG, MA, ZA, CN, HK, JP, MY, MN, SG, KR, VN, AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, GE, DE, GR, GL, HU, IS, IE, IT, LV, LI, LT, LU, MT, MD, MC, ME, NL, NO, PL, PT, RO, SM, RS, SK, SI, ES, SE, CH, UA, GB, VA, CA, US, BH, IL, JO, KW, OM, QA, SA, AE, AR, BR, CL, CO, CR, SV, GT, MX, PY, PE, UY, BS, DO, AM, KZ, NZ", currency = "EGP, MAD, ZAR, AUD, CNY, HKD, JPY, MOP, MYR, MNT, NZD, SGD, KRW, TWD, VND, AMD, EUR, AZN, BGN, CZK, DKK, GEL, GBP, HUF, ISK, KZT, CHF, MDL, NOK, PLN, RON, RSD, SEK, UAH, ARS, BRL, CLP, COP, CRC, DOP, USD, GTQ, HNL, MXN, PAB, PYG, PEN, BSD, UYU, BHD, ILS, JOD, KWD, OMR, QAR, SAR, AED, CAD"} google_pay = { country = "AO, EG, KE, ZA, AR, BR, CL, CO, MX, PE, UY, AG, DO, AE, TR, SA, QA, OM, LB, KW, JO, IL, BH, KZ, VN, TH, SG, MY, JP, HK, LK, IN, US, CA, GB, UA, CH, SE, ES, SK, PT, RO, PL, NO, NL, LU, LT, LV, IE, IT, HU, GR, DE, FR, FI, EE, DK, CZ, HR, BG, BE, AT, AL", currency = "ALL, DZD, USD, XCD, ARS, AUD, EUR, AZN, BHD, BRL, BGN, CAD, CLP, COP, CZK, DKK, DOP, EGP, HKD, HUF, INR, IDR, ILS, JPY, JOD, KZT, KES, KWD, LBP, MYR, MXN, NZD, NOK, OMR, PKR, PAB, PEN, PHP, PLN, QAR, RON, RUB, SAR, SGD, ZAR, LKR, SEK, CHF, TWD, THB, TRY, UAH, AED, GBP, UYU, VND"} paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"} +sepa = {country = "FR, IT, GR, BE, BG, FI, EE, HR, IE, DE, DK, LT, LV, MT, LU, AT, NL, PT, RO, PL, SK, SE, ES, SI, HU, CZ, CY, GB, LI, NO, IS, MC, CH, YT, PM, SM", currency="EUR"} +sepa_guarenteed_debit = {country = "AT, CH, DE", currency="EUR"} [pm_filters.braintree] credit = { country = "AD,AT,AU,BE,BG,CA,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GG,GI,GR,HK,HR,HU,IE,IM,IT,JE,LI,LT,LU,LV,MT,MC,MY,NL,NO,NZ,PL,PT,RO,SE,SG,SI,SK,SM,US", currency = "AED,AMD,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CHF,CLP,CNY,COP,CRC,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HRK,HTG,HUF,IDR,ILS,INR,ISK,JMD,JPY,KES,KGS,KHR,KMF,KRW,KYD,KZT,LAK,LBP,LKR,LRD,LSL,MAD,MDL,MKD,MNT,MOP,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STD,SVC,SYP,SZL,THB,TJS,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"} diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml index aa607823dd..39b33bb417 100644 --- a/config/deployments/sandbox.toml +++ b/config/deployments/sandbox.toml @@ -497,6 +497,8 @@ debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS apple_pay = { country = "EG, MA, ZA, CN, HK, JP, MY, MN, SG, KR, VN, AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, GE, DE, GR, GL, HU, IS, IE, IT, LV, LI, LT, LU, MT, MD, MC, ME, NL, NO, PL, PT, RO, SM, RS, SK, SI, ES, SE, CH, UA, GB, VA, CA, US, BH, IL, JO, KW, OM, QA, SA, AE, AR, BR, CL, CO, CR, SV, GT, MX, PY, PE, UY, BS, DO, AM, KZ, NZ", currency = "EGP, MAD, ZAR, AUD, CNY, HKD, JPY, MOP, MYR, MNT, NZD, SGD, KRW, TWD, VND, AMD, EUR, AZN, BGN, CZK, DKK, GEL, GBP, HUF, ISK, KZT, CHF, MDL, NOK, PLN, RON, RSD, SEK, UAH, ARS, BRL, CLP, COP, CRC, DOP, USD, GTQ, HNL, MXN, PAB, PYG, PEN, BSD, UYU, BHD, ILS, JOD, KWD, OMR, QAR, SAR, AED, CAD"} google_pay = { country = "AO, EG, KE, ZA, AR, BR, CL, CO, MX, PE, UY, AG, DO, AE, TR, SA, QA, OM, LB, KW, JO, IL, BH, KZ, VN, TH, SG, MY, JP, HK, LK, IN, US, CA, GB, UA, CH, SE, ES, SK, PT, RO, PL, NO, NL, LU, LT, LV, IE, IT, HU, GR, DE, FR, FI, EE, DK, CZ, HR, BG, BE, AT, AL", currency = "ALL, DZD, USD, XCD, ARS, AUD, EUR, AZN, BHD, BRL, BGN, CAD, CLP, COP, CZK, DKK, DOP, EGP, HKD, HUF, INR, IDR, ILS, JPY, JOD, KZT, KES, KWD, LBP, MYR, MXN, NZD, NOK, OMR, PKR, PAB, PEN, PHP, PLN, QAR, RON, RUB, SAR, SGD, ZAR, LKR, SEK, CHF, TWD, THB, TRY, UAH, AED, GBP, UYU, VND"} paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"} +sepa = {country = "FR, IT, GR, BE, BG, FI, EE, HR, IE, DE, DK, LT, LV, MT, LU, AT, NL, PT, RO, PL, SK, SE, ES, SI, HU, CZ, CY, GB, LI, NO, IS, MC, CH, YT, PM, SM", currency="EUR"} +sepa_guarenteed_debit = {country = "AT, CH, DE", currency="EUR"} [pm_filters.braintree] credit = { country = "AD,AT,AU,BE,BG,CA,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GG,GI,GR,HK,HR,HU,IE,IM,IT,JE,LI,LT,LU,LV,MT,MC,MY,NL,NO,NZ,PL,PT,RO,SE,SG,SI,SK,SM,US", currency = "AED,AMD,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CHF,CLP,CNY,COP,CRC,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HRK,HTG,HUF,IDR,ILS,INR,ISK,JMD,JPY,KES,KGS,KHR,KMF,KRW,KYD,KZT,LAK,LBP,LKR,LRD,LSL,MAD,MDL,MKD,MNT,MOP,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STD,SVC,SYP,SZL,THB,TJS,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"} diff --git a/config/development.toml b/config/development.toml index faf09e603a..38d54e4a1b 100644 --- a/config/development.toml +++ b/config/development.toml @@ -703,6 +703,8 @@ debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS apple_pay = { country = "EG, MA, ZA, CN, HK, JP, MY, MN, SG, KR, VN, AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, GE, DE, GR, GL, HU, IS, IE, IT, LV, LI, LT, LU, MT, MD, MC, ME, NL, NO, PL, PT, RO, SM, RS, SK, SI, ES, SE, CH, UA, GB, VA, CA, US, BH, IL, JO, KW, OM, QA, SA, AE, AR, BR, CL, CO, CR, SV, GT, MX, PY, PE, UY, BS, DO, AM, KZ, NZ", currency = "EGP, MAD, ZAR, AUD, CNY, HKD, JPY, MOP, MYR, MNT, NZD, SGD, KRW, TWD, VND, AMD, EUR, AZN, BGN, CZK, DKK, GEL, GBP, HUF, ISK, KZT, CHF, MDL, NOK, PLN, RON, RSD, SEK, UAH, ARS, BRL, CLP, COP, CRC, DOP, USD, GTQ, HNL, MXN, PAB, PYG, PEN, BSD, UYU, BHD, ILS, JOD, KWD, OMR, QAR, SAR, AED, CAD" } google_pay = { country = "AO, EG, KE, ZA, AR, BR, CL, CO, MX, PE, UY, AG, DO, AE, TR, SA, QA, OM, LB, KW, JO, IL, BH, KZ, VN, TH, SG, MY, JP, HK, LK, IN, US, CA, GB, UA, CH, SE, ES, SK, PT, RO, PL, NO, NL, LU, LT, LV, IE, IT, HU, GR, DE, FR, FI, EE, DK, CZ, HR, BG, BE, AT, AL", currency = "ALL, DZD, USD, XCD, ARS, AUD, EUR, AZN, BHD, BRL, BGN, CAD, CLP, COP, CZK, DKK, DOP, EGP, HKD, HUF, INR, IDR, ILS, JPY, JOD, KZT, KES, KWD, LBP, MYR, MXN, NZD, NOK, OMR, PKR, PAB, PEN, PHP, PLN, QAR, RON, RUB, SAR, SGD, ZAR, LKR, SEK, CHF, TWD, THB, TRY, UAH, AED, GBP, UYU, VND" } paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW" } +sepa = {country = "FR, IT, GR, BE, BG, FI, EE, HR, IE, DE, DK, LT, LV, MT, LU, AT, NL, PT, RO, PL, SK, SE, ES, SI, HU, CZ, CY, GB, LI, NO, IS, MC, CH, YT, PM, SM", currency="EUR"} +sepa_guarenteed_debit = {country = "AT, CH, DE", currency="EUR"} [pm_filters.braintree] credit = { country = "AD,AT,AU,BE,BG,CA,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GG,GI,GR,HK,HR,HU,IE,IM,IT,JE,LI,LT,LU,LV,MT,MC,MY,NL,NO,NZ,PL,PT,RO,SE,SG,SI,SK,SM,US", currency = "AED,AMD,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CHF,CLP,CNY,COP,CRC,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HRK,HTG,HUF,IDR,ILS,INR,ISK,JMD,JPY,KES,KGS,KHR,KMF,KRW,KYD,KZT,LAK,LBP,LKR,LRD,LSL,MAD,MDL,MKD,MNT,MOP,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STD,SVC,SYP,SZL,THB,TJS,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"} diff --git a/config/docker_compose.toml b/config/docker_compose.toml index 4631498d13..e710e87440 100644 --- a/config/docker_compose.toml +++ b/config/docker_compose.toml @@ -749,6 +749,8 @@ debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS apple_pay = { country = "EG, MA, ZA, CN, HK, JP, MY, MN, SG, KR, VN, AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, GE, DE, GR, GL, HU, IS, IE, IT, LV, LI, LT, LU, MT, MD, MC, ME, NL, NO, PL, PT, RO, SM, RS, SK, SI, ES, SE, CH, UA, GB, VA, CA, US, BH, IL, JO, KW, OM, QA, SA, AE, AR, BR, CL, CO, CR, SV, GT, MX, PY, PE, UY, BS, DO, AM, KZ, NZ", currency = "EGP, MAD, ZAR, AUD, CNY, HKD, JPY, MOP, MYR, MNT, NZD, SGD, KRW, TWD, VND, AMD, EUR, AZN, BGN, CZK, DKK, GEL, GBP, HUF, ISK, KZT, CHF, MDL, NOK, PLN, RON, RSD, SEK, UAH, ARS, BRL, CLP, COP, CRC, DOP, USD, GTQ, HNL, MXN, PAB, PYG, PEN, BSD, UYU, BHD, ILS, JOD, KWD, OMR, QAR, SAR, AED, CAD"} google_pay = { country = "AO, EG, KE, ZA, AR, BR, CL, CO, MX, PE, UY, AG, DO, AE, TR, SA, QA, OM, LB, KW, JO, IL, BH, KZ, VN, TH, SG, MY, JP, HK, LK, IN, US, CA, GB, UA, CH, SE, ES, SK, PT, RO, PL, NO, NL, LU, LT, LV, IE, IT, HU, GR, DE, FR, FI, EE, DK, CZ, HR, BG, BE, AT, AL", currency = "ALL, DZD, USD, XCD, ARS, AUD, EUR, AZN, BHD, BRL, BGN, CAD, CLP, COP, CZK, DKK, DOP, EGP, HKD, HUF, INR, IDR, ILS, JPY, JOD, KZT, KES, KWD, LBP, MYR, MXN, NZD, NOK, OMR, PKR, PAB, PEN, PHP, PLN, QAR, RON, RUB, SAR, SGD, ZAR, LKR, SEK, CHF, TWD, THB, TRY, UAH, AED, GBP, UYU, VND"} paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"} +sepa = {country = "FR, IT, GR, BE, BG, FI, EE, HR, IE, DE, DK, LT, LV, MT, LU, AT, NL, PT, RO, PL, SK, SE, ES, SI, HU, CZ, CY, GB, LI, NO, IS, MC, CH, YT, PM, SM", currency="EUR"} +sepa_guarenteed_debit = {country = "AT, CH, DE", currency="EUR"} [pm_filters.facilitapay] pix = { country = "BR", currency = "BRL" } diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index 485aa0e8de..9f1a57d89d 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -2470,6 +2470,16 @@ pub enum BankDebitData { #[schema(value_type = String, example = "A. Schneider")] bank_account_holder_name: Option>, }, + SepaGuarenteedBankDebit { + /// Billing details for bank debit + billing_details: Option, + /// International bank account number (iban) for SEPA + #[schema(value_type = String, example = "DE89370400440532013000")] + iban: Secret, + /// Owner name for bank debit + #[schema(value_type = String, example = "A. Schneider")] + bank_account_holder_name: Option>, + }, BecsBankDebit { /// Billing details for bank debit billing_details: Option, @@ -2529,6 +2539,11 @@ impl GetAddressFromPaymentMethodData for BankDebitData { bank_account_holder_name, .. } + | Self::SepaGuarenteedBankDebit { + billing_details, + bank_account_holder_name, + .. + } | Self::BecsBankDebit { billing_details, bank_account_holder_name, @@ -3055,6 +3070,9 @@ impl GetPaymentMethodType for BankDebitData { Self::SepaBankDebit { .. } => api_enums::PaymentMethodType::Sepa, Self::BecsBankDebit { .. } => api_enums::PaymentMethodType::Becs, Self::BacsBankDebit { .. } => api_enums::PaymentMethodType::Bacs, + Self::SepaGuarenteedBankDebit { .. } => { + api_enums::PaymentMethodType::SepaGuarenteedDebit + } } } } diff --git a/crates/api_models/src/payments/additional_info.rs b/crates/api_models/src/payments/additional_info.rs index bb76f60cff..e59ea16387 100644 --- a/crates/api_models/src/payments/additional_info.rs +++ b/crates/api_models/src/payments/additional_info.rs @@ -13,6 +13,7 @@ pub enum BankDebitAdditionalData { Bacs(Box), Becs(Box), Sepa(Box), + SepaGuarenteedDebit(Box), } #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index bf856569f8..e74335fa73 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -2072,6 +2072,7 @@ pub enum PaymentMethodType { SamsungPay, Sepa, SepaBankTransfer, + SepaGuarenteedDebit, Skrill, Sofort, Swish, @@ -2198,6 +2199,7 @@ impl PaymentMethodType { Self::RedPagos => "RedPagos", Self::SamsungPay => "Samsung Pay", Self::Sepa => "SEPA Direct Debit", + Self::SepaGuarenteedDebit => "SEPA Guarenteed Direct Debit", Self::SepaBankTransfer => "SEPA Bank Transfer", Self::Sofort => "Sofort", Self::Skrill => "Skrill", diff --git a/crates/common_enums/src/transformers.rs b/crates/common_enums/src/transformers.rs index 4eac0fb1fc..30f9f257ef 100644 --- a/crates/common_enums/src/transformers.rs +++ b/crates/common_enums/src/transformers.rs @@ -1872,6 +1872,7 @@ impl From for PaymentMethod { PaymentMethodType::PromptPay => Self::RealTimePayment, PaymentMethodType::SamsungPay => Self::Wallet, PaymentMethodType::Sepa => Self::BankDebit, + PaymentMethodType::SepaGuarenteedDebit => Self::BankDebit, PaymentMethodType::SepaBankTransfer => Self::BankTransfer, PaymentMethodType::Sofort => Self::BankRedirect, PaymentMethodType::Swish => Self::BankRedirect, diff --git a/crates/connector_configs/toml/development.toml b/crates/connector_configs/toml/development.toml index 3dfcc3cbcf..9d58e064f2 100644 --- a/crates/connector_configs/toml/development.toml +++ b/crates/connector_configs/toml/development.toml @@ -3514,6 +3514,10 @@ options=["PAN_ONLY", "CRYPTOGRAM_3DS"] payment_method_type = "paypal" [[novalnet.wallet]] payment_method_type = "apple_pay" +[[novalnet.bank_debit]] + payment_method_type = "sepa" +[[novalnet.bank_debit]] + payment_method_type = "sepa_guarenteed_debit" [novalnet.connector_auth.SignatureKey] api_key="Product Activation Key" key1="Payment Access Key" diff --git a/crates/connector_configs/toml/production.toml b/crates/connector_configs/toml/production.toml index ec40afab46..a1ee07c9ec 100644 --- a/crates/connector_configs/toml/production.toml +++ b/crates/connector_configs/toml/production.toml @@ -2730,6 +2730,10 @@ payment_method_type = "google_pay" payment_method_type = "paypal" [[novalnet.wallet]] payment_method_type = "apple_pay" +[[novalnet.bank_debit]] + payment_method_type = "sepa" +[[novalnet.bank_debit]] + payment_method_type = "sepa_guarenteed_debit" [novalnet.connector_auth.SignatureKey] api_key = "Product Activation Key" key1 = "Payment Access Key" diff --git a/crates/connector_configs/toml/sandbox.toml b/crates/connector_configs/toml/sandbox.toml index b002be33bc..1d27039702 100644 --- a/crates/connector_configs/toml/sandbox.toml +++ b/crates/connector_configs/toml/sandbox.toml @@ -3486,6 +3486,10 @@ payment_method_type = "google_pay" payment_method_type = "paypal" [[novalnet.wallet]] payment_method_type = "apple_pay" +[[novalnet.bank_debit]] + payment_method_type = "sepa" +[[novalnet.bank_debit]] + payment_method_type = "sepa_guarenteed_debit" [novalnet.connector_auth.SignatureKey] api_key = "Product Activation Key" key1 = "Payment Access Key" diff --git a/crates/euclid/src/frontend/dir/enums.rs b/crates/euclid/src/frontend/dir/enums.rs index 8c0240e98c..62384cafa0 100644 --- a/crates/euclid/src/frontend/dir/enums.rs +++ b/crates/euclid/src/frontend/dir/enums.rs @@ -371,6 +371,7 @@ pub enum UpiType { pub enum BankDebitType { Ach, Sepa, + SepaGuarenteedDebit, Bacs, Becs, } diff --git a/crates/euclid/src/frontend/dir/lowering.rs b/crates/euclid/src/frontend/dir/lowering.rs index 8fe8bdb229..2e008d9424 100644 --- a/crates/euclid/src/frontend/dir/lowering.rs +++ b/crates/euclid/src/frontend/dir/lowering.rs @@ -77,6 +77,7 @@ impl From for global_enums::PaymentMethodType { match value { enums::BankDebitType::Ach => Self::Ach, enums::BankDebitType::Sepa => Self::Sepa, + enums::BankDebitType::SepaGuarenteedDebit => Self::SepaGuarenteedDebit, enums::BankDebitType::Bacs => Self::Bacs, enums::BankDebitType::Becs => Self::Becs, } diff --git a/crates/euclid/src/frontend/dir/transformers.rs b/crates/euclid/src/frontend/dir/transformers.rs index b67ccb5c3a..3a038feaff 100644 --- a/crates/euclid/src/frontend/dir/transformers.rs +++ b/crates/euclid/src/frontend/dir/transformers.rs @@ -68,6 +68,9 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet }, global_enums::PaymentMethodType::Becs => Ok(dirval!(BankDebitType = Becs)), global_enums::PaymentMethodType::Sepa => Ok(dirval!(BankDebitType = Sepa)), + global_enums::PaymentMethodType::SepaGuarenteedDebit => { + Ok(dirval!(BankDebitType = SepaGuarenteedDebit)) + } global_enums::PaymentMethodType::SepaBankTransfer => { Ok(dirval!(BankTransferType = SepaBankTransfer)) } diff --git a/crates/hyperswitch_connectors/src/connectors/adyen.rs b/crates/hyperswitch_connectors/src/connectors/adyen.rs index bb4cdbda26..03005ec34f 100644 --- a/crates/hyperswitch_connectors/src/connectors/adyen.rs +++ b/crates/hyperswitch_connectors/src/connectors/adyen.rs @@ -346,7 +346,8 @@ impl ConnectorValidation for Adyen { | PaymentMethodType::SepaBankTransfer | PaymentMethodType::Flexiti | PaymentMethodType::RevolutPay - | PaymentMethodType::Bluecode => { + | PaymentMethodType::Bluecode + | PaymentMethodType::SepaGuarenteedDebit => { capture_method_not_supported!(connector, capture_method, payment_method_type) } }, diff --git a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs index ebe056e39a..3ff273557f 100644 --- a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs @@ -2115,10 +2115,12 @@ impl TryFrom<(&BankDebitData, &PaymentsAuthorizeRouterData)> for AdyenPaymentMet ))) } - BankDebitData::BecsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Adyen"), - ) - .into()), + BankDebitData::BecsBankDebit { .. } | BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Adyen"), + ) + .into()) + } } } } diff --git a/crates/hyperswitch_connectors/src/connectors/calida.rs b/crates/hyperswitch_connectors/src/connectors/calida.rs index 73dc952aca..82066c81f5 100644 --- a/crates/hyperswitch_connectors/src/connectors/calida.rs +++ b/crates/hyperswitch_connectors/src/connectors/calida.rs @@ -744,7 +744,7 @@ static CALIDA_CONNECTOR_INFO: ConnectorInfo = ConnectorInfo { display_name: "Calida", description: "Calida Financial is a licensed e-money institution based in Malta and they provide customized financial infrastructure and payment solutions across the EU and EEA. As part of The Payments Group, it focuses on embedded finance, prepaid services, and next-generation digital payment products.", connector_type: enums::HyperswitchConnectorCategory::AlternativePaymentMethod, - integration_status: enums::ConnectorIntegrationStatus::Alpha, + integration_status: enums::ConnectorIntegrationStatus::Sandbox, }; static CALIDA_SUPPORTED_WEBHOOK_FLOWS: [enums::EventClass; 1] = [enums::EventClass::Payments]; diff --git a/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs b/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs index b4019d98e1..5de1754333 100644 --- a/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs @@ -315,10 +315,12 @@ impl TryFrom<(&BankDebitData, &types::TokenizationRouterData)> for CustomerBankA }; Ok(Self::InternationalBankAccount(international_bank_account)) } - BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Gocardless"), - ) - .into()), + BankDebitData::BacsBankDebit { .. } | BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Gocardless"), + ) + .into()) + } } } } @@ -470,6 +472,7 @@ fn get_ip_if_required( match bank_debit_data { BankDebitData::AchBankDebit { .. } => Ok(Some(ip_address)), BankDebitData::SepaBankDebit { .. } + | BankDebitData::SepaGuarenteedBankDebit { .. } | BankDebitData::BecsBankDebit { .. } | BankDebitData::BacsBankDebit { .. } => Ok(None), } @@ -482,10 +485,12 @@ impl TryFrom<&BankDebitData> for GocardlessScheme { BankDebitData::AchBankDebit { .. } => Ok(Self::Ach), BankDebitData::SepaBankDebit { .. } => Ok(Self::SepaCore), BankDebitData::BecsBankDebit { .. } => Ok(Self::Becs), - BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented( - "Setup Mandate flow for selected payment method through Gocardless".to_string(), - ) - .into()), + BankDebitData::BacsBankDebit { .. } | BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(errors::ConnectorError::NotImplemented( + "Setup Mandate flow for selected payment method through Gocardless".to_string(), + ) + .into()) + } } } } diff --git a/crates/hyperswitch_connectors/src/connectors/klarna.rs b/crates/hyperswitch_connectors/src/connectors/klarna.rs index 159c1d307e..148eceb12d 100644 --- a/crates/hyperswitch_connectors/src/connectors/klarna.rs +++ b/crates/hyperswitch_connectors/src/connectors/klarna.rs @@ -620,6 +620,7 @@ impl ConnectorIntegration> for NordeaPaym } BankDebitData::AchBankDebit { .. } | BankDebitData::BacsBankDebit { .. } - | BankDebitData::BecsBankDebit { .. } => { + | BankDebitData::BecsBankDebit { .. } + | BankDebitData::SepaGuarenteedBankDebit { .. } => { Err(errors::ConnectorError::NotImplemented( get_unimplemented_payment_method_error_message("Nordea"), ) diff --git a/crates/hyperswitch_connectors/src/connectors/novalnet.rs b/crates/hyperswitch_connectors/src/connectors/novalnet.rs index 8914d84a8f..a0384add09 100644 --- a/crates/hyperswitch_connectors/src/connectors/novalnet.rs +++ b/crates/hyperswitch_connectors/src/connectors/novalnet.rs @@ -910,9 +910,7 @@ impl webhooks::IncomingWebhook for Novalnet { .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?; let optional_transaction_status = match notif.transaction { - novalnet::NovalnetWebhookTransactionData::CaptureTransactionData(data) => { - Some(data.status) - } + novalnet::NovalnetWebhookTransactionData::CaptureTransactionData(data) => data.status, novalnet::NovalnetWebhookTransactionData::CancelTransactionData(data) => data.status, novalnet::NovalnetWebhookTransactionData::RefundsTransactionData(data) => { Some(data.status) @@ -1082,6 +1080,28 @@ static NOVALNET_SUPPORTED_PAYMENT_METHODS: LazyLock = }, ); + novalnet_supported_payment_methods.add( + enums::PaymentMethod::BankDebit, + enums::PaymentMethodType::Sepa, + PaymentMethodDetails { + mandates: enums::FeatureStatus::Supported, + refunds: enums::FeatureStatus::Supported, + supported_capture_methods: supported_capture_methods.clone(), + specific_features: None, + }, + ); + + novalnet_supported_payment_methods.add( + enums::PaymentMethod::BankDebit, + enums::PaymentMethodType::SepaGuarenteedDebit, + PaymentMethodDetails { + mandates: enums::FeatureStatus::Supported, + refunds: enums::FeatureStatus::Supported, + supported_capture_methods, + specific_features: None, + }, + ); + novalnet_supported_payment_methods }); diff --git a/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs b/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs index b0405855e6..69b9459eb3 100644 --- a/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs @@ -12,7 +12,9 @@ use common_utils::{ }; use error_stack::ResultExt; use hyperswitch_domain_models::{ - payment_method_data::{PaymentMethodData, WalletData as WalletDataPaymentMethod}, + payment_method_data::{ + BankDebitData, PaymentMethodData, WalletData as WalletDataPaymentMethod, + }, router_data::{ConnectorAuthType, ErrorResponse, RouterData}, router_flow_types::refunds::{Execute, RSync}, router_request_types::{PaymentsCancelData, PaymentsCaptureData, PaymentsSyncData, ResponseId}, @@ -71,6 +73,10 @@ pub enum NovalNetPaymentTypes { PAYPAL, GOOGLEPAY, APPLEPAY, + #[serde(rename = "DIRECT_DEBIT_SEPA")] + DirectDebitSepa, + #[serde(rename = "GUARANTEED_DIRECT_DEBIT_SEPA")] + GuaranteedDirectDebitSepa, } #[derive(Default, Debug, Serialize, Clone)] @@ -96,6 +102,7 @@ pub struct NovalnetPaymentsRequestCustomer { mobile: Option>, billing: Option, no_nc: i64, + birth_date: Option, // Mandatory for SEPA Guarentee Payment } #[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct NovalnetCard { @@ -119,6 +126,13 @@ pub struct NovalnetMandate { token: Secret, } +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct NovalnetSepaDebit { + account_holder: Secret, + iban: Secret, + birth_date: Option, // Mandatory for SEPA Guarantee Payment +} + #[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct NovalnetGooglePay { wallet_data: Secret, @@ -137,6 +151,7 @@ pub enum NovalNetPaymentData { GooglePay(NovalnetGooglePay), ApplePay(NovalnetApplePay), MandatePayment(NovalnetMandate), + Sepa(NovalnetSepaDebit), } #[derive(Default, Debug, Serialize, Clone)] @@ -184,9 +199,14 @@ impl TryFrom<&api_enums::PaymentMethodType> for NovalNetPaymentTypes { } api_enums::PaymentMethodType::GooglePay => Ok(Self::GOOGLEPAY), api_enums::PaymentMethodType::Paypal => Ok(Self::PAYPAL), + api_enums::PaymentMethodType::Sepa => Ok(Self::DirectDebitSepa), + api_enums::PaymentMethodType::SepaGuarenteedDebit => { + Ok(Self::GuaranteedDirectDebitSepa) + } _ => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Novalnet"), - ))?, + ) + .into()), } } } @@ -231,6 +251,7 @@ impl TryFrom<&NovalnetRouterData<&PaymentsAuthorizeRouterData>> for NovalnetPaym billing: Some(billing), // no_nc is used to indicate if minimal customer data is passed or not no_nc: MINIMAL_CUSTOMER_DATA_PASSED, + birth_date: Some(String::from("1992-06-10")), }; let lang = item @@ -254,7 +275,7 @@ impl TryFrom<&NovalnetRouterData<&PaymentsAuthorizeRouterData>> for NovalnetPaym .clone() .and_then(|mandate_id| mandate_id.mandate_reference_id) { - None => match item.router_data.request.payment_method_data { + None => match &item.router_data.request.payment_method_data { PaymentMethodData::Card(ref req_card) => { let novalnet_card = NovalNetPaymentData::Card(NovalnetCard { card_number: req_card.card_number.clone(), @@ -412,6 +433,69 @@ impl TryFrom<&NovalnetRouterData<&PaymentsAuthorizeRouterData>> for NovalnetPaym .into()) } }, + PaymentMethodData::BankDebit(bank_debit_data) => { + let payment_type = NovalNetPaymentTypes::try_from( + &item + .router_data + .request + .payment_method_type + .ok_or(errors::ConnectorError::MissingPaymentMethodType)?, + )?; + + let (iban, account_holder, dob) = match bank_debit_data { + BankDebitData::SepaBankDebit { + iban, + bank_account_holder_name, + } => { + let account_holder = match bank_account_holder_name { + Some(name) => name.clone(), + None => item.router_data.get_billing_full_name()?, + }; + + (iban, account_holder, None) + } + BankDebitData::SepaGuarenteedBankDebit { + iban, + bank_account_holder_name, + } => { + let account_holder = match bank_account_holder_name { + Some(name) => name.clone(), + None => item.router_data.get_billing_full_name()?, + }; + + (iban, account_holder, Some(String::from("1992-06-10"))) + } + _ => { + return Err( + errors::ConnectorError::NotImplemented("SEPA".to_string()).into() + ); + } + }; + + let transaction = NovalnetPaymentsRequestTransaction { + test_mode, + payment_type, + amount: NovalNetAmount::StringMinor(item.amount.clone()), + currency: item.router_data.request.currency, + order_no: item.router_data.connector_request_reference_id.clone(), + hook_url: Some(hook_url), + return_url: Some(return_url.clone()), + error_return_url: Some(return_url.clone()), + payment_data: Some(NovalNetPaymentData::Sepa(NovalnetSepaDebit { + account_holder: account_holder.clone(), + iban: iban.clone(), + birth_date: dob, + })), + enforce_3d, + create_token, + }; + Ok(Self { + merchant, + transaction, + customer, + custom, + }) + } _ => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("novalnet"), ) @@ -962,7 +1046,12 @@ impl TryFrom> .response .transaction .clone() - .and_then(|data| data.refund.tid.map(|tid| tid.expose().to_string())) + .and_then(|data| { + data.refund + .tid + .or(data.tid) + .map(|tid| tid.expose().to_string()) + }) .ok_or(errors::ConnectorError::ResponseHandlingFailed)?; let transaction_status = item @@ -1128,14 +1217,14 @@ impl #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NovalnetCaptureTransactionData { pub amount: Option, - pub capture: CaptureData, + pub capture: Option, // only for credit card and paypal it is sent back in response pub currency: Option, pub order_no: Option, - pub payment_type: String, - pub status: NovalnetTransactionStatus, + pub payment_type: Option, + pub status: Option, // required for CreditCard/ApplePay/GooglePay/Paypal pub status_code: Option, pub test_mode: Option, - pub tid: Secret, + pub tid: Option>, // mandatory in docs but not being sent back in sepa response -> need to double check } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -1173,15 +1262,17 @@ impl .response .transaction .clone() - .map(|data| data.tid.expose().to_string()); + .and_then(|data| data.tid.map(|tid| tid.expose().to_string())); let transaction_status = item .response .transaction .map(|transaction_data| transaction_data.status) - .unwrap_or(NovalnetTransactionStatus::Pending); + .unwrap_or(Some(NovalnetTransactionStatus::Pending)); Ok(Self { - status: common_enums::AttemptStatus::from(transaction_status), + status: transaction_status + .map(common_enums::AttemptStatus::from) + .unwrap_or(common_enums::AttemptStatus::Pending), response: Ok(PaymentsResponseData::TransactionResponse { resource_id: transaction_id .clone() @@ -1522,6 +1613,7 @@ impl TryFrom<&SetupMandateRouterData> for NovalnetPaymentsRequest { billing: Some(billing), // no_nc is used to indicate if minimal customer data is passed or not no_nc: MINIMAL_CUSTOMER_DATA_PASSED, + birth_date: Some(String::from("1992-06-10")), }; let lang = item diff --git a/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs b/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs index 2f27e8b174..8883213736 100644 --- a/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs @@ -1242,6 +1242,7 @@ impl TryFrom<&PaypalRouterData<&PaymentsAuthorizeRouterData>> for PaypalPayments | enums::PaymentMethodType::RedPagos | enums::PaymentMethodType::SamsungPay | enums::PaymentMethodType::Sepa + | enums::PaymentMethodType::SepaGuarenteedDebit | enums::PaymentMethodType::SepaBankTransfer | enums::PaymentMethodType::Sofort | enums::PaymentMethodType::Swish @@ -1345,10 +1346,13 @@ impl TryFrom<&BankDebitData> for PaypalPaymentsRequest { BankDebitData::AchBankDebit { .. } | BankDebitData::SepaBankDebit { .. } | BankDebitData::BecsBankDebit { .. } - | BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Paypal"), - ) - .into()), + | BankDebitData::BacsBankDebit { .. } + | BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Paypal"), + ) + .into()) + } } } } diff --git a/crates/hyperswitch_connectors/src/connectors/square/transformers.rs b/crates/hyperswitch_connectors/src/connectors/square/transformers.rs index 1f899e33ab..ce64daa8a7 100644 --- a/crates/hyperswitch_connectors/src/connectors/square/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/square/transformers.rs @@ -29,9 +29,12 @@ impl TryFrom<(&types::TokenizationRouterData, BankDebitData)> for SquareTokenReq BankDebitData::AchBankDebit { .. } | BankDebitData::SepaBankDebit { .. } | BankDebitData::BecsBankDebit { .. } - | BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Square"), - ))?, + | BankDebitData::BacsBankDebit { .. } + | BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Square"), + ))? + } } } } diff --git a/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs b/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs index c5655b5796..e9379a2034 100644 --- a/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs @@ -614,7 +614,7 @@ pub enum BankDebitData { #[derive(Debug, Eq, PartialEq, Serialize)] pub struct StripeBankDebitData { #[serde(flatten)] - pub bank_specific_data: BankDebitData, + pub bank_specific_data: Option, } #[derive(Debug, Eq, PartialEq, Serialize)] @@ -820,6 +820,7 @@ impl TryFrom for StripePaymentMethodType { | enums::PaymentMethodType::UpiIntent | enums::PaymentMethodType::Cashapp | enums::PaymentMethodType::Bluecode + | enums::PaymentMethodType::SepaGuarenteedDebit | enums::PaymentMethodType::Oxxo => Err(ConnectorError::NotImplemented( get_unimplemented_payment_method_error_message("stripe"), ) @@ -1216,20 +1217,26 @@ fn get_stripe_payment_method_type_from_wallet_data( } } -impl From<&payment_method_data::BankDebitData> for StripePaymentMethodType { - fn from(bank_debit_data: &payment_method_data::BankDebitData) -> Self { +impl TryFrom<&payment_method_data::BankDebitData> for StripePaymentMethodType { + type Error = ConnectorError; + fn try_from(bank_debit_data: &payment_method_data::BankDebitData) -> Result { match bank_debit_data { - payment_method_data::BankDebitData::AchBankDebit { .. } => Self::Ach, - payment_method_data::BankDebitData::SepaBankDebit { .. } => Self::Sepa, - payment_method_data::BankDebitData::BecsBankDebit { .. } => Self::Becs, - payment_method_data::BankDebitData::BacsBankDebit { .. } => Self::Bacs, + payment_method_data::BankDebitData::AchBankDebit { .. } => Ok(Self::Ach), + payment_method_data::BankDebitData::SepaBankDebit { .. } => Ok(Self::Sepa), + payment_method_data::BankDebitData::BecsBankDebit { .. } => Ok(Self::Becs), + payment_method_data::BankDebitData::BacsBankDebit { .. } => Ok(Self::Bacs), + payment_method_data::BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(ConnectorError::NotImplemented( + get_unimplemented_payment_method_error_message("stripe"), + )) + } } } } fn get_bank_debit_data( bank_debit_data: &payment_method_data::BankDebitData, -) -> (StripePaymentMethodType, BankDebitData) { +) -> (Option, Option) { match bank_debit_data { payment_method_data::BankDebitData::AchBankDebit { account_number, @@ -1241,13 +1248,13 @@ fn get_bank_debit_data( account_number: account_number.to_owned(), routing_number: routing_number.to_owned(), }; - (StripePaymentMethodType::Ach, ach_data) + (Some(StripePaymentMethodType::Ach), Some(ach_data)) } payment_method_data::BankDebitData::SepaBankDebit { iban, .. } => { let sepa_data: BankDebitData = BankDebitData::Sepa { iban: iban.to_owned(), }; - (StripePaymentMethodType::Sepa, sepa_data) + (Some(StripePaymentMethodType::Sepa), Some(sepa_data)) } payment_method_data::BankDebitData::BecsBankDebit { account_number, @@ -1258,7 +1265,7 @@ fn get_bank_debit_data( account_number: account_number.to_owned(), bsb_number: bsb_number.to_owned(), }; - (StripePaymentMethodType::Becs, becs_data) + (Some(StripePaymentMethodType::Becs), Some(becs_data)) } payment_method_data::BankDebitData::BacsBankDebit { account_number, @@ -1269,8 +1276,9 @@ fn get_bank_debit_data( account_number: account_number.to_owned(), sort_code: Secret::new(sort_code.clone().expose().replace('-', "")), }; - (StripePaymentMethodType::Bacs, bacs_data) + (Some(StripePaymentMethodType::Bacs), Some(bacs_data)) } + _ => (None, None), } } @@ -1359,11 +1367,7 @@ fn create_stripe_payment_method( bank_specific_data: bank_debit_data, }); - Ok(( - pm_data, - Some(pm_type), - payment_request_details.billing_address, - )) + Ok((pm_data, pm_type, payment_request_details.billing_address)) } PaymentMethodData::BankTransfer(bank_transfer_data) => match bank_transfer_data.deref() { payment_method_data::BankTransferData::AchBankTransfer {} => Ok(( diff --git a/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs b/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs index f0c783227c..a1b657c6ce 100644 --- a/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs @@ -1170,9 +1170,12 @@ impl ))), BankDebitData::SepaBankDebit { .. } | BankDebitData::BacsBankDebit { .. } - | BankDebitData::BecsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Wellsfargo"), - )), + | BankDebitData::BecsBankDebit { .. } + | BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Wellsfargo"), + )) + } }?; let processing_information = ProcessingInformation::try_from((item, Some(PaymentSolution::GooglePay), None))?; diff --git a/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs b/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs index 3890ec2f37..28350d35b1 100644 --- a/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs @@ -784,10 +784,13 @@ impl TryFrom<&BankDebitData> for ZenPaymentsRequest { BankDebitData::AchBankDebit { .. } | BankDebitData::SepaBankDebit { .. } | BankDebitData::BecsBankDebit { .. } - | BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Zen"), - ) - .into()), + | BankDebitData::BacsBankDebit { .. } + | BankDebitData::SepaGuarenteedBankDebit { .. } => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Zen"), + ) + .into()) + } } } } diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs index 68256b5353..0b1b73fa22 100644 --- a/crates/hyperswitch_connectors/src/utils.rs +++ b/crates/hyperswitch_connectors/src/utils.rs @@ -6165,6 +6165,7 @@ pub enum PaymentMethodDataType { OnlineBankingThailand, AchBankDebit, SepaBankDebit, + SepaGuarenteedDebit, BecsBankDebit, BacsBankDebit, AchBankTransfer, @@ -6326,6 +6327,9 @@ impl From for PaymentMethodDataType { PaymentMethodData::BankDebit(bank_debit_data) => match bank_debit_data { payment_method_data::BankDebitData::AchBankDebit { .. } => Self::AchBankDebit, payment_method_data::BankDebitData::SepaBankDebit { .. } => Self::SepaBankDebit, + payment_method_data::BankDebitData::SepaGuarenteedBankDebit { .. } => { + Self::SepaGuarenteedDebit + } payment_method_data::BankDebitData::BecsBankDebit { .. } => Self::BecsBankDebit, payment_method_data::BankDebitData::BacsBankDebit { .. } => Self::BacsBankDebit, }, diff --git a/crates/hyperswitch_domain_models/src/payment_method_data.rs b/crates/hyperswitch_domain_models/src/payment_method_data.rs index 76f73293a5..79caf8b0d4 100644 --- a/crates/hyperswitch_domain_models/src/payment_method_data.rs +++ b/crates/hyperswitch_domain_models/src/payment_method_data.rs @@ -754,6 +754,10 @@ pub enum BankDebitData { iban: Secret, bank_account_holder_name: Option>, }, + SepaGuarenteedBankDebit { + iban: Secret, + bank_account_holder_name: Option>, + }, BecsBankDebit { account_number: Secret, bsb_number: Secret, @@ -1711,6 +1715,14 @@ impl From for BankDebitData { iban, bank_account_holder_name, }, + api_models::payments::BankDebitData::SepaGuarenteedBankDebit { + iban, + bank_account_holder_name, + .. + } => Self::SepaBankDebit { + iban, + bank_account_holder_name, + }, api_models::payments::BankDebitData::BecsBankDebit { account_number, bsb_number, @@ -1766,6 +1778,15 @@ impl From for api_models::payments::additional_info::BankDebitAdd bank_account_holder_name, }, )), + BankDebitData::SepaGuarenteedBankDebit { + iban, + bank_account_holder_name, + } => Self::SepaGuarenteedDebit(Box::new( + payment_additional_types::SepaBankDebitAdditionalData { + iban: MaskedIban::from(iban), + bank_account_holder_name, + }, + )), BankDebitData::BecsBankDebit { account_number, bsb_number, @@ -2140,6 +2161,9 @@ impl GetPaymentMethodType for BankDebitData { match self { Self::AchBankDebit { .. } => api_enums::PaymentMethodType::Ach, Self::SepaBankDebit { .. } => api_enums::PaymentMethodType::Sepa, + Self::SepaGuarenteedBankDebit { .. } => { + api_enums::PaymentMethodType::SepaGuarenteedDebit + } Self::BecsBankDebit { .. } => api_enums::PaymentMethodType::Becs, Self::BacsBankDebit { .. } => api_enums::PaymentMethodType::Bacs, } diff --git a/crates/kgraph_utils/src/mca.rs b/crates/kgraph_utils/src/mca.rs index fd15c3415b..9c755f9134 100644 --- a/crates/kgraph_utils/src/mca.rs +++ b/crates/kgraph_utils/src/mca.rs @@ -50,7 +50,9 @@ fn get_dir_value_payment_method( api_enums::PaymentMethodType::Becs => Ok(dirval!(BankDebitType = Becs)), api_enums::PaymentMethodType::Sepa => Ok(dirval!(BankDebitType = Sepa)), - + api_enums::PaymentMethodType::SepaGuarenteedDebit => { + Ok(dirval!(BankDebitType = SepaGuarenteedDebit)) + } api_enums::PaymentMethodType::AliPay => Ok(dirval!(WalletType = AliPay)), api_enums::PaymentMethodType::AliPayHk => Ok(dirval!(WalletType = AliPayHk)), api_enums::PaymentMethodType::BancontactCard => { diff --git a/crates/kgraph_utils/src/transformers.rs b/crates/kgraph_utils/src/transformers.rs index aa0d81b774..41b48c9042 100644 --- a/crates/kgraph_utils/src/transformers.rs +++ b/crates/kgraph_utils/src/transformers.rs @@ -195,6 +195,9 @@ impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) { }, api_enums::PaymentMethodType::Becs => Ok(dirval!(BankDebitType = Becs)), api_enums::PaymentMethodType::Sepa => Ok(dirval!(BankDebitType = Sepa)), + api_enums::PaymentMethodType::SepaGuarenteedDebit => { + Ok(dirval!(BankDebitType = SepaGuarenteedDebit)) + } api_enums::PaymentMethodType::SepaBankTransfer => { Ok(dirval!(BankTransferType = SepaBankTransfer)) } diff --git a/crates/payment_methods/src/helpers.rs b/crates/payment_methods/src/helpers.rs index 0bdcf99086..5968f82757 100644 --- a/crates/payment_methods/src/helpers.rs +++ b/crates/payment_methods/src/helpers.rs @@ -178,6 +178,7 @@ pub fn validate_payment_method_type_against_payment_method( payment_method_type, api_enums::PaymentMethodType::Ach | api_enums::PaymentMethodType::Sepa + | api_enums::PaymentMethodType::SepaGuarenteedDebit | api_enums::PaymentMethodType::Bacs | api_enums::PaymentMethodType::Becs ), diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs index 3a3a4b6fb7..ba6295278b 100644 --- a/crates/router/src/connector/utils.rs +++ b/crates/router/src/connector/utils.rs @@ -2595,6 +2595,7 @@ pub enum PaymentMethodDataType { OnlineBankingThailand, AchBankDebit, SepaBankDebit, + SepaGuarenteedDebit, BecsBankDebit, BacsBankDebit, AchBankTransfer, @@ -2758,6 +2759,7 @@ impl From for PaymentMethodDataType { match bank_debit_data { domain::payments::BankDebitData::AchBankDebit { .. } => Self::AchBankDebit, domain::payments::BankDebitData::SepaBankDebit { .. } => Self::SepaBankDebit, + domain::payments::BankDebitData::SepaGuarenteedBankDebit { .. } => Self::SepaGuarenteedDebit, domain::payments::BankDebitData::BecsBankDebit { .. } => Self::BecsBankDebit, domain::payments::BankDebitData::BacsBankDebit { .. } => Self::BacsBankDebit, } diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index faf7cb2618..d13735633f 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -332,6 +332,7 @@ impl ForeignFrom for api_enums::PaymentMethod { api_enums::PaymentMethodType::CryptoCurrency => Self::Crypto, api_enums::PaymentMethodType::Ach | api_enums::PaymentMethodType::Sepa + | api_enums::PaymentMethodType::SepaGuarenteedDebit | api_enums::PaymentMethodType::Bacs | api_enums::PaymentMethodType::Becs => Self::BankDebit, api_enums::PaymentMethodType::Credit | api_enums::PaymentMethodType::Debit => {