Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
a0ffaa7
add template code for stripebilling
Feb 9, 2025
bb432a5
add logic instead of todo in template code
Feb 9, 2025
4555023
chore: run formatter
hyperswitch-bot[bot] Feb 9, 2025
8ab0630
Merge branch 'main' into template_code_stripebilling
Feb 13, 2025
2ad25d7
fixes errors
Feb 13, 2025
3c38093
chore: run formatter
hyperswitch-bot[bot] Feb 13, 2025
a2ca88b
Merge branch 'main' into template_code_stripebilling
NISHANTH1221 Feb 24, 2025
4412b10
resolved error in default implementation
Feb 24, 2025
d6c7f7a
additional api call flow for revenue recovery
Feb 27, 2025
0139e03
Merge branch 'main' into template_code_stripebilling
Feb 27, 2025
ccfcff3
chore: run formatter
hyperswitch-bot[bot] Feb 27, 2025
4abdce9
Merge branch 'main' into template_code_stripebilling
NISHANTH1221 Mar 2, 2025
6e08413
Merge branch 'main' into template_code_stripebilling
NISHANTH1221 Mar 3, 2025
3295979
chore: run formatter
hyperswitch-bot[bot] Mar 3, 2025
0d5a8ea
changes in name of the flow in config files
Mar 3, 2025
1ad2464
chore: run formatter
hyperswitch-bot[bot] Mar 3, 2025
70b7546
Merge branch 'template_code_stripebilling' into additional_recovery_c…
NISHANTH1221 Mar 3, 2025
966ce1b
add paystack in deafult implememtation additional call flow
Mar 3, 2025
6f4573a
Merge branch 'main' into additional_recovery_call_flow
NISHANTH1221 Mar 3, 2025
4a34e07
added paystack connector in default implementation
Mar 3, 2025
e10b589
add debug and clone trait to Additional Revenue Recovery Flow Common …
Mar 3, 2025
145a6d9
chore: run formatter
hyperswitch-bot[bot] Mar 3, 2025
2cc26be
resolve spell check
Mar 3, 2025
70a430f
add stripebilling in configs
Mar 3, 2025
c9ae685
refactor: rename Additional Revenue Recovery related types and traits
Mar 4, 2025
524cce1
chore: run formatter
hyperswitch-bot[bot] Mar 4, 2025
66132cb
refactor: reorganize revenue recovery module structure
Mar 4, 2025
fc01f6c
chore: run formatter
hyperswitch-bot[bot] Mar 4, 2025
f93bbc6
Merge branch 'main' into additional_recovery_call_flow
NISHANTH1221 Mar 4, 2025
51e6dcd
change v2 to v1
Mar 4, 2025
e5b8314
refactor: update additional revenue recovery call implementations for…
Mar 4, 2025
25855cc
refactor: add RevenueRecovery trait and update related implementations
Mar 4, 2025
ad1e7dd
chore: run formatter
hyperswitch-bot[bot] Mar 4, 2025
7c05cb5
refactor: update revenue recovery request data structure
Mar 4, 2025
f09f19c
Merge branch 'main' into additional_recovery_call_flow
NISHANTH1221 Mar 5, 2025
5bf5bf1
feat(connector): add Recurly to additional revenue recovery call
Mar 5, 2025
15952db
Merge branch 'main' into additional_recovery_call_flow
NISHANTH1221 Mar 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions config/config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -883,3 +883,6 @@ entity_logo_url = "https://example.com/logo.svg" # Logo URL of the entity to be
foreground_color = "#000000" # Foreground color of email text
primary_color = "#006DF9" # Primary color of email body
background_color = "#FFFFFF" # Background color of email body

[additional_revenue_recovery_details_call]
connectors_with_additional_revenue_recovery_details_call = "stripebilling" # List of connectors which has additional revenue recovery details api-call
3 changes: 3 additions & 0 deletions config/development.toml
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,9 @@ connectors_with_delayed_session_response = "trustpay,payme"
[webhook_source_verification_call]
connectors_with_webhook_source_verification_call = "paypal"

[additional_revenue_recovery_details_call]
connectors_with_additional_revenue_recovery_details_call = "stripebilling"

[mandates.supported_payment_methods]
bank_debit.ach = { connector_list = "gocardless,adyen,stripe" }
bank_debit.becs = { connector_list = "gocardless,stripe,adyen" }
Expand Down
3 changes: 3 additions & 0 deletions config/docker_compose.toml
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,9 @@ connectors_with_delayed_session_response = "trustpay,payme"
[webhook_source_verification_call]
connectors_with_webhook_source_verification_call = "paypal"

