fix(router): aggregate hotfixes for v0.5.10 (#1204)

Co-authored-by: Narayan Bhat <narayan.bhat@juspay.in>
Co-authored-by: Jagan Elavarasan <jaganelavarasan@gmail.com>
Co-authored-by: SamraatBansal <samraatbansal7@gmail.com>
Co-authored-by: sai-harsha-vardhan <harsha111hero@gmail.com>
Co-authored-by: Sangamesh Kulkarni <59434228+Sangamesh26@users.noreply.github.com>
This commit is contained in:
ItsMeShashank
2023-05-18 19:20:55 +05:30
committed by GitHub
parent afceda55ad
commit 9cc1ceec69
5 changed files with 35 additions and 10 deletions

View File

@ -41,7 +41,7 @@ impl From<IncomingWebhookEvent> for WebhookFlow {
IncomingWebhookEvent::PaymentIntentSuccess => Self::Payment, IncomingWebhookEvent::PaymentIntentSuccess => Self::Payment,
IncomingWebhookEvent::PaymentIntentProcessing => Self::Payment, IncomingWebhookEvent::PaymentIntentProcessing => Self::Payment,
IncomingWebhookEvent::PaymentActionRequired => Self::Payment, IncomingWebhookEvent::PaymentActionRequired => Self::Payment,
IncomingWebhookEvent::EventNotSupported => Self::Payment, IncomingWebhookEvent::EventNotSupported => Self::ReturnResponse,
IncomingWebhookEvent::RefundSuccess => Self::Refund, IncomingWebhookEvent::RefundSuccess => Self::Refund,
IncomingWebhookEvent::RefundFailure => Self::Refund, IncomingWebhookEvent::RefundFailure => Self::Refund,
IncomingWebhookEvent::DisputeOpened => Self::Dispute, IncomingWebhookEvent::DisputeOpened => Self::Dispute,

View File

@ -1125,7 +1125,7 @@ impl api::IncomingWebhook for Checkout {
&self, &self,
request: &api::IncomingWebhookRequestDetails<'_>, request: &api::IncomingWebhookRequestDetails<'_>,
) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> { ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
let details: checkout::CheckoutWebhookBody = request let details: checkout::CheckoutWebhookEventTypeBody = request
.body .body
.parse_struct("CheckoutWebhookBody") .parse_struct("CheckoutWebhookBody")
.change_context(errors::ConnectorError::WebhookEventTypeNotFound)?; .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?;

View File

@ -702,6 +702,12 @@ pub fn is_chargeback_event(event_code: &CheckoutTransactionType) -> bool {
) )
} }
#[derive(Debug, Deserialize)]
pub struct CheckoutWebhookEventTypeBody {
#[serde(rename = "type")]
pub transaction_type: CheckoutTransactionType,
}
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct CheckoutWebhookData { pub struct CheckoutWebhookData {
pub id: String, pub id: String,
@ -710,6 +716,7 @@ pub struct CheckoutWebhookData {
pub amount: i32, pub amount: i32,
pub currency: String, pub currency: String,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct CheckoutWebhookBody { pub struct CheckoutWebhookBody {
#[serde(rename = "type")] #[serde(rename = "type")]
@ -741,7 +748,10 @@ pub struct CheckoutDisputeWebhookBody {
#[derive(Debug, Deserialize, strum::Display, Clone)] #[derive(Debug, Deserialize, strum::Display, Clone)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum CheckoutTransactionType { pub enum CheckoutTransactionType {
AuthenticationStarted,
AuthenticationApproved,
PaymentApproved, PaymentApproved,
PaymentCaptured,
PaymentDeclined, PaymentDeclined,
PaymentRefunded, PaymentRefunded,
PaymentRefundDeclined, PaymentRefundDeclined,
@ -761,7 +771,10 @@ pub enum CheckoutTransactionType {
impl From<CheckoutTransactionType> for api::IncomingWebhookEvent { impl From<CheckoutTransactionType> for api::IncomingWebhookEvent {
fn from(transaction_type: CheckoutTransactionType) -> Self { fn from(transaction_type: CheckoutTransactionType) -> Self {
match transaction_type { match transaction_type {
CheckoutTransactionType::PaymentApproved => Self::PaymentIntentSuccess, CheckoutTransactionType::AuthenticationStarted => Self::EventNotSupported,
CheckoutTransactionType::AuthenticationApproved => Self::EventNotSupported,
CheckoutTransactionType::PaymentApproved => Self::EventNotSupported,
CheckoutTransactionType::PaymentCaptured => Self::PaymentIntentSuccess,
CheckoutTransactionType::PaymentDeclined => Self::PaymentIntentFailure, CheckoutTransactionType::PaymentDeclined => Self::PaymentIntentFailure,
CheckoutTransactionType::PaymentRefunded => Self::RefundSuccess, CheckoutTransactionType::PaymentRefunded => Self::RefundSuccess,
CheckoutTransactionType::PaymentRefundDeclined => Self::RefundFailure, CheckoutTransactionType::PaymentRefundDeclined => Self::RefundFailure,

View File

@ -1128,6 +1128,18 @@ pub fn connector_selection<F>(
where where
F: Send + Clone, F: Send + Clone,
{ {
if let Some(ref connector_name) = payment_data.payment_attempt.connector {
let connector_data = api::ConnectorData::get_connector_by_name(
&state.conf.connectors,
connector_name,
api::GetToken::Connector,
)
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("invalid connector name received in payment attempt")?;
return Ok(api::ConnectorCallType::Single(connector_data));
}
let mut routing_data = storage::RoutingData { let mut routing_data = storage::RoutingData {
routed_through: payment_data.payment_attempt.connector.clone(), routed_through: payment_data.payment_attempt.connector.clone(),
algorithm: payment_data algorithm: payment_data

View File

@ -26,7 +26,7 @@ use crate::{
const OUTGOING_WEBHOOK_TIMEOUT_SECS: u64 = 5; const OUTGOING_WEBHOOK_TIMEOUT_SECS: u64 = 5;
#[instrument(skip_all)] #[instrument(skip_all)]
async fn payments_incoming_webhook_flow<W: api::OutgoingWebhookType>( pub async fn payments_incoming_webhook_flow<W: api::OutgoingWebhookType>(
state: AppState, state: AppState,
merchant_account: storage::MerchantAccount, merchant_account: storage::MerchantAccount,
webhook_details: api::IncomingWebhookDetails, webhook_details: api::IncomingWebhookDetails,
@ -95,7 +95,7 @@ async fn payments_incoming_webhook_flow<W: api::OutgoingWebhookType>(
} }
#[instrument(skip_all)] #[instrument(skip_all)]
async fn refunds_incoming_webhook_flow<W: api::OutgoingWebhookType>( pub async fn refunds_incoming_webhook_flow<W: api::OutgoingWebhookType>(
state: AppState, state: AppState,
merchant_account: storage::MerchantAccount, merchant_account: storage::MerchantAccount,
webhook_details: api::IncomingWebhookDetails, webhook_details: api::IncomingWebhookDetails,
@ -196,7 +196,7 @@ async fn refunds_incoming_webhook_flow<W: api::OutgoingWebhookType>(
Ok(()) Ok(())
} }
async fn get_payment_attempt_from_object_reference_id( pub async fn get_payment_attempt_from_object_reference_id(
state: AppState, state: AppState,
object_reference_id: api_models::webhooks::ObjectReferenceId, object_reference_id: api_models::webhooks::ObjectReferenceId,
merchant_account: &storage::MerchantAccount, merchant_account: &storage::MerchantAccount,
@ -223,7 +223,7 @@ async fn get_payment_attempt_from_object_reference_id(
} }
} }
async fn get_or_update_dispute_object( pub async fn get_or_update_dispute_object(
state: AppState, state: AppState,
option_dispute: Option<storage_models::dispute::Dispute>, option_dispute: Option<storage_models::dispute::Dispute>,
dispute_details: api::disputes::DisputePayload, dispute_details: api::disputes::DisputePayload,
@ -295,7 +295,7 @@ async fn get_or_update_dispute_object(
} }
#[instrument(skip_all)] #[instrument(skip_all)]
async fn disputes_incoming_webhook_flow<W: api::OutgoingWebhookType>( pub async fn disputes_incoming_webhook_flow<W: api::OutgoingWebhookType>(
state: AppState, state: AppState,
merchant_account: storage::MerchantAccount, merchant_account: storage::MerchantAccount,
webhook_details: api::IncomingWebhookDetails, webhook_details: api::IncomingWebhookDetails,
@ -361,7 +361,7 @@ async fn disputes_incoming_webhook_flow<W: api::OutgoingWebhookType>(
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
#[instrument(skip_all)] #[instrument(skip_all)]
async fn create_event_and_trigger_outgoing_webhook<W: api::OutgoingWebhookType>( pub async fn create_event_and_trigger_outgoing_webhook<W: api::OutgoingWebhookType>(
state: AppState, state: AppState,
merchant_account: storage::MerchantAccount, merchant_account: storage::MerchantAccount,
event_type: enums::EventType, event_type: enums::EventType,
@ -413,7 +413,7 @@ async fn create_event_and_trigger_outgoing_webhook<W: api::OutgoingWebhookType>(
Ok(()) Ok(())
} }
async fn trigger_webhook_to_merchant<W: api::OutgoingWebhookType>( pub async fn trigger_webhook_to_merchant<W: api::OutgoingWebhookType>(
merchant_account: storage::MerchantAccount, merchant_account: storage::MerchantAccount,
webhook: api::OutgoingWebhook, webhook: api::OutgoingWebhook,
state: &AppState, state: &AppState,