mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-29 00:49:42 +08:00 
			
		
		
		
	refactor(request_body): Added FRM data in payment request (#7615)
This commit is contained in:
		| @ -142,6 +142,8 @@ pub struct AdditionalData { | ||||
|     funds_availability: Option<String>, | ||||
|     refusal_reason_raw: Option<String>, | ||||
|     refusal_code_raw: Option<String>, | ||||
|     #[serde(flatten)] | ||||
|     riskdata: Option<RiskData>, | ||||
| } | ||||
|  | ||||
| #[serde_with::skip_serializing_none] | ||||
| @ -176,6 +178,82 @@ pub struct LineItem { | ||||
|     quantity: Option<u16>, | ||||
| } | ||||
|  | ||||
| #[serde_with::skip_serializing_none] | ||||
| #[derive(Clone, Default, Debug, Serialize, Deserialize)] | ||||
| #[serde(rename_all = "camelCase")] | ||||
| pub struct RiskData { | ||||
|     #[serde(rename = "riskdata.basket.item1.itemID")] | ||||
|     item_i_d: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.productTitle")] | ||||
|     product_title: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.amountPerItem")] | ||||
|     amount_per_item: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.currency")] | ||||
|     currency: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.upc")] | ||||
|     upc: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.brand")] | ||||
|     brand: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.manufacturer")] | ||||
|     manufacturer: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.category")] | ||||
|     category: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.quantity")] | ||||
|     quantity: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.color")] | ||||
|     color: Option<String>, | ||||
|     #[serde(rename = "riskdata.basket.item1.size")] | ||||
|     size: Option<String>, | ||||
|     #[serde(rename = "riskdata.deviceCountry")] | ||||
|     device_country: Option<String>, | ||||
|     #[serde(rename = "riskdata.houseNumberorName")] | ||||
|     house_numberor_name: Option<String>, | ||||
|     #[serde(rename = "riskdata.accountCreationDate")] | ||||
|     account_creation_date: Option<String>, | ||||
|     #[serde(rename = "riskdata.affiliateChannel")] | ||||
|     affiliate_channel: Option<String>, | ||||
|     #[serde(rename = "riskdata.avgOrderValue")] | ||||
|     avg_order_value: Option<String>, | ||||
|     #[serde(rename = "riskdata.deliveryMethod")] | ||||
|     delivery_method: Option<String>, | ||||
|     #[serde(rename = "riskdata.emailName")] | ||||
|     email_name: Option<String>, | ||||
|     #[serde(rename = "riskdata.emailDomain")] | ||||
|     email_domain: Option<String>, | ||||
|     #[serde(rename = "riskdata.lastOrderDate")] | ||||
|     last_order_date: Option<String>, | ||||
|     #[serde(rename = "riskdata.merchantReference")] | ||||
|     merchant_reference: Option<String>, | ||||
|     #[serde(rename = "riskdata.paymentMethod")] | ||||
|     payment_method: Option<String>, | ||||
|     #[serde(rename = "riskdata.promotionName")] | ||||
|     promotion_name: Option<String>, | ||||
|     #[serde(rename = "riskdata.secondaryPhoneNumber")] | ||||
|     secondary_phone_number: Option<String>, | ||||
|     #[serde(rename = "riskdata.timefromLogintoOrder")] | ||||
|     timefrom_loginto_order: Option<String>, | ||||
|     #[serde(rename = "riskdata.totalSessionTime")] | ||||
|     total_session_time: Option<String>, | ||||
|     #[serde(rename = "riskdata.totalAuthorizedAmountInLast30Days")] | ||||
|     total_authorized_amount_in_last30_days: Option<String>, | ||||
|     #[serde(rename = "riskdata.totalOrderQuantity")] | ||||
|     total_order_quantity: Option<String>, | ||||
|     #[serde(rename = "riskdata.totalLifetimeValue")] | ||||
|     total_lifetime_value: Option<String>, | ||||
|     #[serde(rename = "riskdata.visitsMonth")] | ||||
|     visits_month: Option<String>, | ||||
|     #[serde(rename = "riskdata.visitsWeek")] | ||||
|     visits_week: Option<String>, | ||||
|     #[serde(rename = "riskdata.visitsYear")] | ||||
|     visits_year: Option<String>, | ||||
|     #[serde(rename = "riskdata.shipToName")] | ||||
|     ship_to_name: Option<String>, | ||||
|     #[serde(rename = "riskdata.first8charactersofAddressLine1Zip")] | ||||
|     first8charactersof_address_line1_zip: Option<String>, | ||||
|     #[serde(rename = "riskdata.affiliateOrder")] | ||||
|     affiliate_order: Option<bool>, | ||||
| } | ||||
|  | ||||
| #[serde_with::skip_serializing_none] | ||||
| #[derive(Debug, Serialize)] | ||||
| #[serde(rename_all = "camelCase")] | ||||
| @ -205,10 +283,10 @@ pub struct AdyenPaymentRequest<'a> { | ||||
|     country_code: Option<enums::CountryAlpha2>, | ||||
|     line_items: Option<Vec<LineItem>>, | ||||
|     channel: Option<Channel>, | ||||
|     metadata: Option<common_utils::pii::SecretSerdeValue>, | ||||
|     merchant_order_reference: Option<String>, | ||||
|     splits: Option<Vec<AdyenSplitData>>, | ||||
|     store: Option<String>, | ||||
|     device_fingerprint: Option<Secret<String>>, | ||||
| } | ||||
|  | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| @ -1745,12 +1823,18 @@ fn get_additional_data(item: &PaymentsAuthorizeRouterData) -> Option<AdditionalD | ||||
|         } | ||||
|         _ => (None, None), | ||||
|     }; | ||||
|     let riskdata = item.request.metadata.clone().and_then(get_risk_data); | ||||
|  | ||||
|     let execute_three_d = if matches!(item.auth_type, storage_enums::AuthenticationType::ThreeDs) { | ||||
|         Some("true".to_string()) | ||||
|     } else { | ||||
|         None | ||||
|     }; | ||||
|     if authorisation_type.is_none() && manual_capture.is_none() && execute_three_d.is_none() { | ||||
|     if authorisation_type.is_none() | ||||
|         && manual_capture.is_none() | ||||
|         && execute_three_d.is_none() | ||||
|         && riskdata.is_none() | ||||
|     { | ||||
|         //without this if-condition when the above 3 values are None, additionalData will be serialized to JSON like this -> additionalData: {} | ||||
|         //returning None, ensures that additionalData key will not be present in the serialized JSON | ||||
|         None | ||||
| @ -1763,6 +1847,7 @@ fn get_additional_data(item: &PaymentsAuthorizeRouterData) -> Option<AdditionalD | ||||
|             recurring_detail_reference: None, | ||||
|             recurring_shopper_reference: None, | ||||
|             recurring_processing_model: None, | ||||
|             riskdata, | ||||
|             ..AdditionalData::default() | ||||
|         }) | ||||
|     } | ||||
| @ -2478,6 +2563,103 @@ impl TryFrom<&CardRedirectData> for AdyenPaymentMethod<'_> { | ||||
|     } | ||||
| } | ||||
|  | ||||
| fn get_str(key: &str, riskdata: &serde_json::Value) -> Option<String> { | ||||
|     riskdata | ||||
|         .get(key) | ||||
|         .and_then(|v| v.as_str()) | ||||
|         .map(|s| s.to_string()) | ||||
| } | ||||
|  | ||||
| fn get_bool(key: &str, riskdata: &serde_json::Value) -> Option<bool> { | ||||
|     riskdata.get(key).and_then(|v| v.as_bool()) | ||||
| } | ||||
|  | ||||
| pub fn get_risk_data(metadata: serde_json::Value) -> Option<RiskData> { | ||||
|     let item_i_d = get_str("riskdata.basket.item1.itemID", &metadata); | ||||
|     let product_title = get_str("riskdata.basket.item1.productTitle", &metadata); | ||||
|     let amount_per_item = get_str("riskdata.basket.item1.amountPerItem", &metadata); | ||||
|     let currency = get_str("riskdata.basket.item1.currency", &metadata); | ||||
|     let upc = get_str("riskdata.basket.item1.upc", &metadata); | ||||
|     let brand = get_str("riskdata.basket.item1.brand", &metadata); | ||||
|     let manufacturer = get_str("riskdata.basket.item1.manufacturer", &metadata); | ||||
|     let category = get_str("riskdata.basket.item1.category", &metadata); | ||||
|     let quantity = get_str("riskdata.basket.item1.quantity", &metadata); | ||||
|     let color = get_str("riskdata.basket.item1.color", &metadata); | ||||
|     let size = get_str("riskdata.basket.item1.size", &metadata); | ||||
|  | ||||
|     let device_country = get_str("riskdata.deviceCountry", &metadata); | ||||
|     let house_numberor_name = get_str("riskdata.houseNumberorName", &metadata); | ||||
|     let account_creation_date = get_str("riskdata.accountCreationDate", &metadata); | ||||
|     let affiliate_channel = get_str("riskdata.affiliateChannel", &metadata); | ||||
|     let avg_order_value = get_str("riskdata.avgOrderValue", &metadata); | ||||
|     let delivery_method = get_str("riskdata.deliveryMethod", &metadata); | ||||
|     let email_name = get_str("riskdata.emailName", &metadata); | ||||
|     let email_domain = get_str("riskdata.emailDomain", &metadata); | ||||
|     let last_order_date = get_str("riskdata.lastOrderDate", &metadata); | ||||
|     let merchant_reference = get_str("riskdata.merchantReference", &metadata); | ||||
|     let payment_method = get_str("riskdata.paymentMethod", &metadata); | ||||
|     let promotion_name = get_str("riskdata.promotionName", &metadata); | ||||
|     let secondary_phone_number = get_str("riskdata.secondaryPhoneNumber", &metadata); | ||||
|     let timefrom_loginto_order = get_str("riskdata.timefromLogintoOrder", &metadata); | ||||
|     let total_session_time = get_str("riskdata.totalSessionTime", &metadata); | ||||
|     let total_authorized_amount_in_last30_days = | ||||
|         get_str("riskdata.totalAuthorizedAmountInLast30Days", &metadata); | ||||
|     let total_order_quantity = get_str("riskdata.totalOrderQuantity", &metadata); | ||||
|     let total_lifetime_value = get_str("riskdata.totalLifetimeValue", &metadata); | ||||
|     let visits_month = get_str("riskdata.visitsMonth", &metadata); | ||||
|     let visits_week = get_str("riskdata.visitsWeek", &metadata); | ||||
|     let visits_year = get_str("riskdata.visitsYear", &metadata); | ||||
|     let ship_to_name = get_str("riskdata.shipToName", &metadata); | ||||
|     let first8charactersof_address_line1_zip = | ||||
|         get_str("riskdata.first8charactersofAddressLine1Zip", &metadata); | ||||
|     let affiliate_order = get_bool("riskdata.affiliateOrder", &metadata); | ||||
|  | ||||
|     Some(RiskData { | ||||
|         item_i_d, | ||||
|         product_title, | ||||
|         amount_per_item, | ||||
|         currency, | ||||
|         upc, | ||||
|         brand, | ||||
|         manufacturer, | ||||
|         category, | ||||
|         quantity, | ||||
|         color, | ||||
|         size, | ||||
|         device_country, | ||||
|         house_numberor_name, | ||||
|         account_creation_date, | ||||
|         affiliate_channel, | ||||
|         avg_order_value, | ||||
|         delivery_method, | ||||
|         email_name, | ||||
|         email_domain, | ||||
|         last_order_date, | ||||
|         merchant_reference, | ||||
|         payment_method, | ||||
|         promotion_name, | ||||
|         secondary_phone_number, | ||||
|         timefrom_loginto_order, | ||||
|         total_session_time, | ||||
|         total_authorized_amount_in_last30_days, | ||||
|         total_order_quantity, | ||||
|         total_lifetime_value, | ||||
|         visits_month, | ||||
|         visits_week, | ||||
|         visits_year, | ||||
|         ship_to_name, | ||||
|         first8charactersof_address_line1_zip, | ||||
|         affiliate_order, | ||||
|     }) | ||||
| } | ||||
|  | ||||
| fn get_device_fingerprint(metadata: serde_json::Value) -> Option<Secret<String>> { | ||||
|     metadata | ||||
|         .get("device_fingerprint") | ||||
|         .and_then(|value| value.as_str()) | ||||
|         .map(|fingerprint| Secret::new(fingerprint.to_string())) | ||||
| } | ||||
|  | ||||
| impl | ||||
|     TryFrom<( | ||||
|         &AdyenRouterData<&PaymentsAuthorizeRouterData>, | ||||
| @ -2630,6 +2812,19 @@ impl | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let billing_address = | ||||
|             get_address_info(item.router_data.get_optional_billing()).and_then(Result::ok); | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         Ok(AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -2641,13 +2836,13 @@ impl | ||||
|             browser_info, | ||||
|             additional_data, | ||||
|             mpi_data: None, | ||||
|             telephone_number: None, | ||||
|             telephone_number, | ||||
|             shopper_name: None, | ||||
|             shopper_email: None, | ||||
|             shopper_locale: None, | ||||
|             social_security_number: None, | ||||
|             billing_address: None, | ||||
|             delivery_address: None, | ||||
|             billing_address, | ||||
|             delivery_address, | ||||
|             country_code: None, | ||||
|             line_items: None, | ||||
|             shopper_reference, | ||||
| @ -2655,10 +2850,10 @@ impl | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -2697,6 +2892,17 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &Card)> for AdyenP | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         Ok(AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -2708,13 +2914,13 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &Card)> for AdyenP | ||||
|             browser_info, | ||||
|             additional_data, | ||||
|             mpi_data: None, | ||||
|             telephone_number: None, | ||||
|             telephone_number, | ||||
|             shopper_name, | ||||
|             shopper_email, | ||||
|             shopper_locale: None, | ||||
|             social_security_number: None, | ||||
|             billing_address, | ||||
|             delivery_address: None, | ||||
|             delivery_address, | ||||
|             country_code, | ||||
|             line_items: None, | ||||
|             shopper_reference, | ||||
| @ -2722,10 +2928,10 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &Card)> for AdyenP | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -2764,6 +2970,20 @@ impl | ||||
|             )) => get_adyen_split_request(adyen_split_payment, item.router_data.request.currency), | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let billing_address = | ||||
|             get_address_info(item.router_data.get_optional_billing()).and_then(Result::ok); | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         let request = AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -2779,9 +2999,9 @@ impl | ||||
|             shopper_locale: None, | ||||
|             shopper_email: item.router_data.get_optional_billing_email(), | ||||
|             social_security_number: None, | ||||
|             telephone_number: None, | ||||
|             billing_address: None, | ||||
|             delivery_address: None, | ||||
|             telephone_number, | ||||
|             billing_address, | ||||
|             delivery_address, | ||||
|             country_code, | ||||
|             line_items: None, | ||||
|             shopper_reference, | ||||
| @ -2789,10 +3009,10 @@ impl | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }; | ||||
|         Ok(request) | ||||
|     } | ||||
| @ -2828,6 +3048,17 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &VoucherData)> | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         let request = AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -2843,9 +3074,9 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &VoucherData)> | ||||
|             shopper_email: item.router_data.get_optional_billing_email(), | ||||
|             social_security_number, | ||||
|             mpi_data: None, | ||||
|             telephone_number: None, | ||||
|             telephone_number, | ||||
|             billing_address, | ||||
|             delivery_address: None, | ||||
|             delivery_address, | ||||
|             country_code: None, | ||||
|             line_items: None, | ||||
|             shopper_reference: None, | ||||
| @ -2853,10 +3084,10 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &VoucherData)> | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }; | ||||
|         Ok(request) | ||||
|     } | ||||
| @ -2891,6 +3122,19 @@ impl | ||||
|             )) => get_adyen_split_request(adyen_split_payment, item.router_data.request.currency), | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|         let billing_address = | ||||
|             get_address_info(item.router_data.get_optional_billing()).and_then(Result::ok); | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         let request = AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -2906,9 +3150,9 @@ impl | ||||
|             shopper_locale: None, | ||||
|             shopper_email: item.router_data.get_optional_billing_email(), | ||||
|             social_security_number: None, | ||||
|             telephone_number: None, | ||||
|             billing_address: None, | ||||
|             delivery_address: None, | ||||
|             telephone_number, | ||||
|             billing_address, | ||||
|             delivery_address, | ||||
|             country_code: None, | ||||
|             line_items: None, | ||||
|             shopper_reference: None, | ||||
| @ -2916,10 +3160,10 @@ impl | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }; | ||||
|         Ok(request) | ||||
|     } | ||||
| @ -2954,6 +3198,19 @@ impl | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let billing_address = | ||||
|             get_address_info(item.router_data.get_optional_billing()).and_then(Result::ok); | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         let request = AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -2968,9 +3225,9 @@ impl | ||||
|             shopper_name: None, | ||||
|             shopper_locale: None, | ||||
|             shopper_email: item.router_data.get_optional_billing_email(), | ||||
|             telephone_number: None, | ||||
|             billing_address: None, | ||||
|             delivery_address: None, | ||||
|             telephone_number, | ||||
|             billing_address, | ||||
|             delivery_address, | ||||
|             country_code: None, | ||||
|             line_items: None, | ||||
|             shopper_reference: None, | ||||
| @ -2979,10 +3236,10 @@ impl | ||||
|             social_security_number: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }; | ||||
|         Ok(request) | ||||
|     } | ||||
| @ -3023,6 +3280,16 @@ impl | ||||
|             )) => get_adyen_split_request(adyen_split_payment, item.router_data.request.currency), | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         Ok(AdyenPaymentRequest { | ||||
|             amount, | ||||
| @ -3035,13 +3302,13 @@ impl | ||||
|             browser_info, | ||||
|             additional_data, | ||||
|             mpi_data: None, | ||||
|             telephone_number: None, | ||||
|             telephone_number, | ||||
|             shopper_name: None, | ||||
|             shopper_email: item.router_data.get_optional_billing_email(), | ||||
|             shopper_locale, | ||||
|             social_security_number: None, | ||||
|             billing_address, | ||||
|             delivery_address: None, | ||||
|             delivery_address, | ||||
|             country_code: country, | ||||
|             line_items, | ||||
|             shopper_reference, | ||||
| @ -3049,10 +3316,10 @@ impl | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -3134,6 +3401,18 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &WalletData)> | ||||
|             )) => get_adyen_split_request(adyen_split_payment, item.router_data.request.currency), | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         Ok(AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -3145,13 +3424,13 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &WalletData)> | ||||
|             browser_info, | ||||
|             additional_data, | ||||
|             mpi_data, | ||||
|             telephone_number: None, | ||||
|             telephone_number, | ||||
|             shopper_name: None, | ||||
|             shopper_email, | ||||
|             shopper_locale: None, | ||||
|             social_security_number: None, | ||||
|             billing_address, | ||||
|             delivery_address: None, | ||||
|             delivery_address, | ||||
|             country_code: None, | ||||
|             line_items: None, | ||||
|             shopper_reference, | ||||
| @ -3159,10 +3438,10 @@ impl TryFrom<(&AdyenRouterData<&PaymentsAuthorizeRouterData>, &WalletData)> | ||||
|             channel, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -3219,6 +3498,12 @@ impl | ||||
|             )) => get_adyen_split_request(adyen_split_payment, item.router_data.request.currency), | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         Ok(AdyenPaymentRequest { | ||||
|             amount, | ||||
| @ -3245,10 +3530,10 @@ impl | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -3291,7 +3576,16 @@ impl | ||||
|             )) => get_adyen_split_request(adyen_split_payment, item.router_data.request.currency), | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|  | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|         let billing_address = | ||||
|             get_address_info(item.router_data.get_optional_billing()).and_then(Result::ok); | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         Ok(AdyenPaymentRequest { | ||||
|             amount, | ||||
|             merchant_account: auth_type.merchant_account, | ||||
| @ -3307,8 +3601,8 @@ impl | ||||
|             shopper_name, | ||||
|             shopper_email, | ||||
|             shopper_locale: None, | ||||
|             billing_address: None, | ||||
|             delivery_address: None, | ||||
|             billing_address, | ||||
|             delivery_address, | ||||
|             country_code: None, | ||||
|             line_items: None, | ||||
|             shopper_reference: None, | ||||
| @ -3317,10 +3611,10 @@ impl | ||||
|             social_security_number: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -5493,6 +5787,16 @@ impl | ||||
|             )) => get_adyen_split_request(adyen_split_payment, item.router_data.request.currency), | ||||
|             _ => (None, None), | ||||
|         }; | ||||
|         let device_fingerprint = item | ||||
|             .router_data | ||||
|             .request | ||||
|             .metadata | ||||
|             .clone() | ||||
|             .and_then(get_device_fingerprint); | ||||
|  | ||||
|         let delivery_address = | ||||
|             get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); | ||||
|         let telephone_number = item.router_data.get_optional_billing_phone_number(); | ||||
|  | ||||
|         Ok(AdyenPaymentRequest { | ||||
|             amount, | ||||
| @ -5504,13 +5808,13 @@ impl | ||||
|             recurring_processing_model, | ||||
|             browser_info, | ||||
|             additional_data, | ||||
|             telephone_number: None, | ||||
|             telephone_number, | ||||
|             shopper_name, | ||||
|             shopper_email, | ||||
|             shopper_locale: None, | ||||
|             social_security_number: None, | ||||
|             billing_address, | ||||
|             delivery_address: None, | ||||
|             delivery_address, | ||||
|             country_code, | ||||
|             line_items: None, | ||||
|             shopper_reference, | ||||
| @ -5518,11 +5822,11 @@ impl | ||||
|             channel: None, | ||||
|             shopper_statement: item.router_data.request.statement_descriptor.clone(), | ||||
|             shopper_ip: item.router_data.request.get_ip_address_as_optional(), | ||||
|             metadata: item.router_data.request.metadata.clone().map(Into::into), | ||||
|             merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(), | ||||
|             mpi_data: Some(mpi_data), | ||||
|             store, | ||||
|             splits, | ||||
|             device_fingerprint, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 sweta-sharma
					sweta-sharma