diff --git a/crates/common_utils/src/access_token.rs b/crates/common_utils/src/access_token.rs
index 20bac0dafb..56c2a4f784 100644
--- a/crates/common_utils/src/access_token.rs
+++ b/crates/common_utils/src/access_token.rs
@@ -5,7 +5,7 @@ use std::fmt::Display;
/// Create a key for fetching the access token from redis
pub fn create_access_token_key(
merchant_id: impl Display,
- merchant_connector_id: impl Display,
+ merchant_connector_id_or_connector_name: impl Display,
) -> String {
- format!("access_token_{merchant_id}_{merchant_connector_id}")
+ format!("access_token_{merchant_id}_{merchant_connector_id_or_connector_name}")
}
diff --git a/crates/router/src/core/payments/access_token.rs b/crates/router/src/core/payments/access_token.rs
index 49d27d8150..1de9cb60ca 100644
--- a/crates/router/src/core/payments/access_token.rs
+++ b/crates/router/src/core/payments/access_token.rs
@@ -64,14 +64,20 @@ pub async fn add_access_token<
{
let merchant_id = &merchant_account.merchant_id;
let store = &*state.store;
- let merchant_connector_id = connector
+
+ // `merchant_connector_id` may not be present in the below cases
+ // - when straight through routing is used without passing the `merchant_connector_id`
+ // - when creds identifier is passed
+ //
+ // In these cases fallback to `connector_name`.
+ // We cannot use multiple merchant connector account in these cases
+ let merchant_connector_id_or_connector_name = connector
.merchant_connector_id
- .as_ref()
- .ok_or(errors::ApiErrorResponse::InternalServerError)
- .attach_printable("Missing merchant_connector_id in ConnectorData")?;
+ .clone()
+ .unwrap_or(connector.connector_name.to_string());
let old_access_token = store
- .get_access_token(merchant_id, merchant_connector_id)
+ .get_access_token(merchant_id, &merchant_connector_id_or_connector_name)
.await
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("DB error when accessing the access token")?;
@@ -115,7 +121,7 @@ pub async fn add_access_token<
if let Err(access_token_set_error) = store
.set_access_token(
merchant_id,
- merchant_connector_id.as_str(),
+ &merchant_connector_id_or_connector_name,
access_token.clone(),
)
.await
diff --git a/crates/router/src/db/merchant_connector_account.rs b/crates/router/src/db/merchant_connector_account.rs
index 06d1e505c6..8f50f5f542 100644
--- a/crates/router/src/db/merchant_connector_account.rs
+++ b/crates/router/src/db/merchant_connector_account.rs
@@ -24,13 +24,13 @@ pub trait ConnectorAccessToken {
async fn get_access_token(
&self,
merchant_id: &str,
- merchant_connector_id: &str,
+ merchant_connector_id_or_connector_name: &str,
) -> CustomResult