Skip to content

Commit e2162f9

Browse files
committed
updated add connector script
1 parent dbca363 commit e2162f9

File tree

5 files changed

+325
-47
lines changed

5 files changed

+325
-47
lines changed

connector-template/mod.rs

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,17 @@ use hyperswitch_interfaces::{
3939
types::{self, Response},
4040
webhooks,
4141
};
42+
use std::sync::LazyLock;
43+
44+
use common_enums::enums;
45+
use hyperswitch_interfaces::api::ConnectorSpecifications;
46+
use hyperswitch_domain_models::router_response_types::{ConnectorInfo, SupportedPaymentMethods};
4247
use crate::{
4348
constants::headers,
4449
types::ResponseRouterData,
4550
utils,
4651
};
52+
use hyperswitch_domain_models::payment_method_data::PaymentMethodData;
4753

4854
use transformers as {{project-name | downcase}};
4955

@@ -147,13 +153,39 @@ impl ConnectorCommon for {{project-name | downcase | pascal_case}} {
147153
reason: response.reason,
148154
attempt_status: None,
149155
connector_transaction_id: None,
156+
network_advice_code: None,
157+
network_decline_code: None,
158+
network_error_message: None,
150159
})
151160
}
152161
}
153162

163+
154164
impl ConnectorValidation for {{project-name | downcase | pascal_case}}
155165
{
156-
//TODO: implement functions when support enabled
166+
fn validate_mandate_payment(
167+
&self,
168+
_pm_type: Option<enums::PaymentMethodType>,
169+
pm_data: PaymentMethodData,
170+
) -> CustomResult<(), errors::ConnectorError> {
171+
match pm_data {
172+
PaymentMethodData::Card(_) => Err(errors::ConnectorError::NotImplemented(
173+
"validate_mandate_payment does not support cards".to_string(),
174+
)
175+
.into()),
176+
_ => Ok(()),
177+
}
178+
}
179+
180+
fn validate_psync_reference_id(
181+
&self,
182+
_data: &PaymentsSyncData,
183+
_is_three_ds: bool,
184+
_status: enums::AttemptStatus,
185+
_connector_meta_data: Option<common_utils::pii::SecretSerdeValue>,
186+
) -> CustomResult<(), errors::ConnectorError> {
187+
Ok(())
188+
}
157189
}
158190

159191
impl
@@ -194,7 +226,10 @@ impl
194226
self.common_get_content_type()
195227
}
196228

197-
fn get_url(&self, _req: &PaymentsAuthorizeRouterData, _connectors: &Connectors,) -> CustomResult<String,errors::ConnectorError> {
229+
fn get_url(
230+
&self,
231+
_req: &PaymentsAuthorizeRouterData,
232+
_connectors: &Connectors,) -> CustomResult<String,errors::ConnectorError> {
198233
Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
199234
}
200235

@@ -425,7 +460,10 @@ impl
425460
self.common_get_content_type()
426461
}
427462

428-
fn get_url(&self, _req: &RefundsRouterData<Execute>, _connectors: &Connectors,) -> CustomResult<String,errors::ConnectorError> {
463+
fn get_url(
464+
&self,
465+
_req: &RefundsRouterData<Execute>,
466+
_connectors: &Connectors,) -> CustomResult<String,errors::ConnectorError> {
429467
Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
430468
}
431469

@@ -487,7 +525,9 @@ impl
487525
self.common_get_content_type()
488526
}
489527

490-
fn get_url(&self, _req: &RefundSyncRouterData,_connectors: &Connectors,) -> CustomResult<String,errors::ConnectorError> {
528+
fn get_url(
529+
&self,
530+
_req: &RefundSyncRouterData,_connectors: &Connectors,) -> CustomResult<String,errors::ConnectorError> {
491531
Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
492532
}
493533

@@ -552,5 +592,29 @@ impl webhooks::IncomingWebhook for {{project-name | downcase | pascal_case}} {
552592
}
553593
}
554594

555-
impl ConnectorSpecifications for {{project-name | downcase | pascal_case}} {}
556-
595+
static {{project-name | upcase}}_SUPPORTED_PAYMENT_METHODS: LazyLock<SupportedPaymentMethods> =
596+
LazyLock::new(|| {
597+
SupportedPaymentMethods::new()
598+
});
599+
600+
static {{project-name | upcase}}_CONNECTOR_INFO: ConnectorInfo = ConnectorInfo {
601+
display_name: "{{project-name | downcase | pascal_case}}",
602+
description: "{{project-name | downcase | pascal_case}} connector",
603+
connector_type: enums::PaymentConnectorCategory::PaymentGateway,
604+
};
605+
606+
static {{project-name | upcase}}_SUPPORTED_WEBHOOK_FLOWS: [enums::EventClass; 0] = [];
607+
608+
impl ConnectorSpecifications for {{project-name | downcase | pascal_case}} {
609+
fn get_connector_about(&self) -> Option<&'static ConnectorInfo> {
610+
Some(&{{project-name | upcase}}_CONNECTOR_INFO)
611+
}
612+
613+
fn get_supported_payment_methods(&self) -> Option<&'static SupportedPaymentMethods> {
614+
Some(&*{{project-name | upcase}}_SUPPORTED_PAYMENT_METHODS)
615+
}
616+
617+
fn get_supported_webhook_flows(&self) -> Option<&'static [enums::EventClass]> {
618+
Some(&{{project-name | upcase}}_SUPPORTED_WEBHOOK_FLOWS)
619+
}
620+
}

