mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-03 05:17:02 +08:00
feat(connector): add payouts integration for AdyenPlatform (#4874)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -1819,6 +1819,10 @@ pub(crate) fn validate_auth_and_metadata_type(
|
||||
use crate::connector::*;
|
||||
|
||||
match connector_name {
|
||||
api_enums::Connector::Adyenplatform => {
|
||||
adyenplatform::transformers::AdyenplatformAuthType::try_from(val)?;
|
||||
Ok(())
|
||||
}
|
||||
// api_enums::Connector::Mifinity => {
|
||||
// mifinity::transformers::MifinityAuthType::try_from(val)?;
|
||||
// Ok(())
|
||||
|
||||
@ -156,6 +156,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_complete_authorize!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Billwerk,
|
||||
@ -229,6 +230,7 @@ impl<const T: u8>
|
||||
{
|
||||
}
|
||||
default_imp_for_webhook_source_verification!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -319,6 +321,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_create_customer!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -409,6 +412,7 @@ impl<const T: u8> services::ConnectorRedirectResponse for connector::DummyConnec
|
||||
}
|
||||
|
||||
default_imp_for_connector_redirect_response!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Bitpay,
|
||||
@ -468,6 +472,7 @@ macro_rules! default_imp_for_connector_request_id {
|
||||
impl<const T: u8> api::ConnectorTransactionId for connector::DummyConnector<T> {}
|
||||
|
||||
default_imp_for_connector_request_id!(
|
||||
connector::Adyenplatform,
|
||||
connector::Zsl,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
@ -560,6 +565,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_accept_dispute!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -672,6 +678,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_file_upload!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -761,6 +768,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_submit_evidence!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -850,6 +858,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_defend_dispute!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -940,6 +949,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_pre_processing_steps!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Authorizedotnet,
|
||||
connector::Bambora,
|
||||
@ -1090,6 +1100,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "payouts")]
|
||||
default_imp_for_payouts_create!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
@ -1180,6 +1191,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "payouts")]
|
||||
default_imp_for_payouts_eligibility!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
@ -1354,6 +1366,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "payouts")]
|
||||
default_imp_for_payouts_cancel!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
@ -1442,6 +1455,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "payouts")]
|
||||
default_imp_for_payouts_quote!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -1532,6 +1546,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "payouts")]
|
||||
default_imp_for_payouts_recipient!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -1624,6 +1639,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "payouts")]
|
||||
default_imp_for_payouts_recipient_account!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -1714,6 +1730,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_approve!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -1805,6 +1822,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_reject!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -1880,6 +1898,7 @@ macro_rules! default_imp_for_fraud_check {
|
||||
impl<const T: u8> api::FraudCheck for connector::DummyConnector<T> {}
|
||||
|
||||
default_imp_for_fraud_check!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -1971,6 +1990,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "frm")]
|
||||
default_imp_for_frm_sale!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2062,6 +2082,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "frm")]
|
||||
default_imp_for_frm_checkout!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2153,6 +2174,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "frm")]
|
||||
default_imp_for_frm_transaction!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2244,6 +2266,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "frm")]
|
||||
default_imp_for_frm_fulfillment!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2335,6 +2358,7 @@ impl<const T: u8>
|
||||
|
||||
#[cfg(feature = "frm")]
|
||||
default_imp_for_frm_record_return!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2424,6 +2448,7 @@ impl<const T: u8>
|
||||
}
|
||||
|
||||
default_imp_for_incremental_authorization!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2512,6 +2537,7 @@ impl<const T: u8>
|
||||
{
|
||||
}
|
||||
default_imp_for_revoking_mandates!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2660,6 +2686,7 @@ impl<const T: u8>
|
||||
{
|
||||
}
|
||||
default_imp_for_connector_authentication!(
|
||||
connector::Adyenplatform,
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Airwallex,
|
||||
@ -2747,6 +2774,7 @@ impl<const T: u8>
|
||||
default_imp_for_authorize_session_token!(
|
||||
connector::Aci,
|
||||
connector::Adyen,
|
||||
connector::Adyenplatform,
|
||||
connector::Airwallex,
|
||||
connector::Authorizedotnet,
|
||||
connector::Bambora,
|
||||
|
||||
@ -990,7 +990,6 @@ impl ForeignFrom<(storage::Payouts, storage::PayoutAttempt, domain::Customer)>
|
||||
unified_code: None,
|
||||
unified_message: None,
|
||||
};
|
||||
let attempts = vec![attempt];
|
||||
Self {
|
||||
payout_id: payout.payout_id,
|
||||
merchant_id: payout.merchant_id,
|
||||
@ -1016,7 +1015,9 @@ impl ForeignFrom<(storage::Payouts, storage::PayoutAttempt, domain::Customer)>
|
||||
error_code: payout_attempt.error_code,
|
||||
profile_id: payout.profile_id,
|
||||
created: Some(payout.created_at),
|
||||
attempts: Some(attempts),
|
||||
connector_transaction_id: attempt.connector_transaction_id.clone(),
|
||||
priority: payout.priority,
|
||||
attempts: Some(vec![attempt]),
|
||||
billing: None,
|
||||
client_secret: None,
|
||||
}
|
||||
|
||||
@ -502,7 +502,6 @@ pub async fn payouts_cancel_core(
|
||||
.await?;
|
||||
|
||||
let payout_attempt = payout_data.payout_attempt.to_owned();
|
||||
let connector_payout_id = payout_attempt.connector_payout_id.to_owned();
|
||||
let status = payout_attempt.status;
|
||||
|
||||
// Verify if cancellation can be triggered
|
||||
@ -518,7 +517,7 @@ pub async fn payouts_cancel_core(
|
||||
} else if helpers::is_eligible_for_local_payout_cancellation(status) {
|
||||
let status = storage_enums::PayoutStatus::Cancelled;
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: connector_payout_id.to_owned(),
|
||||
connector_payout_id: payout_attempt.connector_payout_id.to_owned(),
|
||||
status,
|
||||
error_message: Some("Cancelled by user".to_string()),
|
||||
error_code: None,
|
||||
@ -1084,7 +1083,10 @@ pub async fn create_recipient(
|
||||
.status
|
||||
.unwrap_or(api_enums::PayoutStatus::RequiresVendorAccountCreation);
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: recipient_create_data.connector_payout_id,
|
||||
connector_payout_id: payout_data
|
||||
.payout_attempt
|
||||
.connector_payout_id
|
||||
.to_owned(),
|
||||
status,
|
||||
error_code: None,
|
||||
error_message: None,
|
||||
@ -1248,7 +1250,7 @@ pub async fn check_payout_eligibility(
|
||||
Err(err) => {
|
||||
let status = storage_enums::PayoutStatus::Failed;
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
|
||||
status,
|
||||
error_code: Some(err.code),
|
||||
error_message: Some(err.message),
|
||||
@ -1440,7 +1442,7 @@ pub async fn create_payout(
|
||||
Err(err) => {
|
||||
let status = storage_enums::PayoutStatus::Failed;
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
|
||||
status,
|
||||
error_code: Some(err.code),
|
||||
error_message: Some(err.message),
|
||||
@ -1563,7 +1565,7 @@ pub async fn create_recipient_disburse_account(
|
||||
}
|
||||
Err(err) => {
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
|
||||
status: storage_enums::PayoutStatus::Failed,
|
||||
error_code: Some(err.code),
|
||||
error_message: Some(err.message),
|
||||
@ -1659,7 +1661,7 @@ pub async fn cancel_payout(
|
||||
Err(err) => {
|
||||
let status = storage_enums::PayoutStatus::Failed;
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
|
||||
status,
|
||||
error_code: Some(err.code),
|
||||
error_message: Some(err.message),
|
||||
@ -1762,7 +1764,7 @@ pub async fn fulfill_payout(
|
||||
.await?;
|
||||
}
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
|
||||
connector_payout_id: payout_response_data.connector_payout_id,
|
||||
status,
|
||||
error_code: None,
|
||||
error_message: None,
|
||||
@ -1799,7 +1801,7 @@ pub async fn fulfill_payout(
|
||||
Err(err) => {
|
||||
let status = storage_enums::PayoutStatus::Failed;
|
||||
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
|
||||
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
|
||||
status,
|
||||
error_code: Some(err.code),
|
||||
error_message: Some(err.message),
|
||||
@ -1896,6 +1898,8 @@ pub async fn response_handler(
|
||||
error_code: payout_attempt.error_code,
|
||||
profile_id: payout_attempt.profile_id,
|
||||
created: Some(payouts.created_at),
|
||||
connector_transaction_id: payout_attempt.connector_payout_id,
|
||||
priority: payouts.priority,
|
||||
attempts: None,
|
||||
};
|
||||
Ok(services::ApplicationResponse::Json(response))
|
||||
@ -1992,6 +1996,7 @@ pub async fn payout_create_db_entries(
|
||||
attempt_count: 1,
|
||||
metadata: req.metadata.clone(),
|
||||
confirm: req.confirm,
|
||||
priority: req.priority,
|
||||
..Default::default()
|
||||
};
|
||||
let payouts = db
|
||||
|
||||
@ -151,7 +151,7 @@ pub async fn construct_payout_router_data<'a, F>(
|
||||
let router_data = types::RouterData {
|
||||
flow: PhantomData,
|
||||
merchant_id: merchant_account.merchant_id.to_owned(),
|
||||
customer_id: None,
|
||||
customer_id: customer_details.to_owned().map(|c| c.customer_id),
|
||||
connector_customer: connector_customer_id,
|
||||
connector: connector_name.to_string(),
|
||||
payment_id: "".to_string(),
|
||||
@ -175,6 +175,7 @@ pub async fn construct_payout_router_data<'a, F>(
|
||||
entity_type: payouts.entity_type.to_owned(),
|
||||
payout_type: payouts.payout_type,
|
||||
vendor_details,
|
||||
priority: payouts.priority,
|
||||
customer_details: customer_details
|
||||
.to_owned()
|
||||
.map(|c| payments::CustomerDetails {
|
||||
|
||||
Reference in New Issue
Block a user