feat(core): [Stripe] add bank debits payment method to stripe (#906)

This commit is contained in:
Narayan Bhat
2023-04-21 13:49:20 +05:30
committed by GitHub
parent c1a25b30bd
commit f624eb52d6
8 changed files with 345 additions and 43 deletions

View File

@ -409,11 +409,14 @@ pub enum PaymentExperience {
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum PaymentMethodType {
Ach,
Affirm,
AfterpayClearpay,
AliPay,
ApplePay,
Bacs,
BancontactCard,
Becs,
Blik,
Credit,
CryptoCurrency,
@ -432,6 +435,7 @@ pub enum PaymentMethodType {
PayBright,
Paypal,
Przelewy24,
Sepa,
Sofort,
Swish,
Trustly,
@ -463,6 +467,7 @@ pub enum PaymentMethod {
Wallet,
BankRedirect,
Crypto,
BankDebit,
}
#[derive(

View File

@ -462,13 +462,57 @@ pub enum PayLaterData {
Walley {},
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, ToSchema, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum BankDebitData {
/// Payment Method data for Ach bank debit
AchBankDebit {
/// Billing details for bank debit
billing_details: BankDebitBilling,
/// Account number for ach bank debit payment
#[schema(value_type = String, example = "000123456789")]
account_number: Secret<String>,
/// Routing number for ach bank debit payment
#[schema(value_type = String, example = "110000000")]
routing_number: Secret<String>,
},
SepaBankDebit {
/// Billing details for bank debit
billing_details: BankDebitBilling,
/// International bank account number (iban) for SEPA
#[schema(value_type = String, example = "DE89370400440532013000")]
iban: Secret<String>,
},
BecsBankDebit {
/// Billing details for bank debit
billing_details: BankDebitBilling,
/// Account number for Becs payment method
#[schema(value_type = String, example = "000123456")]
account_number: Secret<String>,
/// Bank-State-Branch (bsb) number
#[schema(value_type = String, example = "000000")]
bsb_number: Secret<String>,
},
BacsBankDebit {
/// Billing details for bank debit
billing_details: BankDebitBilling,
/// Account number for Bacs payment method
#[schema(value_type = String, example = "00012345")]
account_number: Secret<String>,
/// Sort code for Bacs payment method
#[schema(value_type = String, example = "108800")]
sort_code: Secret<String>,
},
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum PaymentMethodData {
Card(Card),
Wallet(WalletData),
PayLater(PayLaterData),
BankRedirect(BankRedirectData),
BankDebit(BankDebitData),
Crypto(CryptoData),
}
@ -485,6 +529,7 @@ pub enum AdditionalPaymentData {
Wallet {},
PayLater {},
Crypto {},
BankDebit {},
}
impl From<&PaymentMethodData> for AdditionalPaymentData {
@ -509,6 +554,7 @@ impl From<&PaymentMethodData> for AdditionalPaymentData {
PaymentMethodData::Wallet(_) => Self::Wallet {},
PaymentMethodData::PayLater(_) => Self::PayLater {},
PaymentMethodData::Crypto(_) => Self::Crypto {},
PaymentMethodData::BankDebit(_) => Self::BankDebit {},
}
}
}
@ -607,6 +653,18 @@ pub struct BankRedirectBilling {
pub billing_name: Secret<String>,
}
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, ToSchema, Eq, PartialEq)]
pub struct BankDebitBilling {
/// The billing name for bank debits
#[schema(value_type = String, example = "John Doe")]
pub name: Secret<String>,
/// The billing email for bank debits
#[schema(value_type = String, example = "example@example.com")]
pub email: Secret<String, pii::Email>,
/// The billing address for bank debits
pub address: Option<AddressDetails>,
}
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum WalletData {
@ -722,6 +780,7 @@ pub enum PaymentMethodDataResponse {
Paypal,
BankRedirect(BankRedirectData),
Crypto(CryptoData),
BankDebit(BankDebitData),
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, ToSchema)]
@ -1137,7 +1196,7 @@ pub struct PaymentListResponse {
pub data: Vec<PaymentsResponse>,
}
#[derive(Setter, Clone, Default, Debug, Eq, PartialEq, serde::Serialize)]
#[derive(Setter, Clone, Default, Debug, serde::Serialize)]
pub struct VerifyResponse {
pub verify_id: Option<String>,
pub merchant_id: Option<String>,
@ -1262,6 +1321,7 @@ impl From<PaymentMethodData> for PaymentMethodDataResponse {
Self::BankRedirect(bank_redirect_data)
}
PaymentMethodData::Crypto(crpto_data) => Self::Crypto(crpto_data),
PaymentMethodData::BankDebit(bank_debit_data) => Self::BankDebit(bank_debit_data),
}
}
}