mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 17:47:54 +08:00
fix(connector): [Stripe] Deserialization Error while parsing Dispute Webhook Body (#3256)
Co-authored-by: Arjun Karthik <m.arjunkarthik@gmail.com>
This commit is contained in:
@ -1858,10 +1858,15 @@ impl api::IncomingWebhook for Stripe {
|
|||||||
|
|
||||||
Ok(match details.event_data.event_object.object {
|
Ok(match details.event_data.event_object.object {
|
||||||
stripe::WebhookEventObjectType::PaymentIntent => {
|
stripe::WebhookEventObjectType::PaymentIntent => {
|
||||||
match details.event_data.event_object.metadata {
|
match details
|
||||||
|
.event_data
|
||||||
|
.event_object
|
||||||
|
.metadata
|
||||||
|
.and_then(|meta_data| meta_data.order_id)
|
||||||
|
{
|
||||||
// if order_id is present
|
// if order_id is present
|
||||||
Some(meta_data) => api_models::webhooks::ObjectReferenceId::PaymentId(
|
Some(order_id) => api_models::webhooks::ObjectReferenceId::PaymentId(
|
||||||
api_models::payments::PaymentIdType::PaymentAttemptId(meta_data.order_id),
|
api_models::payments::PaymentIdType::PaymentAttemptId(order_id),
|
||||||
),
|
),
|
||||||
// else used connector_transaction_id
|
// else used connector_transaction_id
|
||||||
None => api_models::webhooks::ObjectReferenceId::PaymentId(
|
None => api_models::webhooks::ObjectReferenceId::PaymentId(
|
||||||
@ -1872,10 +1877,15 @@ impl api::IncomingWebhook for Stripe {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stripe::WebhookEventObjectType::Charge => {
|
stripe::WebhookEventObjectType::Charge => {
|
||||||
match details.event_data.event_object.metadata {
|
match details
|
||||||
|
.event_data
|
||||||
|
.event_object
|
||||||
|
.metadata
|
||||||
|
.and_then(|meta_data| meta_data.order_id)
|
||||||
|
{
|
||||||
// if order_id is present
|
// if order_id is present
|
||||||
Some(meta_data) => api_models::webhooks::ObjectReferenceId::PaymentId(
|
Some(order_id) => api_models::webhooks::ObjectReferenceId::PaymentId(
|
||||||
api_models::payments::PaymentIdType::PaymentAttemptId(meta_data.order_id),
|
api_models::payments::PaymentIdType::PaymentAttemptId(order_id),
|
||||||
),
|
),
|
||||||
// else used connector_transaction_id
|
// else used connector_transaction_id
|
||||||
None => api_models::webhooks::ObjectReferenceId::PaymentId(
|
None => api_models::webhooks::ObjectReferenceId::PaymentId(
|
||||||
@ -1908,14 +1918,25 @@ impl api::IncomingWebhook for Stripe {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
stripe::WebhookEventObjectType::Refund => {
|
stripe::WebhookEventObjectType::Refund => {
|
||||||
match details.event_data.event_object.metadata {
|
match details
|
||||||
|
.event_data
|
||||||
|
.event_object
|
||||||
|
.metadata
|
||||||
|
.clone()
|
||||||
|
.and_then(|meta_data| meta_data.order_id)
|
||||||
|
{
|
||||||
// if meta_data is present
|
// if meta_data is present
|
||||||
Some(meta_data) => {
|
Some(order_id) => {
|
||||||
// Issue: 2076
|
// Issue: 2076
|
||||||
match meta_data.is_refund_id_as_reference {
|
match details
|
||||||
|
.event_data
|
||||||
|
.event_object
|
||||||
|
.metadata
|
||||||
|
.and_then(|meta_data| meta_data.is_refund_id_as_reference)
|
||||||
|
{
|
||||||
// if the order_id is refund_id
|
// if the order_id is refund_id
|
||||||
Some(_) => api_models::webhooks::ObjectReferenceId::RefundId(
|
Some(_) => api_models::webhooks::ObjectReferenceId::RefundId(
|
||||||
api_models::webhooks::RefundIdType::RefundId(meta_data.order_id),
|
api_models::webhooks::RefundIdType::RefundId(order_id),
|
||||||
),
|
),
|
||||||
// if the order_id is payment_id
|
// if the order_id is payment_id
|
||||||
// since payment_id was being passed before the deployment of this pr
|
// since payment_id was being passed before the deployment of this pr
|
||||||
|
|||||||
@ -135,7 +135,7 @@ pub struct PaymentIntentRequest {
|
|||||||
pub struct StripeMetadata {
|
pub struct StripeMetadata {
|
||||||
// merchant_reference_id
|
// merchant_reference_id
|
||||||
#[serde(rename(serialize = "metadata[order_id]"))]
|
#[serde(rename(serialize = "metadata[order_id]"))]
|
||||||
pub order_id: String,
|
pub order_id: Option<String>,
|
||||||
// to check whether the order_id is refund_id or payemnt_id
|
// to check whether the order_id is refund_id or payemnt_id
|
||||||
// before deployment, order id is set to payemnt_id in refunds but now it is set as refund_id
|
// before deployment, order id is set to payemnt_id in refunds but now it is set as refund_id
|
||||||
// it is set as string instead of bool because stripe pass it as string even if we set it as bool
|
// it is set as string instead of bool because stripe pass it as string even if we set it as bool
|
||||||
@ -1861,7 +1861,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for PaymentIntentRequest {
|
|||||||
statement_descriptor_suffix: item.request.statement_descriptor_suffix.clone(),
|
statement_descriptor_suffix: item.request.statement_descriptor_suffix.clone(),
|
||||||
statement_descriptor: item.request.statement_descriptor.clone(),
|
statement_descriptor: item.request.statement_descriptor.clone(),
|
||||||
meta_data: StripeMetadata {
|
meta_data: StripeMetadata {
|
||||||
order_id,
|
order_id: Some(order_id),
|
||||||
is_refund_id_as_reference: None,
|
is_refund_id_as_reference: None,
|
||||||
},
|
},
|
||||||
return_url: item
|
return_url: item
|
||||||
@ -2696,7 +2696,7 @@ impl<F> TryFrom<&types::RefundsRouterData<F>> for RefundRequest {
|
|||||||
amount: Some(amount),
|
amount: Some(amount),
|
||||||
payment_intent,
|
payment_intent,
|
||||||
meta_data: StripeMetadata {
|
meta_data: StripeMetadata {
|
||||||
order_id: item.request.refund_id.clone(),
|
order_id: Some(item.request.refund_id.clone()),
|
||||||
is_refund_id_as_reference: Some("true".to_string()),
|
is_refund_id_as_reference: Some("true".to_string()),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -3203,7 +3203,7 @@ pub struct WebhookPaymentMethodDetails {
|
|||||||
pub payment_method: WebhookPaymentMethodType,
|
pub payment_method: WebhookPaymentMethodType,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
pub struct WebhookEventObjectData {
|
pub struct WebhookEventObjectData {
|
||||||
pub id: String,
|
pub id: String,
|
||||||
pub object: WebhookEventObjectType,
|
pub object: WebhookEventObjectType,
|
||||||
@ -3218,7 +3218,7 @@ pub struct WebhookEventObjectData {
|
|||||||
pub metadata: Option<StripeMetadata>,
|
pub metadata: Option<StripeMetadata>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, strum::Display)]
|
#[derive(Debug, Clone, Deserialize, strum::Display)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum WebhookEventObjectType {
|
pub enum WebhookEventObjectType {
|
||||||
PaymentIntent,
|
PaymentIntent,
|
||||||
@ -3280,7 +3280,7 @@ pub enum WebhookEventType {
|
|||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, strum::Display, Deserialize, PartialEq)]
|
#[derive(Debug, Clone, Serialize, strum::Display, Deserialize, PartialEq)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum WebhookEventStatus {
|
pub enum WebhookEventStatus {
|
||||||
WarningNeedsResponse,
|
WarningNeedsResponse,
|
||||||
@ -3304,7 +3304,7 @@ pub enum WebhookEventStatus {
|
|||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, PartialEq)]
|
#[derive(Debug, Clone, Deserialize, PartialEq)]
|
||||||
pub struct EvidenceDetails {
|
pub struct EvidenceDetails {
|
||||||
#[serde(with = "common_utils::custom_serde::timestamp")]
|
#[serde(with = "common_utils::custom_serde::timestamp")]
|
||||||
pub due_by: PrimitiveDateTime,
|
pub due_by: PrimitiveDateTime,
|
||||||
|
|||||||
Reference in New Issue
Block a user