mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-11-01 02:57:02 +08:00 
			
		
		
		
	fix(compatibility): add last_payment_error in stripe payment response (#803)
This commit is contained in:
		| @ -1,10 +1,11 @@ | |||||||
| use api_models::payments; | use api_models::payments; | ||||||
| use common_utils::{ext_traits::StringExt, pii as secret}; | use common_utils::{date_time, ext_traits::StringExt, pii as secret}; | ||||||
| use error_stack::ResultExt; | use error_stack::ResultExt; | ||||||
| use serde::{Deserialize, Serialize}; | use serde::{Deserialize, Serialize}; | ||||||
|  |  | ||||||
| use crate::{ | use crate::{ | ||||||
|     compatibility::stripe::refunds::types as stripe_refunds, |     compatibility::stripe::refunds::types as stripe_refunds, | ||||||
|  |     consts, | ||||||
|     core::errors, |     core::errors, | ||||||
|     pii::{self, PeekInterface}, |     pii::{self, PeekInterface}, | ||||||
|     types::{ |     types::{ | ||||||
| @ -295,12 +296,23 @@ pub struct StripePaymentIntentResponse { | |||||||
|     pub payment_token: Option<String>, |     pub payment_token: Option<String>, | ||||||
|     pub email: Option<masking::Secret<String, common_utils::pii::Email>>, |     pub email: Option<masking::Secret<String, common_utils::pii::Email>>, | ||||||
|     pub phone: Option<masking::Secret<String>>, |     pub phone: Option<masking::Secret<String>>, | ||||||
|     pub error_code: Option<String>, |  | ||||||
|     pub error_message: Option<String>, |  | ||||||
|     pub statement_descriptor_suffix: Option<String>, |     pub statement_descriptor_suffix: Option<String>, | ||||||
|     pub statement_descriptor_name: Option<String>, |     pub statement_descriptor_name: Option<String>, | ||||||
|     pub capture_method: Option<api_models::enums::CaptureMethod>, |     pub capture_method: Option<api_models::enums::CaptureMethod>, | ||||||
|     pub name: Option<masking::Secret<String>>, |     pub name: Option<masking::Secret<String>>, | ||||||
|  |     pub last_payment_error: Option<LastPaymentError>, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Default, Eq, PartialEq, Serialize)] | ||||||
|  | pub struct LastPaymentError { | ||||||
|  |     charge: Option<String>, | ||||||
|  |     code: Option<String>, | ||||||
|  |     decline_code: Option<String>, | ||||||
|  |     message: String, | ||||||
|  |     param: Option<String>, | ||||||
|  |     payment_method: StripePaymentMethod, | ||||||
|  |     #[serde(rename = "type")] | ||||||
|  |     error_type: String, | ||||||
| } | } | ||||||
|  |  | ||||||
| impl From<payments::PaymentsResponse> for StripePaymentIntentResponse { | impl From<payments::PaymentsResponse> for StripePaymentIntentResponse { | ||||||
| @ -328,7 +340,7 @@ impl From<payments::PaymentsResponse> for StripePaymentIntentResponse { | |||||||
|             capture_on: resp.capture_on, |             capture_on: resp.capture_on, | ||||||
|             capture_method: resp.capture_method, |             capture_method: resp.capture_method, | ||||||
|             payment_method: resp.payment_method, |             payment_method: resp.payment_method, | ||||||
|             payment_method_data: resp.payment_method_data, |             payment_method_data: resp.payment_method_data.clone(), | ||||||
|             payment_token: resp.payment_token, |             payment_token: resp.payment_token, | ||||||
|             shipping: resp.shipping, |             shipping: resp.shipping, | ||||||
|             billing: resp.billing, |             billing: resp.billing, | ||||||
| @ -340,14 +352,43 @@ impl From<payments::PaymentsResponse> for StripePaymentIntentResponse { | |||||||
|             statement_descriptor_suffix: resp.statement_descriptor_suffix, |             statement_descriptor_suffix: resp.statement_descriptor_suffix, | ||||||
|             next_action: into_stripe_next_action(resp.next_action, resp.return_url), |             next_action: into_stripe_next_action(resp.next_action, resp.return_url), | ||||||
|             cancellation_reason: resp.cancellation_reason, |             cancellation_reason: resp.cancellation_reason, | ||||||
|             error_code: resp.error_code, |  | ||||||
|             error_message: resp.error_message, |  | ||||||
|             metadata: resp.metadata, |             metadata: resp.metadata, | ||||||
|             charges: Charges::new(), |             charges: Charges::new(), | ||||||
|  |             last_payment_error: resp.error_code.map(|code| LastPaymentError { | ||||||
|  |                 charge: None, | ||||||
|  |                 code: Some(code.to_owned()), | ||||||
|  |                 decline_code: None, | ||||||
|  |                 message: resp | ||||||
|  |                     .error_message | ||||||
|  |                     .unwrap_or_else(|| consts::NO_ERROR_MESSAGE.to_string()), | ||||||
|  |                 param: None, | ||||||
|  |                 payment_method: StripePaymentMethod { | ||||||
|  |                     payment_method_id: "place_holder_id".to_string(), | ||||||
|  |                     object: "payment_method", | ||||||
|  |                     card: None, | ||||||
|  |                     created: u64::try_from(date_time::now().assume_utc().unix_timestamp()) | ||||||
|  |                         .unwrap_or_default(), | ||||||
|  |                     method_type: "card".to_string(), | ||||||
|  |                     live_mode: false, | ||||||
|  |                 }, | ||||||
|  |                 error_type: code, | ||||||
|  |             }), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[derive(Default, Eq, PartialEq, Serialize)] | ||||||
|  | pub struct StripePaymentMethod { | ||||||
|  |     #[serde(rename = "id")] | ||||||
|  |     payment_method_id: String, | ||||||
|  |     object: &'static str, | ||||||
|  |     card: Option<StripeCard>, | ||||||
|  |     created: u64, | ||||||
|  |     #[serde(rename = "type")] | ||||||
|  |     method_type: String, | ||||||
|  |     live_mode: bool, | ||||||
|  | } | ||||||
|  |  | ||||||
| #[derive(Default, Eq, PartialEq, Serialize)] | #[derive(Default, Eq, PartialEq, Serialize)] | ||||||
| pub struct Charges { | pub struct Charges { | ||||||
|     object: &'static str, |     object: &'static str, | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Abhishek
					Abhishek