mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-03 05:17:02 +08:00
fix(connector): [fiserv] fix metadata deserialization in merchant_connector_account (#2746)
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
use common_utils::ext_traits::ValueExt;
|
use common_utils::{ext_traits::ValueExt, pii};
|
||||||
use error_stack::ResultExt;
|
use error_stack::ResultExt;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@ -150,9 +150,11 @@ impl TryFrom<&FiservRouterData<&types::PaymentsAuthorizeRouterData>> for FiservP
|
|||||||
merchant_transaction_id: item.router_data.connector_request_reference_id.clone(),
|
merchant_transaction_id: item.router_data.connector_request_reference_id.clone(),
|
||||||
};
|
};
|
||||||
let metadata = item.router_data.get_connector_meta()?;
|
let metadata = item.router_data.get_connector_meta()?;
|
||||||
let session: SessionObject = metadata
|
let session: FiservSessionObject = metadata
|
||||||
.parse_value("SessionObject")
|
.parse_value("FiservSessionObject")
|
||||||
.change_context(errors::ConnectorError::RequestEncodingFailed)?;
|
.change_context(errors::ConnectorError::InvalidConnectorConfig {
|
||||||
|
config: "Merchant connector account metadata",
|
||||||
|
})?;
|
||||||
|
|
||||||
let merchant_details = MerchantDetails {
|
let merchant_details = MerchantDetails {
|
||||||
merchant_id: auth.merchant_account,
|
merchant_id: auth.merchant_account,
|
||||||
@ -230,9 +232,11 @@ impl TryFrom<&types::PaymentsCancelRouterData> for FiservCancelRequest {
|
|||||||
fn try_from(item: &types::PaymentsCancelRouterData) -> Result<Self, Self::Error> {
|
fn try_from(item: &types::PaymentsCancelRouterData) -> Result<Self, Self::Error> {
|
||||||
let auth: FiservAuthType = FiservAuthType::try_from(&item.connector_auth_type)?;
|
let auth: FiservAuthType = FiservAuthType::try_from(&item.connector_auth_type)?;
|
||||||
let metadata = item.get_connector_meta()?;
|
let metadata = item.get_connector_meta()?;
|
||||||
let session: SessionObject = metadata
|
let session: FiservSessionObject = metadata
|
||||||
.parse_value("SessionObject")
|
.parse_value("FiservSessionObject")
|
||||||
.change_context(errors::ConnectorError::RequestEncodingFailed)?;
|
.change_context(errors::ConnectorError::InvalidConnectorConfig {
|
||||||
|
config: "Merchant connector account metadata",
|
||||||
|
})?;
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
merchant_details: MerchantDetails {
|
merchant_details: MerchantDetails {
|
||||||
merchant_id: auth.merchant_account,
|
merchant_id: auth.merchant_account,
|
||||||
@ -418,11 +422,21 @@ pub struct ReferenceTransactionDetails {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
pub struct FiservSessionObject {
|
||||||
pub struct SessionObject {
|
|
||||||
pub terminal_id: String,
|
pub terminal_id: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TryFrom<&Option<pii::SecretSerdeValue>> for FiservSessionObject {
|
||||||
|
type Error = error_stack::Report<errors::ConnectorError>;
|
||||||
|
fn try_from(meta_data: &Option<pii::SecretSerdeValue>) -> Result<Self, Self::Error> {
|
||||||
|
let metadata: Self = utils::to_connector_meta_from_secret::<Self>(meta_data.clone())
|
||||||
|
.change_context(errors::ConnectorError::InvalidConnectorConfig {
|
||||||
|
config: "metadata",
|
||||||
|
})?;
|
||||||
|
Ok(metadata)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl TryFrom<&FiservRouterData<&types::PaymentsCaptureRouterData>> for FiservCaptureRequest {
|
impl TryFrom<&FiservRouterData<&types::PaymentsCaptureRouterData>> for FiservCaptureRequest {
|
||||||
type Error = error_stack::Report<errors::ConnectorError>;
|
type Error = error_stack::Report<errors::ConnectorError>;
|
||||||
fn try_from(
|
fn try_from(
|
||||||
@ -434,9 +448,11 @@ impl TryFrom<&FiservRouterData<&types::PaymentsCaptureRouterData>> for FiservCap
|
|||||||
.connector_meta_data
|
.connector_meta_data
|
||||||
.clone()
|
.clone()
|
||||||
.ok_or(errors::ConnectorError::RequestEncodingFailed)?;
|
.ok_or(errors::ConnectorError::RequestEncodingFailed)?;
|
||||||
let session: SessionObject = metadata
|
let session: FiservSessionObject = metadata
|
||||||
.parse_value("SessionObject")
|
.parse_value("FiservSessionObject")
|
||||||
.change_context(errors::ConnectorError::RequestEncodingFailed)?;
|
.change_context(errors::ConnectorError::InvalidConnectorConfig {
|
||||||
|
config: "Merchant connector account metadata",
|
||||||
|
})?;
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
amount: Amount {
|
amount: Amount {
|
||||||
total: item.amount.clone(),
|
total: item.amount.clone(),
|
||||||
@ -527,9 +543,11 @@ impl<F> TryFrom<&FiservRouterData<&types::RefundsRouterData<F>>> for FiservRefun
|
|||||||
.connector_meta_data
|
.connector_meta_data
|
||||||
.clone()
|
.clone()
|
||||||
.ok_or(errors::ConnectorError::RequestEncodingFailed)?;
|
.ok_or(errors::ConnectorError::RequestEncodingFailed)?;
|
||||||
let session: SessionObject = metadata
|
let session: FiservSessionObject = metadata
|
||||||
.parse_value("SessionObject")
|
.parse_value("FiservSessionObject")
|
||||||
.change_context(errors::ConnectorError::RequestEncodingFailed)?;
|
.change_context(errors::ConnectorError::InvalidConnectorConfig {
|
||||||
|
config: "Merchant connector account metadata",
|
||||||
|
})?;
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
amount: Amount {
|
amount: Amount {
|
||||||
total: item.amount.clone(),
|
total: item.amount.clone(),
|
||||||
|
|||||||
@ -1589,6 +1589,7 @@ pub(crate) fn validate_auth_and_metadata_type(
|
|||||||
}
|
}
|
||||||
api_enums::Connector::Fiserv => {
|
api_enums::Connector::Fiserv => {
|
||||||
fiserv::transformers::FiservAuthType::try_from(val)?;
|
fiserv::transformers::FiservAuthType::try_from(val)?;
|
||||||
|
fiserv::transformers::FiservSessionObject::try_from(connector_meta_data)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
api_enums::Connector::Forte => {
|
api_enums::Connector::Forte => {
|
||||||
|
|||||||
Reference in New Issue
Block a user