mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	fix(core): payment_method_type not set in the payment attempt when making a recurring mandate payment (#1415)
				
					
				
			Co-authored-by: Narayan Bhat <48803246+Narayanbhat166@users.noreply.github.com>
This commit is contained in:
		| @ -272,6 +272,7 @@ pub async fn get_token_pm_type_mandate_details( | ||||
| ) -> RouterResult<( | ||||
|     Option<String>, | ||||
|     Option<storage_enums::PaymentMethod>, | ||||
|     Option<storage_enums::PaymentMethodType>, | ||||
|     Option<api::MandateData>, | ||||
|     Option<String>, | ||||
| )> { | ||||
| @ -284,18 +285,27 @@ pub async fn get_token_pm_type_mandate_details( | ||||
|             Ok(( | ||||
|                 request.payment_token.to_owned(), | ||||
|                 request.payment_method.map(ForeignInto::foreign_into), | ||||
|                 request.payment_method_type.map(ForeignInto::foreign_into), | ||||
|                 Some(setup_mandate), | ||||
|                 None, | ||||
|             )) | ||||
|         } | ||||
|         Some(api::MandateTxnType::RecurringMandateTxn) => { | ||||
|             let (token_, payment_method_type_, mandate_connector) = | ||||
|             let (token_, payment_method_, payment_method_type_, mandate_connector) = | ||||
|                 get_token_for_recurring_mandate(state, request, merchant_account).await?; | ||||
|             Ok((token_, payment_method_type_, None, mandate_connector)) | ||||
|             Ok(( | ||||
|                 token_, | ||||
|                 payment_method_, | ||||
|                 payment_method_type_ | ||||
|                     .or_else(|| request.payment_method_type.map(ForeignInto::foreign_into)), | ||||
|                 None, | ||||
|                 mandate_connector, | ||||
|             )) | ||||
|         } | ||||
|         None => Ok(( | ||||
|             request.payment_token.to_owned(), | ||||
|             request.payment_method.map(ForeignInto::foreign_into), | ||||
|             request.payment_method_type.map(ForeignInto::foreign_into), | ||||
|             request.mandate_data.clone(), | ||||
|             None, | ||||
|         )), | ||||
| @ -309,6 +319,7 @@ pub async fn get_token_for_recurring_mandate( | ||||
| ) -> RouterResult<( | ||||
|     Option<String>, | ||||
|     Option<storage_enums::PaymentMethod>, | ||||
|     Option<storage_enums::PaymentMethodType>, | ||||
|     Option<String>, | ||||
| )> { | ||||
|     let db = &*state.store; | ||||
| @ -368,12 +379,14 @@ pub async fn get_token_for_recurring_mandate( | ||||
|         Ok(( | ||||
|             Some(token), | ||||
|             Some(payment_method.payment_method), | ||||
|             payment_method.payment_method_type, | ||||
|             Some(mandate.connector), | ||||
|         )) | ||||
|     } else { | ||||
|         Ok(( | ||||
|             None, | ||||
|             Some(payment_method.payment_method), | ||||
|             payment_method.payment_method_type, | ||||
|             Some(mandate.connector), | ||||
|         )) | ||||
|     } | ||||
|  | ||||
| @ -70,7 +70,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co | ||||
|             "confirm", | ||||
|         )?; | ||||
|  | ||||
|         let (token, payment_method, setup_mandate, mandate_connector) = | ||||
|         let (token, payment_method, payment_method_type, setup_mandate, mandate_connector) = | ||||
|             helpers::get_token_pm_type_mandate_details( | ||||
|                 state, | ||||
|                 request, | ||||
| @ -110,10 +110,8 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co | ||||
|  | ||||
|         payment_attempt.payment_method = payment_method.or(payment_attempt.payment_method); | ||||
|         payment_attempt.browser_info = browser_info; | ||||
|         payment_attempt.payment_method_type = request | ||||
|             .payment_method_type | ||||
|             .map(|pmt| pmt.foreign_into()) | ||||
|             .or(payment_attempt.payment_method_type); | ||||
|         payment_attempt.payment_method_type = | ||||
|             payment_method_type.or(payment_attempt.payment_method_type); | ||||
|         payment_attempt.payment_experience = request | ||||
|             .payment_experience | ||||
|             .map(|experience| experience.foreign_into()); | ||||
|  | ||||
| @ -103,7 +103,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | ||||
|             .map(ForeignInto::foreign_into) | ||||
|             .or(payment_intent.setup_future_usage); | ||||
|  | ||||
|         let (token, payment_method, setup_mandate, mandate_connector) = | ||||
|         let (token, payment_method, payment_method_type, setup_mandate, mandate_connector) = | ||||
|             helpers::get_token_pm_type_mandate_details( | ||||
|                 state, | ||||
|                 request, | ||||
| @ -138,10 +138,8 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | ||||
|  | ||||
|         payment_attempt.payment_method = payment_method.or(payment_attempt.payment_method); | ||||
|         payment_attempt.browser_info = browser_info; | ||||
|         payment_attempt.payment_method_type = request | ||||
|             .payment_method_type | ||||
|             .map(|pmt| pmt.foreign_into()) | ||||
|             .or(payment_attempt.payment_method_type); | ||||
|         payment_attempt.payment_method_type = | ||||
|             payment_method_type.or(payment_attempt.payment_method_type); | ||||
|  | ||||
|         payment_attempt.payment_experience = request | ||||
|             .payment_experience | ||||
|  | ||||
| @ -65,7 +65,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | ||||
|             .get_payment_intent_id() | ||||
|             .change_context(errors::ApiErrorResponse::PaymentNotFound)?; | ||||
|  | ||||
|         let (token, payment_method_type, setup_mandate, mandate_connector) = | ||||
|         let (token, payment_method, payment_method_type, setup_mandate, mandate_connector) = | ||||
|             helpers::get_token_pm_type_mandate_details( | ||||
|                 state, | ||||
|                 request, | ||||
| @ -111,6 +111,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | ||||
|                     &payment_id, | ||||
|                     merchant_id, | ||||
|                     money, | ||||
|                     payment_method, | ||||
|                     payment_method_type, | ||||
|                     request, | ||||
|                     browser_info, | ||||
| @ -493,6 +494,7 @@ impl PaymentCreate { | ||||
|         merchant_id: &str, | ||||
|         money: (api::Amount, enums::Currency), | ||||
|         payment_method: Option<enums::PaymentMethod>, | ||||
|         payment_method_type: Option<enums::PaymentMethodType>, | ||||
|         request: &api::PaymentsRequest, | ||||
|         browser_info: Option<serde_json::Value>, | ||||
|     ) -> RouterResult<storage::PaymentAttemptNew> { | ||||
| @ -528,7 +530,7 @@ impl PaymentCreate { | ||||
|             authentication_type: request.authentication_type.map(ForeignInto::foreign_into), | ||||
|             browser_info, | ||||
|             payment_experience: request.payment_experience.map(ForeignInto::foreign_into), | ||||
|             payment_method_type: request.payment_method_type.map(ForeignInto::foreign_into), | ||||
|             payment_method_type, | ||||
|             payment_method_data: additional_pm_data, | ||||
|             amount_to_capture: request.amount_to_capture, | ||||
|             payment_token: request.payment_token.clone(), | ||||
|  | ||||
| @ -75,7 +75,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | ||||
|             "update", | ||||
|         )?; | ||||
|  | ||||
|         let (token, payment_method_type, setup_mandate, mandate_connector) = | ||||
|         let (token, payment_method, payment_method_type, setup_mandate, mandate_connector) = | ||||
|             helpers::get_token_pm_type_mandate_details( | ||||
|                 state, | ||||
|                 request, | ||||
| @ -108,7 +108,9 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | ||||
|             None => payment_attempt.currency.get_required_value("currency")?, | ||||
|         }; | ||||
|  | ||||
|         payment_attempt.payment_method = payment_method_type.or(payment_attempt.payment_method); | ||||
|         payment_attempt.payment_method = payment_method.or(payment_attempt.payment_method); | ||||
|         payment_attempt.payment_method_type = | ||||
|             payment_method_type.or(payment_attempt.payment_method_type); | ||||
|         let customer_details = helpers::get_customer_details_from_request(request); | ||||
|  | ||||
|         let amount = request | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Pa1NarK
					Pa1NarK