diff --git a/crates/api_models/src/subscription.rs b/crates/api_models/src/subscription.rs
index 9bde18ef04..37c1ea2bc4 100644
--- a/crates/api_models/src/subscription.rs
+++ b/crates/api_models/src/subscription.rs
@@ -232,9 +232,10 @@ pub struct ConfirmSubscriptionPaymentDetails {
pub billing: Option
,
pub payment_method: PaymentMethod,
pub payment_method_type: Option,
- pub payment_method_data: PaymentMethodDataRequest,
+ pub payment_method_data: Option,
pub customer_acceptance: Option,
pub payment_type: Option,
+ pub payment_token: Option,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
@@ -261,6 +262,7 @@ pub struct PaymentDetails {
pub capture_method: Option,
pub authentication_type: Option,
pub payment_type: Option,
+ pub payment_token: Option,
}
// Creating new type for PaymentRequest API call as usage of api_models::PaymentsRequest will result in invalid payment request during serialization
@@ -288,9 +290,10 @@ pub struct ConfirmPaymentsRequestData {
pub profile_id: Option,
pub payment_method: PaymentMethod,
pub payment_method_type: Option,
- pub payment_method_data: PaymentMethodDataRequest,
+ pub payment_method_data: Option,
pub customer_acceptance: Option,
pub payment_type: Option,
+ pub payment_token: Option,
}
#[derive(Debug, Clone, serde::Serialize, ToSchema)]
@@ -313,6 +316,7 @@ pub struct CreateAndConfirmPaymentsRequestData {
pub payment_method_data: Option,
pub customer_acceptance: Option,
pub payment_type: Option,
+ pub payment_token: Option,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
@@ -340,6 +344,7 @@ pub struct PaymentResponseData {
pub billing: Option,
pub shipping: Option,
pub payment_type: Option,
+ pub payment_token: Option,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
@@ -367,10 +372,9 @@ impl ConfirmSubscriptionRequest {
pub fn get_billing_address(&self) -> Option {
self.payment_details
.payment_method_data
- .billing
.as_ref()
- .or(self.payment_details.billing.as_ref())
- .cloned()
+ .and_then(|data| data.billing.clone())
+ .or(self.payment_details.billing.clone())
}
}
diff --git a/crates/subscriptions/src/core.rs b/crates/subscriptions/src/core.rs
index d86d7ad9f9..c2b79869a5 100644
--- a/crates/subscriptions/src/core.rs
+++ b/crates/subscriptions/src/core.rs
@@ -368,8 +368,8 @@ pub async fn confirm_subscription(
request
.payment_details
.payment_method_data
- .payment_method_data
- .clone(),
+ .as_ref()
+ .and_then(|data| data.payment_method_data.clone()),
)
.await?;
let _customer_updated_response = SubscriptionHandler::update_connector_customer_id_in_customer(
diff --git a/crates/subscriptions/src/core/invoice_handler.rs b/crates/subscriptions/src/core/invoice_handler.rs
index 4208b05ab2..051e0910e0 100644
--- a/crates/subscriptions/src/core/invoice_handler.rs
+++ b/crates/subscriptions/src/core/invoice_handler.rs
@@ -182,6 +182,7 @@ impl InvoiceHandler {
payment_method_data: payment_details.payment_method_data.clone(),
customer_acceptance: payment_details.customer_acceptance.clone(),
payment_type: payment_details.payment_type,
+ payment_token: payment_details.payment_token.clone(),
};
payments_api_client::PaymentsApiClient::create_and_confirm_payment(
state,
@@ -208,6 +209,7 @@ impl InvoiceHandler {
payment_method_data: payment_details.payment_method_data.clone(),
customer_acceptance: payment_details.customer_acceptance.clone(),
payment_type: payment_details.payment_type,
+ payment_token: payment_details.payment_token.clone(),
};
payments_api_client::PaymentsApiClient::confirm_payment(
state,