fix(connector): [Cryptopay]fix redirection for cryptopay (#4272)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Prasunna Soppa
2024-04-02 19:54:21 +05:30
committed by GitHub
parent 2f304e6016
commit 1023f46c88
2 changed files with 17 additions and 2 deletions

View File

@ -4,7 +4,7 @@ use reqwest::Url;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::{ use crate::{
connector::utils::{self, is_payment_failure, CryptoData}, connector::utils::{self, is_payment_failure, CryptoData, PaymentsAuthorizeRequestData},
consts, consts,
core::errors, core::errors,
services, services,
@ -70,7 +70,8 @@ impl TryFrom<&CryptopayRouterData<&types::PaymentsAuthorizeRouterData>>
pay_currency, pay_currency,
success_redirect_url: item.router_data.request.router_return_url.clone(), success_redirect_url: item.router_data.request.router_return_url.clone(),
unsuccess_redirect_url: item.router_data.request.router_return_url.clone(), unsuccess_redirect_url: item.router_data.request.router_return_url.clone(),
metadata: item.router_data.request.metadata.clone(), //Cryptopay only accepts metadata as Object. If any other type, payment will fail with error.
metadata: item.router_data.request.get_metadata_as_object(),
custom_id: item.router_data.connector_request_reference_id.clone(), custom_id: item.router_data.connector_request_reference_id.clone(),
}) })
} }

View File

@ -498,6 +498,7 @@ pub trait PaymentsAuthorizeRequestData {
fn get_surcharge_amount(&self) -> Option<i64>; fn get_surcharge_amount(&self) -> Option<i64>;
fn get_tax_on_surcharge_amount(&self) -> Option<i64>; fn get_tax_on_surcharge_amount(&self) -> Option<i64>;
fn get_total_surcharge_amount(&self) -> Option<i64>; fn get_total_surcharge_amount(&self) -> Option<i64>;
fn get_metadata_as_object(&self) -> Option<pii::SecretSerdeValue>;
} }
pub trait PaymentMethodTokenizationRequestData { pub trait PaymentMethodTokenizationRequestData {
@ -632,6 +633,19 @@ impl PaymentsAuthorizeRequestData for types::PaymentsAuthorizeData {
fn is_customer_initiated_mandate_payment(&self) -> bool { fn is_customer_initiated_mandate_payment(&self) -> bool {
self.setup_mandate_details.is_some() self.setup_mandate_details.is_some()
} }
fn get_metadata_as_object(&self) -> Option<pii::SecretSerdeValue> {
self.metadata
.clone()
.and_then(|meta_data| match meta_data.peek() {
serde_json::Value::Null
| serde_json::Value::Bool(_)
| serde_json::Value::Number(_)
| serde_json::Value::String(_)
| serde_json::Value::Array(_) => None,
serde_json::Value::Object(_) => Some(meta_data),
})
}
} }
pub trait ConnectorCustomerData { pub trait ConnectorCustomerData {