connector-template/test.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use hyperswitch_domain_models::payment_method_data::{Card, PaymentMethodData};
12
use masking::Secret;
23
use router::{
34
types::{self, api, storage::enums,
@@ -12,13 +13,13 @@ impl ConnectorActions for {{project-name | downcase | pascal_case}}Test {}
1213
impl utils::Connector for {{project-name | downcase | pascal_case}}Test {
1314
fn get_data(&self) -> api::ConnectorData {
1415
use router::connector::{{project-name | downcase | pascal_case}};
15-
api::ConnectorData {
16-
connector: Box::new({{project-name | downcase | pascal_case}}::new()),
17-
connector_name: types::Connector::{{project-name | downcase | pascal_case}},
18-
get_token: types::api::GetToken::Connector,
19-
merchant_connector_id: None,
20-
}
21-
}
16+
utils::construct_connector_data_old(
17+
Box::new({{project-name | downcase | pascal_case}}::new()),
18+
types::Connector::Plaid,
19+
api::GetToken::Connector,
20+
None,
21+
)
22+
}
2223

2324
fn get_auth_token(&self) -> types::ConnectorAuthType {
2425
utils::to_connector_auth_type(
@@ -287,7 +288,7 @@ async fn should_fail_payment_for_incorrect_cvc() {
287288
let response = CONNECTOR
288289
.make_payment(
289290
Some(types::PaymentsAuthorizeData {
290-
payment_method_data: types::api::PaymentMethodData::Card(api::Card {
291+
payment_method_data: PaymentMethodData::Card(Card {
291292
card_cvc: Secret::new("12345".to_string()),
292293
..utils::CCardType::default().0
293294
}),
@@ -309,7 +310,7 @@ async fn should_fail_payment_for_invalid_exp_month() {
309310
let response = CONNECTOR
310311
.make_payment(
311312
Some(types::PaymentsAuthorizeData {
312-
payment_method_data: api::PaymentMethodData::Card(api::Card {
313+
payment_method_data: PaymentMethodData::Card(Card {
313314
card_exp_month: Secret::new("20".to_string()),
314315
..utils::CCardType::default().0
315316
}),
@@ -331,7 +332,7 @@ async fn should_fail_payment_for_incorrect_expiry_year() {
331332
let response = CONNECTOR
332333
.make_payment(
333334
Some(types::PaymentsAuthorizeData {
334-
payment_method_data: api::PaymentMethodData::Card(api::Card {
335+
payment_method_data: PaymentMethodData::Card(Card {
335336
card_exp_year: Secret::new("2000".to_string()),
336337
..utils::CCardType::default().0
337338
}),

connector-template/transformers.rs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ use hyperswitch_domain_models::{
1111
types::{PaymentsAuthorizeRouterData, RefundsRouterData},
1212
};
1313
use hyperswitch_interfaces::errors;
14-
use crate::{
15-
types::{RefundsResponseRouterData, ResponseRouterData},
16-
utils::PaymentsAuthorizeRequestData,
17-
};
14+
use crate::
15+
types::{RefundsResponseRouterData, ResponseRouterData},
16+
17+
;
1818

1919
//TODO: Fill the struct with respective fields
2020
pub struct {{project-name | downcase | pascal_case}}RouterData<T> {
@@ -62,21 +62,12 @@ impl TryFrom<&{{project-name | downcase | pascal_case}}RouterData<&PaymentsAutho
6262
type Error = error_stack::Report<errors::ConnectorError>;
6363
fn try_from(item: &{{project-name | downcase | pascal_case}}RouterData<&PaymentsAuthorizeRouterData>) -> Result<Self,Self::Error> {
6464
match item.router_data.request.payment_method_data.clone() {
65-
PaymentMethodData::Card(req_card) => {
66-
let card = {{project-name | downcase | pascal_case}}Card {
67-
number: req_card.card_number,
68-
expiry_month: req_card.card_exp_month,
69-
expiry_year: req_card.card_exp_year,
70-
cvc: req_card.card_cvc,
71-
complete: item.router_data.request.is_auto_capture()?,
72-
};
73-
Ok(Self {
74-
amount: item.amount.clone(),
75-
card,
76-
})
77-
}
65+
PaymentMethodData::Card(_) => {
66+
Err(errors::ConnectorError::NotImplemented("Card payment method not implemented".to_string()).into())
67+
},
7868
_ => Err(errors::ConnectorError::NotImplemented("Payment method".to_string()).into()),
7969
}
70+
8071
}
8172
}
8273

@@ -229,4 +220,7 @@ pub struct {{project-name | downcase | pascal_case}}ErrorResponse {
229220
pub code: String,
230221
pub message: String,
231222
pub reason: Option<String>,
223+
pub network_advice_code: Option<String>,
224+
pub network_decline_code: Option<String>,
225+
pub network_error_message: Option<String>,
232226
}

0 commit comments

Comments
 (0)