mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +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 { | ||||
|             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 | ||||
|                     Some(meta_data) => api_models::webhooks::ObjectReferenceId::PaymentId( | ||||
|                         api_models::payments::PaymentIdType::PaymentAttemptId(meta_data.order_id), | ||||
|                     Some(order_id) => api_models::webhooks::ObjectReferenceId::PaymentId( | ||||
|                         api_models::payments::PaymentIdType::PaymentAttemptId(order_id), | ||||
|                     ), | ||||
|                     // else used connector_transaction_id | ||||
|                     None => api_models::webhooks::ObjectReferenceId::PaymentId( | ||||
| @ -1872,10 +1877,15 @@ impl api::IncomingWebhook for Stripe { | ||||
|                 } | ||||
|             } | ||||
|             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 | ||||
|                     Some(meta_data) => api_models::webhooks::ObjectReferenceId::PaymentId( | ||||
|                         api_models::payments::PaymentIdType::PaymentAttemptId(meta_data.order_id), | ||||
|                     Some(order_id) => api_models::webhooks::ObjectReferenceId::PaymentId( | ||||
|                         api_models::payments::PaymentIdType::PaymentAttemptId(order_id), | ||||
|                     ), | ||||
|                     // else used connector_transaction_id | ||||
|                     None => api_models::webhooks::ObjectReferenceId::PaymentId( | ||||
| @ -1908,14 +1918,25 @@ impl api::IncomingWebhook for Stripe { | ||||
|                 ) | ||||
|             } | ||||
|             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 | ||||
|                     Some(meta_data) => { | ||||
|                     Some(order_id) => { | ||||
|                         // 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 | ||||
|                             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 | ||||
|                             // since payment_id was being passed before the deployment of this pr | ||||
|  | ||||
| @ -135,7 +135,7 @@ pub struct PaymentIntentRequest { | ||||
| pub struct StripeMetadata { | ||||
|     // merchant_reference_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 | ||||
|     // 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 | ||||
| @ -1861,7 +1861,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for PaymentIntentRequest { | ||||
|             statement_descriptor_suffix: item.request.statement_descriptor_suffix.clone(), | ||||
|             statement_descriptor: item.request.statement_descriptor.clone(), | ||||
|             meta_data: StripeMetadata { | ||||
|                 order_id, | ||||
|                 order_id: Some(order_id), | ||||
|                 is_refund_id_as_reference: None, | ||||
|             }, | ||||
|             return_url: item | ||||
| @ -2696,7 +2696,7 @@ impl<F> TryFrom<&types::RefundsRouterData<F>> for RefundRequest { | ||||
|             amount: Some(amount), | ||||
|             payment_intent, | ||||
|             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()), | ||||
|             }, | ||||
|         }) | ||||
| @ -3203,7 +3203,7 @@ pub struct WebhookPaymentMethodDetails { | ||||
|     pub payment_method: WebhookPaymentMethodType, | ||||
| } | ||||
|  | ||||
| #[derive(Debug, Deserialize)] | ||||
| #[derive(Debug, Clone, Deserialize)] | ||||
| pub struct WebhookEventObjectData { | ||||
|     pub id: String, | ||||
|     pub object: WebhookEventObjectType, | ||||
| @ -3218,7 +3218,7 @@ pub struct WebhookEventObjectData { | ||||
|     pub metadata: Option<StripeMetadata>, | ||||
| } | ||||
|  | ||||
| #[derive(Debug, Deserialize, strum::Display)] | ||||
| #[derive(Debug, Clone, Deserialize, strum::Display)] | ||||
| #[serde(rename_all = "snake_case")] | ||||
| pub enum WebhookEventObjectType { | ||||
|     PaymentIntent, | ||||
| @ -3280,7 +3280,7 @@ pub enum WebhookEventType { | ||||
|     Unknown, | ||||
| } | ||||
|  | ||||
| #[derive(Debug, Serialize, strum::Display, Deserialize, PartialEq)] | ||||
| #[derive(Debug, Clone, Serialize, strum::Display, Deserialize, PartialEq)] | ||||
| #[serde(rename_all = "snake_case")] | ||||
| pub enum WebhookEventStatus { | ||||
|     WarningNeedsResponse, | ||||
| @ -3304,7 +3304,7 @@ pub enum WebhookEventStatus { | ||||
|     Unknown, | ||||
| } | ||||
|  | ||||
| #[derive(Debug, Deserialize, PartialEq)] | ||||
| #[derive(Debug, Clone, Deserialize, PartialEq)] | ||||
| pub struct EvidenceDetails { | ||||
|     #[serde(with = "common_utils::custom_serde::timestamp")] | ||||
|     pub due_by: PrimitiveDateTime, | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Sakil Mostak
					Sakil Mostak