feat(connector): [payload] introduce no-3ds cards (#8545)

This commit is contained in:
Pa1NarK
2025-07-05 20:06:32 +05:30
committed by GitHub
parent f6574b7828
commit baad3f6a37
14 changed files with 1311 additions and 192 deletions

View File

@ -0,0 +1,727 @@
import { customerAcceptance } from "./Commons";
const successfulNo3DSCardDetails = {
card_number: "4242424242424242",
card_exp_month: "12",
card_exp_year: "25",
card_holder_name: "John Doe",
card_cvc: "123",
};
// Note: Payload may not support 3DS authentication - using same card for consistency
const successfulThreeDSTestCardDetails = {
card_number: "4242424242424242",
card_exp_month: "12",
card_exp_year: "25",
card_holder_name: "John Doe",
card_cvc: "123",
};
const failedNo3DSCardDetails = {
card_number: "4000000000000002",
card_exp_month: "01",
card_exp_year: "25",
card_holder_name: "John Doe",
card_cvc: "123",
};
const singleUseMandateData = {
customer_acceptance: customerAcceptance,
mandate_type: {
single_use: {
amount: 8000,
currency: "USD",
},
},
};
const multiUseMandateData = {
customer_acceptance: customerAcceptance,
mandate_type: {
multi_use: {
amount: 8000,
currency: "USD",
},
},
};
const payment_method_data_no3ds = {
card: {
last4: "4242",
card_type: "CREDIT",
card_network: "Visa",
card_issuer: "STRIPE PAYMENTS UK LIMITED",
card_issuing_country: "UNITEDKINGDOM",
card_isin: "424242",
card_extended_bin: null,
card_exp_month: "12",
card_exp_year: "25",
card_holder_name: "John Doe",
payment_checks: null,
authentication_data: null,
},
billing: null,
};
export const connectorDetails = {
card_pm: {
PaymentIntent: {
Request: {
currency: "USD",
customer_acceptance: null,
setup_future_usage: "on_session",
},
Response: {
status: 200,
body: {
status: "requires_payment_method",
setup_future_usage: "on_session",
},
},
},
PaymentIntentOffSession: {
Request: {
currency: "USD",
customer_acceptance: null,
amount: 6000,
authentication_type: "no_three_ds",
setup_future_usage: "off_session",
},
Response: {
status: 200,
body: {
status: "requires_payment_method",
setup_future_usage: "off_session",
},
},
},
SessionToken: {
Response: {
status: 200,
body: {
session_token: [],
},
},
},
PaymentIntentWithShippingCost: {
Request: {
currency: "USD",
shipping_cost: 50,
},
Response: {
status: 200,
body: {
status: "requires_payment_method",
shipping_cost: 50,
amount: 6000,
},
},
},
PaymentConfirmWithShippingCost: {
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
customer_acceptance: null,
setup_future_usage: "on_session",
},
Response: {
status: 200,
body: {
status: "succeeded",
shipping_cost: 50,
amount_received: 6050,
amount: 6000,
net_amount: 6050,
},
},
},
"3DSManualCapture": {
Configs: {
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulThreeDSTestCardDetails,
},
currency: "USD",
customer_acceptance: null,
setup_future_usage: "on_session",
},
Response: {
status: 501,
body: {
error: {
type: "invalid_request",
message: "3DS authentication is not supported by Payload",
code: "IR_00",
},
},
},
},
"3DSAutoCapture": {
Configs: {
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulThreeDSTestCardDetails,
},
currency: "USD",
customer_acceptance: null,
setup_future_usage: "on_session",
},
Response: {
status: 501,
body: {
error: {
type: "invalid_request",
message: "3DS authentication is not supported by Payload",
code: "IR_00",
},
},
},
},
No3DSManualCapture: {
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
customer_acceptance: null,
setup_future_usage: "on_session",
},
Response: {
status: 200,
body: {
status: "requires_capture", // Manual capture should require explicit capture
payment_method: "card",
attempt_count: 1,
},
},
},
No3DSAutoCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
customer_acceptance: null,
setup_future_usage: "on_session",
},
Response: {
status: 200,
body: {
status: "succeeded",
payment_method: "card",
attempt_count: 1,
},
},
},
No3DSFailPayment: {
Request: {
payment_method: "card",
payment_method_data: {
card: failedNo3DSCardDetails,
},
customer_acceptance: null,
setup_future_usage: "on_session",
},
Response: {
status: 200,
body: {
status: "failed",
error_code: "card_declined",
error_message: "Your card was declined",
unified_code: "UE_9000",
unified_message: "Something went wrong",
},
},
},
Capture: {
Request: {
amount_to_capture: 6000,
},
Response: {
status: 200,
body: {
status: "succeeded",
amount: 6000,
amount_capturable: 0,
amount_received: 6000,
},
},
},
PartialCapture: {
Request: {
amount_to_capture: 2000,
},
Response: {
status: 200,
body: {
status: "partially_captured",
amount: 6000,
amount_capturable: 0,
amount_received: 2000,
},
},
},
Void: {
Request: {},
Response: {
status: 200,
body: {
status: "cancelled",
},
},
},
Refund: {
Request: {
amount: 6000,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
manualPaymentRefund: {
Request: {
amount: 6000,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
manualPaymentPartialRefund: {
Request: {
amount: 2000,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
PartialRefund: {
Request: {
amount: 2000,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
SyncRefund: {
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
SaveCardUseNo3DSAutoCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
setup_future_usage: "on_session",
customer_acceptance: customerAcceptance,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
SaveCardUseNo3DSManualCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
setup_future_usage: "on_session",
customer_acceptance: customerAcceptance,
},
Response: {
status: 200,
body: {
status: "requires_capture", // Keep this as requires_capture for manual flows
},
},
},
PaymentMethodIdMandateNo3DSAutoCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
mandate_data: null,
customer_acceptance: customerAcceptance,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
SaveCardUseNo3DSAutoCaptureOffSession: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
payment_method: "card",
payment_method_type: "debit",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
setup_future_usage: "off_session",
customer_acceptance: customerAcceptance,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
SaveCardUse3DSAutoCaptureOffSession: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
payment_method: "card",
payment_method_type: "debit",
payment_method_data: {
card: successfulThreeDSTestCardDetails,
},
setup_future_usage: "off_session",
customer_acceptance: customerAcceptance,
},
Response: {
status: 200,
body: {
status: "requires_customer_action",
},
},
},
SaveCardUseNo3DSManualCaptureOffSession: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
setup_future_usage: "off_session",
customer_acceptance: customerAcceptance,
},
Response: {
status: 200,
body: {
status: "requires_capture",
},
},
},
SaveCardConfirmAutoCaptureOffSession: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
setup_future_usage: "off_session",
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
SaveCardConfirmManualCaptureOffSession: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
setup_future_usage: "off_session",
},
Response: {
status: 200,
body: {
status: "requires_capture",
},
},
},
SaveCardConfirmAutoCaptureOffSessionWithoutBilling: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
},
Request: {
setup_future_usage: "off_session",
billing: null,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
PaymentMethodIdMandateNo3DSManualCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
mandate_data: null,
customer_acceptance: customerAcceptance,
},
Response: {
status: 200,
body: {
status: "requires_capture",
},
},
},
MandateSingleUseNo3DSAutoCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
mandate_data: singleUseMandateData,
},
Response: {
status: 200,
body: {
status: "succeeded",
mandate_id: null,
payment_method_data: payment_method_data_no3ds,
payment_method: "card",
connector: "payload",
},
},
},
MandateSingleUseNo3DSManualCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
mandate_data: singleUseMandateData,
},
Response: {
status: 200,
body: {
status: "requires_capture",
mandate_id: null,
payment_method_data: payment_method_data_no3ds,
payment_method: "card",
connector: "payload",
},
},
},
MandateMultiUseNo3DSAutoCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
mandate_data: multiUseMandateData,
},
Response: {
status: 200,
body: {
status: "succeeded",
payment_method_data: payment_method_data_no3ds,
payment_method: "card",
connector: "payload",
},
},
},
MandateMultiUseNo3DSManualCapture: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
mandate_data: multiUseMandateData,
},
Response: {
status: 200,
body: {
status: "requires_capture",
payment_method_data: payment_method_data_no3ds,
payment_method: "card",
connector: "payload",
},
},
},
ZeroAuthPaymentIntent: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
currency: "BRL",
},
Response: {
status: 200,
body: {
status: "requires_payment_method",
},
},
},
ZeroAuthMandate: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_method: "card",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
currency: "USD",
mandate_data: singleUseMandateData,
},
Response: {
status: 200,
body: {
status: "succeeded",
},
},
},
ZeroAuthConfirmPayment: {
Configs: {
DELAY: {
STATUS: true,
TIMEOUT: 15000,
},
TRIGGER_SKIP: true,
},
Request: {
payment_type: "setup_mandate",
payment_method: "card",
payment_method_type: "credit",
payment_method_data: {
card: successfulNo3DSCardDetails,
},
},
Response: {
status: 200,
body: {
status: "succeeded",
setup_future_usage: "off_session",
},
},
},
},
};

View File

@ -37,6 +37,7 @@ import { connectorDetails as nmiConnectorDetails } from "./Nmi.js";
import { connectorDetails as noonConnectorDetails } from "./Noon.js";
import { connectorDetails as novalnetConnectorDetails } from "./Novalnet.js";
import { connectorDetails as payboxConnectorDetails } from "./Paybox.js";
import { connectorDetails as payloadConnectorDetails } from "./Payload.js";
import { connectorDetails as paypalConnectorDetails } from "./Paypal.js";
import { connectorDetails as powertranzConnectorDetails } from "./PowerTranz.js";
import { connectorDetails as redsysConnectorDetails } from "./Redsys.js";
@ -85,6 +86,7 @@ const connectorDetails = {
noon: noonConnectorDetails,
novalnet: novalnetConnectorDetails,
paybox: payboxConnectorDetails,
payload: payloadConnectorDetails,
paypal: paypalConnectorDetails,
powertranz: powertranzConnectorDetails,
redsys: redsysConnectorDetails,
@ -364,6 +366,7 @@ export const CONNECTOR_LISTS = {
"fiuu",
"jpmorgan",
"nexinets",
"payload",
"paypal",
"stax",
"wellsfargo",