mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-03 05:17:02 +08:00
refactor(connector): add amount framework to payme & Trustpay with googlePay, ApplePay for bluesnap, Noon & Trustpay (#4833)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> Co-authored-by: Hrithikesh <61539176+hrithikesh026@users.noreply.github.com> Co-authored-by: Narayan Bhat <narayan.bhat@juspay.in>
This commit is contained in:
@ -1,6 +1,10 @@
|
||||
use api_models::payments as payment_types;
|
||||
use async_trait::async_trait;
|
||||
use common_utils::{ext_traits::ByteSliceExt, request::RequestContent};
|
||||
use common_utils::{
|
||||
ext_traits::ByteSliceExt,
|
||||
request::RequestContent,
|
||||
types::{AmountConvertor, StringMajorUnitForConnector},
|
||||
};
|
||||
use error_stack::{Report, ResultExt};
|
||||
use masking::ExposeInterface;
|
||||
use router_env::metrics::add_attributes;
|
||||
@ -403,15 +407,16 @@ fn get_apple_pay_amount_info(
|
||||
label: &str,
|
||||
session_data: types::PaymentsSessionData,
|
||||
) -> RouterResult<payment_types::AmountInfo> {
|
||||
let required_amount_type = StringMajorUnitForConnector;
|
||||
let apple_pay_amount = required_amount_type
|
||||
.convert(session_data.minor_amount, session_data.currency)
|
||||
.change_context(errors::ApiErrorResponse::PreconditionFailed {
|
||||
message: "Failed to convert amount to string major unit for applePay".to_string(),
|
||||
})?;
|
||||
let amount_info = payment_types::AmountInfo {
|
||||
label: label.to_string(),
|
||||
total_type: Some("final".to_string()),
|
||||
amount: session_data
|
||||
.currency
|
||||
.to_currency_base_unit(session_data.amount)
|
||||
.change_context(errors::ApiErrorResponse::PreconditionFailed {
|
||||
message: "Failed to convert currency to base unit".to_string(),
|
||||
})?,
|
||||
amount: apple_pay_amount,
|
||||
};
|
||||
|
||||
Ok(amount_info)
|
||||
@ -548,22 +553,21 @@ fn create_gpay_session_token(
|
||||
},
|
||||
)
|
||||
.collect();
|
||||
|
||||
let required_amount_type = StringMajorUnitForConnector;
|
||||
let google_pay_amount = required_amount_type
|
||||
.convert(
|
||||
router_data.request.minor_amount,
|
||||
router_data.request.currency,
|
||||
)
|
||||
.change_context(errors::ApiErrorResponse::PreconditionFailed {
|
||||
message: "Failed to convert amount to string major unit for googlePay".to_string(),
|
||||
})?;
|
||||
let session_data = router_data.request.clone();
|
||||
let transaction_info = payment_types::GpayTransactionInfo {
|
||||
country_code: session_data.country.unwrap_or_default(),
|
||||
currency_code: router_data.request.currency,
|
||||
total_price_status: "Final".to_string(),
|
||||
total_price: router_data
|
||||
.request
|
||||
.currency
|
||||
.to_currency_base_unit(router_data.request.amount)
|
||||
.attach_printable(
|
||||
"Cannot convert given amount to base currency denomination".to_string(),
|
||||
)
|
||||
.change_context(errors::ApiErrorResponse::InvalidDataValue {
|
||||
field_name: "amount",
|
||||
})?,
|
||||
total_price: google_pay_amount,
|
||||
};
|
||||
|
||||
let required_shipping_contact_fields =
|
||||
|
||||
@ -1556,6 +1556,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsSessionD
|
||||
|
||||
Ok(Self {
|
||||
amount: amount.get_amount_as_i64(), //need to change once we move to connector module
|
||||
minor_amount: amount,
|
||||
currency: payment_data.currency,
|
||||
country: payment_data.address.get_payment_method_billing().and_then(
|
||||
|billing_address| {
|
||||
|
||||
Reference in New Issue
Block a user