[additional_revenue_recovery_details_call]
connectors_with_additional_revenue_recovery_details_call = "stripebilling"

[scheduler]
stream = "SCHEDULER_STREAM"

Expand Down
109 changes: 105 additions & 4 deletions crates/hyperswitch_connectors/src/default_implementations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ use hyperswitch_domain_models::{
PreProcessing, Reject, SdkSessionUpdate,
},
webhooks::VerifyWebhookSource,
Authenticate, AuthenticationConfirmation, PostAuthenticate, PreAuthenticate,
Authenticate, AuthenticationConfirmation, GetAdditionalRevenueRecoveryDetails,
PostAuthenticate, PreAuthenticate,
},
router_request_types::{
revenue_recovery::GetAdditionalRevenueRecoveryRequestData,
unified_authentication_service::{
UasAuthenticationRequestData, UasAuthenticationResponseData,
UasConfirmationRequestData, UasPostAuthenticationRequestData,
Expand All @@ -49,9 +51,10 @@ use hyperswitch_domain_models::{
SubmitEvidenceRequestData, UploadFileRequestData, VerifyWebhookSourceRequestData,
},
router_response_types::{
AcceptDisputeResponse, DefendDisputeResponse, MandateRevokeResponseData,
PaymentsResponseData, RetrieveFileResponse, SubmitEvidenceResponse,
TaxCalculationResponseData, UploadFileResponse, VerifyWebhookSourceResponseData,
revenue_recovery::GetAdditionalRevenueRecoveryResponseData, AcceptDisputeResponse,
DefendDisputeResponse, MandateRevokeResponseData, PaymentsResponseData,
RetrieveFileResponse, SubmitEvidenceResponse, TaxCalculationResponseData,
UploadFileResponse, VerifyWebhookSourceResponseData,
},
};
#[cfg(feature = "frm")]
Expand All @@ -75,6 +78,7 @@ use hyperswitch_interfaces::{
PaymentSessionUpdate, PaymentsCompleteAuthorize, PaymentsPostProcessing,
PaymentsPreProcessing, TaxCalculation,
},
revenue_recovery::{AdditionalRevenueRecovery, RevenueRecovery},
ConnectorIntegration, ConnectorMandateRevoke, ConnectorRedirectResponse, UasAuthentication,
UasAuthenticationConfirmation, UasPostAuthentication, UasPreAuthentication,
UnifiedAuthenticationService,
Expand Down Expand Up @@ -3522,3 +3526,100 @@ default_imp_for_uas_authentication_confirmation!(
connectors::Zen,
connectors::Zsl
);

macro_rules! default_imp_for_additional_revenue_recovery_call {
($($path:ident::$connector:ident),*) => {
$( impl RevenueRecovery for $path::$connector {}
impl AdditionalRevenueRecovery for $path::$connector {}
impl
ConnectorIntegration<
GetAdditionalRevenueRecoveryDetails,
GetAdditionalRevenueRecoveryRequestData,
GetAdditionalRevenueRecoveryResponseData
> for $path::$connector
{}
)*
};
}

default_imp_for_additional_revenue_recovery_call!(
connectors::Aci,
connectors::Airwallex,
connectors::Amazonpay,
connectors::Authorizedotnet,
connectors::Bambora,
connectors::Bamboraapac,
connectors::Bankofamerica,
connectors::Billwerk,
connectors::Bluesnap,
connectors::Bitpay,
connectors::Braintree,
connectors::Boku,
connectors::Cashtocode,
connectors::Chargebee,
connectors::Checkout,
connectors::Coinbase,
connectors::Coingate,
connectors::Cryptopay,
connectors::CtpMastercard,
connectors::Cybersource,
connectors::Datatrans,
connectors::Deutschebank,
connectors::Digitalvirgo,
connectors::Dlocal,
connectors::Elavon,
connectors::Fiserv,
connectors::Fiservemea,
connectors::Fiuu,
connectors::Forte,
connectors::Getnet,
connectors::Globalpay,
connectors::Globepay,
connectors::Gocardless,
connectors::Helcim,
connectors::Iatapay,
connectors::Inespay,
connectors::Itaubank,
connectors::Jpmorgan,
connectors::Klarna,
connectors::Nomupay,
connectors::Noon,
connectors::Novalnet,
connectors::Nexinets,
connectors::Nexixpay,
connectors::Nuvei,
connectors::Opayo,
connectors::Opennode,
connectors::Payeezy,
connectors::Paystack,
connectors::Payu,
connectors::Powertranz,
connectors::Prophetpay,
connectors::Mifinity,
connectors::Mollie,
connectors::Moneris,
connectors::Multisafepay,
connectors::Paybox,
connectors::Payme,
connectors::Placetopay,
connectors::Rapyd,
connectors::Razorpay,
connectors::Recurly,
connectors::Redsys,
connectors::Shift4,
connectors::Stax,
connectors::Square,
connectors::Stripebilling,
connectors::Taxjar,
connectors::Thunes,
connectors::Trustpay,
connectors::Tsys,
connectors::UnifiedAuthenticationService,
connectors::Worldline,
connectors::Worldpay,
connectors::Wellsfargo,
connectors::Volt,
connectors::Xendit,
connectors::Zen,
connectors::Zsl
);
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,6 @@ pub struct UasFlowData {
pub authenticate_by: String,
pub source_authentication_id: String,
}

#[derive(Debug, Clone)]
pub struct GetAdditionalRevenueRecoveryFlowCommonData;
2 changes: 2 additions & 0 deletions crates/hyperswitch_domain_models/src/router_flow_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ pub mod mandate_revoke;
pub mod payments;
pub mod payouts;
pub mod refunds;
pub mod revenue_recovery;
pub mod unified_authentication_service;
pub mod webhooks;

Expand All @@ -16,5 +17,6 @@ pub use fraud_check::*;
pub use payments::*;
pub use payouts::*;
pub use refunds::*;
pub use revenue_recovery::*;
pub use unified_authentication_service::*;
pub use webhooks::*;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#[derive(Debug, Clone)]
pub struct GetAdditionalRevenueRecoveryDetails;
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
pub mod authentication;
pub mod fraud_check;
pub mod revenue_recovery;
pub mod unified_authentication_service;
use api_models::payments::{AdditionalPaymentData, RequestSurchargeDetails};
use common_utils::{consts, errors, ext_traits::OptionExt, id_type, pii, types::MinorUnit};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#[derive(Debug, Clone)]
pub struct GetAdditionalRevenueRecoveryRequestData {
/// unique id for making additional revenue recovery call
pub additional_revenue_recovery_id: String,
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
pub mod disputes;
pub mod fraud_check;
pub mod revenue_recovery;
use std::collections::HashMap;

use common_utils::{request::Method, types::MinorUnit};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use common_utils::types::MinorUnit;
use time::PrimitiveDateTime;
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct GetAdditionalRevenueRecoveryResponseData {
/// transaction amount against invoice, accepted in minor unit.
pub amount: MinorUnit,
/// currency of the transaction
pub currency: common_enums::enums::Currency,
/// merchant reference id at billing connector. ex: invoice_id
pub merchant_reference_id: common_utils::id_type::PaymentReferenceId,
/// transaction id reference at payment connector
pub connector_transaction_id: Option<common_utils::types::ConnectorTransactionId>,
/// error code sent by billing connector.
pub error_code: Option<String>,
/// error message sent by billing connector.
pub error_message: Option<String>,
/// mandate token at payment processor end.
pub processor_payment_method_token: Option<String>,
/// customer id at payment connector for which mandate is attached.
pub connector_customer_id: Option<String>,
/// Payment gateway identifier id at billing processor.
pub connector_account_reference_id: Option<String>,
/// timestamp at which transaction has been created at billing connector
pub transaction_created_at: Option<PrimitiveDateTime>,
/// transaction status at billing connector equivalent to payment attempt status.
pub status: common_enums::enums::AttemptStatus,
/// payment method of payment attempt.
pub payment_method_type: common_enums::enums::PaymentMethod,
/// payment method sub type of the payment attempt.
pub payment_method_sub_type: common_enums::enums::PaymentMethodType,
}
17 changes: 12 additions & 5 deletions crates/hyperswitch_domain_models/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ use crate::{
router_flow_types::{
mandate_revoke::MandateRevoke, AccessTokenAuth, Authenticate, AuthenticationConfirmation,
Authorize, AuthorizeSessionToken, CalculateTax, Capture, CompleteAuthorize,
CreateConnectorCustomer, Execute, IncrementalAuthorization, PSync, PaymentMethodToken,
PostAuthenticate, PostSessionTokens, PreAuthenticate, PreProcessing, RSync, Session,
SetupMandate, Void,
CreateConnectorCustomer, Execute, GetAdditionalRevenueRecoveryDetails,
IncrementalAuthorization, PSync, PaymentMethodToken, PostAuthenticate, PostSessionTokens,
PreAuthenticate, PreProcessing, RSync, Session, SetupMandate, Void,
},
router_request_types::{
revenue_recovery::GetAdditionalRevenueRecoveryRequestData,
unified_authentication_service::{
UasAuthenticationRequestData, UasAuthenticationResponseData,
UasConfirmationRequestData, UasPostAuthenticationRequestData,
Expand All @@ -23,8 +24,8 @@ use crate::{
PaymentsTaxCalculationData, RefundsData, SetupMandateRequestData,
},
router_response_types::{
MandateRevokeResponseData, PaymentsResponseData, RefundsResponseData,
TaxCalculationResponseData,
revenue_recovery::GetAdditionalRevenueRecoveryResponseData, MandateRevokeResponseData,
PaymentsResponseData, RefundsResponseData, TaxCalculationResponseData,
},
};
#[cfg(feature = "payouts")]
Expand Down Expand Up @@ -81,3 +82,9 @@ pub type PayoutsRouterData<F> = RouterData<F, PayoutsData, PayoutsResponseData>;

pub type UasAuthenticationRouterData =
RouterData<Authenticate, UasAuthenticationRequestData, UasAuthenticationResponseData>;

pub type AdditionalRevenueRecoveryDetailsRouterData = RouterData<
GetAdditionalRevenueRecoveryDetails,
GetAdditionalRevenueRecoveryRequestData,
GetAdditionalRevenueRecoveryResponseData,
>;
2 changes: 2 additions & 0 deletions crates/hyperswitch_interfaces/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ pub mod payouts;
pub mod payouts_v2;
pub mod refunds;
pub mod refunds_v2;
pub mod revenue_recovery;
pub mod revenue_recovery_v2;

use common_enums::{
enums::{CallConnectorAction, CaptureMethod, EventClass, PaymentAction, PaymentMethodType},
Expand Down
21 changes: 21 additions & 0 deletions crates/hyperswitch_interfaces/src/api/revenue_recovery.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//! Revenue Recovery Interface

use hyperswitch_domain_models::{
router_flow_types::GetAdditionalRevenueRecoveryDetails,
router_request_types::revenue_recovery::GetAdditionalRevenueRecoveryRequestData,
router_response_types::revenue_recovery::GetAdditionalRevenueRecoveryResponseData,
};

use super::{ConnectorCommon, ConnectorIntegration};
/// trait RevenueRecovery
pub trait RevenueRecovery: ConnectorCommon + AdditionalRevenueRecovery {}

/// trait AdditionalRevenueRecovery
pub trait AdditionalRevenueRecovery:
ConnectorIntegration<
GetAdditionalRevenueRecoveryDetails,
GetAdditionalRevenueRecoveryRequestData,
GetAdditionalRevenueRecoveryResponseData,
>
{
}
24 changes: 24 additions & 0 deletions crates/hyperswitch_interfaces/src/api/revenue_recovery_v2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//! Revenue Recovery Interface V2

use hyperswitch_domain_models::{
router_data_v2::flow_common_types::GetAdditionalRevenueRecoveryFlowCommonData,
router_flow_types::GetAdditionalRevenueRecoveryDetails,
router_request_types::revenue_recovery::GetAdditionalRevenueRecoveryRequestData,
router_response_types::revenue_recovery::GetAdditionalRevenueRecoveryResponseData,
};

use crate::connector_integration_v2::ConnectorIntegrationV2;

/// trait RevenueRecoveryV2
pub trait RevenueRecoveryV2: AdditionalRevenueRecoveryV2 {}

/// trait AdditionalRevenueRecoveryV2
pub trait AdditionalRevenueRecoveryV2:
ConnectorIntegrationV2<
GetAdditionalRevenueRecoveryDetails,
GetAdditionalRevenueRecoveryFlowCommonData,
GetAdditionalRevenueRecoveryRequestData,
GetAdditionalRevenueRecoveryResponseData,
>
{
}
14 changes: 12 additions & 2 deletions crates/hyperswitch_interfaces/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ use hyperswitch_domain_models::{
Session, SetupMandate, Void,
},
refunds::{Execute, RSync},
revenue_recovery::GetAdditionalRevenueRecoveryDetails,
unified_authentication_service::{
Authenticate, AuthenticationConfirmation, PostAuthenticate, PreAuthenticate,
},
webhooks::VerifyWebhookSource,
},
router_request_types::{
revenue_recovery::GetAdditionalRevenueRecoveryRequestData,
unified_authentication_service::{
UasAuthenticationRequestData, UasAuthenticationResponseData,
UasConfirmationRequestData, UasPostAuthenticationRequestData,
Expand All @@ -35,8 +37,9 @@ use hyperswitch_domain_models::{
SubmitEvidenceRequestData, UploadFileRequestData, VerifyWebhookSourceRequestData,
},
router_response_types::{
AcceptDisputeResponse, DefendDisputeResponse, MandateRevokeResponseData,
PaymentsResponseData, RefundsResponseData, RetrieveFileResponse, SubmitEvidenceResponse,
revenue_recovery::GetAdditionalRevenueRecoveryResponseData, AcceptDisputeResponse,
DefendDisputeResponse, MandateRevokeResponseData, PaymentsResponseData,
RefundsResponseData, RetrieveFileResponse, SubmitEvidenceResponse,
TaxCalculationResponseData, UploadFileResponse, VerifyWebhookSourceResponseData,
},
};
Expand Down Expand Up @@ -222,3 +225,10 @@ pub type UasAuthenticationType = dyn ConnectorIntegration<
UasAuthenticationRequestData,
UasAuthenticationResponseData,
>;

/// Type alias for `ConnectorIntegration<GetAdditionalRevenueRecoveryDetails, GetAdditionalRevenueRecoveryRequestData, GetAdditionalRevenueRecoveryResponseData>`
pub type AdditionalRevenueRecoveryCallType = dyn ConnectorIntegration<
GetAdditionalRevenueRecoveryDetails,
GetAdditionalRevenueRecoveryRequestData,
GetAdditionalRevenueRecoveryResponseData,
>;
2 changes: 1 addition & 1 deletion crates/router/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ payouts = ["api_models/payouts", "common_enums/payouts", "hyperswitch_connectors
payout_retry = ["payouts"]
recon = ["email", "api_models/recon"]
retry = []
v2 = ["customer_v2", "payment_methods_v2", "common_default", "api_models/v2", "diesel_models/v2", "hyperswitch_domain_models/v2", "storage_impl/v2", "kgraph_utils/v2", "common_utils/v2", "hyperswitch_connectors/v2","hyperswitch_interfaces/v2", "common_types/v2"]
v2 = ["customer_v2", "payment_methods_v2", "common_default", "api_models/v2", "diesel_models/v2", "hyperswitch_domain_models/v2", "storage_impl/v2", "kgraph_utils/v2", "common_utils/v2", "hyperswitch_connectors/v2","hyperswitch_interfaces/v2", "common_types/v2","revenue_recovery"]
v1 = ["common_default", "api_models/v1", "diesel_models/v1", "hyperswitch_domain_models/v1", "storage_impl/v1", "hyperswitch_interfaces/v1", "kgraph_utils/v1", "common_utils/v1", "hyperswitch_connectors/v1", "common_types/v1"]
customer_v2 = ["api_models/customer_v2", "diesel_models/customer_v2", "hyperswitch_domain_models/customer_v2", "storage_impl/customer_v2"]
payment_methods_v2 = ["api_models/payment_methods_v2", "diesel_models/payment_methods_v2", "hyperswitch_domain_models/payment_methods_v2", "storage_impl/payment_methods_v2", "common_utils/payment_methods_v2"]
Expand Down
1 change: 1 addition & 0 deletions crates/router/src/configs/secrets_transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,7 @@ pub(crate) async fn fetch_raw_secrets(
required_fields: conf.required_fields,
delayed_session_response: conf.delayed_session_response,
webhook_source_verification_call: conf.webhook_source_verification_call,
// additional_revenue_recovery_details_call: conf.additional_revenue_recovery_details_call,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this commented ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since the connector is not enabled the cypress tests will fail on this. I will enable it in subsequent pr's

payment_method_auth,
connector_request_reference_id_config: conf.connector_request_reference_id_config,
#[cfg(feature = "payouts")]
Expand Down
Loading
Loading