strapi-plugin-payone-provider 4.6.9 → 5.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -11
- package/admin/src/components/Initializer/index.jsx +3 -3
- package/admin/src/components/PluginIcon/index.jsx +3 -3
- package/admin/src/index.js +33 -11
- package/admin/src/pages/App/components/AppHeader.jsx +17 -32
- package/admin/src/pages/App/components/AppTabs.jsx +36 -162
- package/admin/src/pages/App/components/ApplePayBtn.jsx +9 -11
- package/admin/src/pages/App/components/ApplePayConfig.jsx +221 -161
- package/admin/src/pages/App/components/ApplePayConfigPanel.jsx +33 -45
- package/admin/src/pages/App/components/DocsPanel.jsx +66 -1726
- package/admin/src/pages/App/components/GooglePayConfig.jsx +136 -169
- package/admin/src/pages/App/components/GooglePayConfigPanel.jsx +37 -55
- package/admin/src/pages/App/components/GooglePaybutton.jsx +101 -43
- package/admin/src/pages/App/components/RenderInput.jsx +94 -0
- package/admin/src/pages/App/components/StatusBadge.jsx +24 -71
- package/admin/src/pages/App/components/configuration/ConfigurationFields.jsx +255 -0
- package/admin/src/pages/App/components/configuration/ConfigurationPanel.jsx +54 -0
- package/admin/src/pages/App/components/configuration/TestConnection.jsx +130 -0
- package/admin/src/pages/App/components/docs/ApplePaySection.jsx +260 -0
- package/admin/src/pages/App/components/docs/BaseUrlSection.jsx +53 -0
- package/admin/src/pages/App/components/docs/CaptureRefundSection.jsx +113 -0
- package/admin/src/pages/App/components/docs/CodeBlock.jsx +59 -0
- package/admin/src/pages/App/components/docs/CreditCardSection.jsx +93 -0
- package/admin/src/pages/App/components/docs/GooglePaySection.jsx +248 -0
- package/admin/src/pages/App/components/docs/PayPalSection.jsx +116 -0
- package/admin/src/pages/App/components/docs/PaymentMethodsSection.jsx +55 -0
- package/admin/src/pages/App/components/docs/TableOfContents.jsx +47 -0
- package/admin/src/pages/App/components/docs/TestCredentialsSection.jsx +304 -0
- package/admin/src/pages/App/components/docs/ThreeDSecureSection.jsx +188 -0
- package/admin/src/pages/App/components/icons/BankIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/ChevronDownIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/ChevronUpIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/CreditCardIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/ErrorIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/InfoIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/MarkCircle.jsx +19 -0
- package/admin/src/pages/App/components/icons/PaymentIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/PendingIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/PersonIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/SuccessIcon.jsx +1 -1
- package/admin/src/pages/App/components/icons/WalletIcon.jsx +1 -1
- package/admin/src/pages/App/components/payment-actions/ApplePayPanel.jsx +51 -0
- package/admin/src/pages/App/components/payment-actions/AuthorizationForm.jsx +341 -0
- package/admin/src/pages/App/components/payment-actions/CaptureForm.jsx +128 -0
- package/admin/src/pages/App/components/{paymentActions → payment-actions}/CardDetailsInput.jsx +77 -72
- package/admin/src/pages/App/components/payment-actions/PaymentActionsPanel.jsx +194 -0
- package/admin/src/pages/App/components/payment-actions/PaymentMethodSelector.jsx +313 -0
- package/admin/src/pages/App/components/payment-actions/PaymentResult.jsx +133 -0
- package/admin/src/pages/App/components/payment-actions/PreauthorizationForm.jsx +280 -0
- package/admin/src/pages/App/components/payment-actions/RefundForm.jsx +121 -0
- package/admin/src/pages/App/components/transaction-history/FiltersPanel.jsx +145 -0
- package/admin/src/pages/App/components/transaction-history/HistoryPanel.jsx +50 -0
- package/admin/src/pages/App/components/transaction-history/TransactionTable.jsx +163 -0
- package/admin/src/pages/App/components/transaction-history/details/TransactionDetails.jsx +156 -0
- package/admin/src/pages/App/components/{TransactionHistoryItem.jsx → transaction-history/details/TransactionHistoryItem.jsx} +16 -28
- package/admin/src/pages/App/index.jsx +27 -70
- package/admin/src/pages/App/styles.css +46 -169
- package/admin/src/pages/constants/paymentConstants.js +52 -16
- package/admin/src/pages/hooks/use-system-theme.js +27 -0
- package/admin/src/pages/hooks/usePaymentActions.js +273 -210
- package/admin/src/pages/hooks/useSettings.js +87 -48
- package/admin/src/pages/hooks/useTransactionHistory.js +105 -108
- package/admin/src/pages/utils/api.js +57 -72
- package/admin/src/pages/utils/applePayConstants.js +2 -28
- package/admin/src/pages/utils/countryLanguageUtils.js +280 -0
- package/admin/src/pages/utils/getInputComponent.jsx +225 -0
- package/admin/src/pages/utils/googlePayConstants.js +2 -9
- package/admin/src/pages/utils/paymentUtils.js +13 -25
- package/admin/src/pages/utils/tooltipHelpers.js +18 -0
- package/admin/src/pages/utils/transactionTableUtils.js +60 -0
- package/package.json +8 -14
- package/server/config/index.js +18 -2
- package/server/controllers/payone.js +80 -31
- package/server/policies/is-auth.js +9 -3
- package/server/policies/isSuperAdmin.js +7 -5
- package/server/services/paymentService.js +6 -22
- package/server/services/payone.js +3 -3
- package/server/services/settingsService.js +13 -3
- package/server/services/testConnectionService.js +11 -73
- package/server/services/transactionService.js +63 -98
- package/server/utils/normalize.js +0 -12
- package/server/utils/paymentMethodParams.js +0 -1
- package/server/utils/responseParser.js +9 -14
- package/strapi-admin.js +3 -1
- package/admin/src/pages/App/components/ConfigurationPanel.jsx +0 -517
- package/admin/src/pages/App/components/CustomerInfoPopover.jsx +0 -147
- package/admin/src/pages/App/components/HistoryPanel.jsx +0 -94
- package/admin/src/pages/App/components/PaymentActionsPanel.jsx +0 -280
- package/admin/src/pages/App/components/RawDataPopover.jsx +0 -113
- package/admin/src/pages/App/components/TransactionHistoryTable/TransactionHistoryTableFilters.jsx +0 -113
- package/admin/src/pages/App/components/TransactionHistoryTable/TransactionHistoryTablePagination.jsx +0 -180
- package/admin/src/pages/App/components/TransactionHistoryTable/index.jsx +0 -225
- package/admin/src/pages/App/components/paymentActions/ApplePayPanel.jsx +0 -95
- package/admin/src/pages/App/components/paymentActions/AuthorizationForm.jsx +0 -197
- package/admin/src/pages/App/components/paymentActions/CaptureForm.jsx +0 -65
- package/admin/src/pages/App/components/paymentActions/PaymentMethodSelector.jsx +0 -306
- package/admin/src/pages/App/components/paymentActions/PaymentResult.jsx +0 -192
- package/admin/src/pages/App/components/paymentActions/PreauthorizationForm.jsx +0 -142
- package/admin/src/pages/App/components/paymentActions/RefundForm.jsx +0 -90
package/admin/src/pages/App/components/{paymentActions → payment-actions}/CardDetailsInput.jsx
RENAMED
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Typography,
|
|
6
|
-
TextInput,
|
|
7
|
-
Select,
|
|
8
|
-
Option,
|
|
9
|
-
Link
|
|
10
|
-
} from "@strapi/design-system";
|
|
11
|
-
|
|
12
|
-
// 3DS Test Cards that require redirect (challenge workflow)
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Box, Flex, Typography, Link } from "@strapi/design-system";
|
|
3
|
+
import RenderInput from "../RenderInput";
|
|
4
|
+
|
|
13
5
|
const TEST_3DS_CARDS = [
|
|
14
6
|
{
|
|
15
7
|
name: "VISA - 3DS 2.0 (Challenge)",
|
|
@@ -17,7 +9,7 @@ const TEST_3DS_CARDS = [
|
|
|
17
9
|
cardpan: "4716971940353559",
|
|
18
10
|
cardexpiredate: "2512",
|
|
19
11
|
cardcvc2: "123",
|
|
20
|
-
description: "3DS 2.0 with challenge - Password: 12345"
|
|
12
|
+
description: "3DS 2.0 with challenge - Password: 12345",
|
|
21
13
|
},
|
|
22
14
|
{
|
|
23
15
|
name: "Mastercard - 3DS 2.0 (Challenge)",
|
|
@@ -25,16 +17,8 @@ const TEST_3DS_CARDS = [
|
|
|
25
17
|
cardpan: "5404127720739582",
|
|
26
18
|
cardexpiredate: "2512",
|
|
27
19
|
cardcvc2: "123",
|
|
28
|
-
description: "3DS 2.0 with challenge - Password: 12345"
|
|
20
|
+
description: "3DS 2.0 with challenge - Password: 12345",
|
|
29
21
|
},
|
|
30
|
-
// {
|
|
31
|
-
// name: "AMEX - 3DS 2.0 (Challenge)",
|
|
32
|
-
// cardtype: "A",
|
|
33
|
-
// cardpan: "375144726036141",
|
|
34
|
-
// cardexpiredate: "2512",
|
|
35
|
-
// cardcvc2: "1234",
|
|
36
|
-
// description: "3DS 2.0 with challenge - Password: 12345"
|
|
37
|
-
// }
|
|
38
22
|
];
|
|
39
23
|
|
|
40
24
|
const CardDetailsInput = ({
|
|
@@ -45,19 +29,19 @@ const CardDetailsInput = ({
|
|
|
45
29
|
cardexpiredate,
|
|
46
30
|
setCardexpiredate,
|
|
47
31
|
cardcvc2,
|
|
48
|
-
setCardcvc2
|
|
32
|
+
setCardcvc2,
|
|
49
33
|
}) => {
|
|
50
34
|
const [selectedTestCard, setSelectedTestCard] = React.useState("");
|
|
51
|
-
const isUpdatingFromTestCard = useRef(false);
|
|
35
|
+
const isUpdatingFromTestCard = React.useRef(false);
|
|
52
36
|
|
|
53
|
-
useEffect(() => {
|
|
37
|
+
React.useEffect(() => {
|
|
54
38
|
if (isUpdatingFromTestCard.current) {
|
|
55
39
|
isUpdatingFromTestCard.current = false;
|
|
56
40
|
return;
|
|
57
41
|
}
|
|
58
42
|
|
|
59
43
|
const matchingCard = TEST_3DS_CARDS.find(
|
|
60
|
-
card => card.cardtype === cardtype && card.cardpan === cardpan
|
|
44
|
+
(card) => card.cardtype === cardtype && card.cardpan === cardpan
|
|
61
45
|
);
|
|
62
46
|
|
|
63
47
|
if (matchingCard) {
|
|
@@ -76,8 +60,8 @@ const CardDetailsInput = ({
|
|
|
76
60
|
return;
|
|
77
61
|
}
|
|
78
62
|
|
|
79
|
-
const selectedCard = TEST_3DS_CARDS.find(
|
|
80
|
-
`${card.cardtype}-${card.cardpan}` === value
|
|
63
|
+
const selectedCard = TEST_3DS_CARDS.find(
|
|
64
|
+
(card) => `${card.cardtype}-${card.cardpan}` === value
|
|
81
65
|
);
|
|
82
66
|
|
|
83
67
|
if (selectedCard) {
|
|
@@ -95,88 +79,110 @@ const CardDetailsInput = ({
|
|
|
95
79
|
<Box>
|
|
96
80
|
<Flex direction="column" alignItems="stretch" gap={4}>
|
|
97
81
|
<Flex direction="row" gap={2} alignItems="flex-start">
|
|
98
|
-
<
|
|
99
|
-
label="3D Secure Test Cards"
|
|
82
|
+
<RenderInput
|
|
100
83
|
name="testCard"
|
|
101
|
-
|
|
84
|
+
label="3D Secure Test Cards"
|
|
85
|
+
value={selectedTestCard || ""}
|
|
86
|
+
onChange={(e) => {
|
|
87
|
+
const value = e.target?.value || e;
|
|
88
|
+
handleTestCardSelect(value);
|
|
89
|
+
}}
|
|
90
|
+
inputType="select"
|
|
102
91
|
placeholder="Select a 3DS test card to auto-fill"
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
))}
|
|
113
|
-
</Select>
|
|
92
|
+
tooltipContent="These cards will trigger 3DS authentication redirect. Password: 12345"
|
|
93
|
+
options={[
|
|
94
|
+
{ value: "", label: "-- Select a test card --" },
|
|
95
|
+
...TEST_3DS_CARDS.map((card, index) => ({
|
|
96
|
+
value: `${card.cardtype}-${card.cardpan}`,
|
|
97
|
+
label: `${card.name} - ${card.description}`,
|
|
98
|
+
})),
|
|
99
|
+
]}
|
|
100
|
+
/>
|
|
114
101
|
</Flex>
|
|
115
102
|
|
|
116
103
|
<Flex gap={4} wrap="wrap" alignItems="flex-start">
|
|
117
|
-
<
|
|
118
|
-
label="Card Type *"
|
|
104
|
+
<RenderInput
|
|
119
105
|
name="cardtype"
|
|
106
|
+
label="Card Type *"
|
|
120
107
|
value={cardtype || ""}
|
|
121
|
-
onChange={(
|
|
108
|
+
onChange={(e) => {
|
|
109
|
+
const value = e.target?.value || e;
|
|
110
|
+
setCardtype(value);
|
|
111
|
+
}}
|
|
112
|
+
inputType="select"
|
|
122
113
|
required
|
|
123
|
-
|
|
124
|
-
|
|
114
|
+
tooltipContent="Select credit card type"
|
|
115
|
+
options={[
|
|
116
|
+
{ value: "V", label: "VISA" },
|
|
117
|
+
{ value: "M", label: "Mastercard" },
|
|
118
|
+
{ value: "A", label: "American Express" },
|
|
119
|
+
{ value: "J", label: "JCB" },
|
|
120
|
+
{ value: "O", label: "Maestro International" },
|
|
121
|
+
{ value: "D", label: "Diners Club" },
|
|
122
|
+
]}
|
|
125
123
|
style={{ flex: 1, minWidth: "200px" }}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
<Option value="A">American Express</Option>
|
|
130
|
-
<Option value="J">JCB</Option>
|
|
131
|
-
<Option value="O">Maestro International</Option>
|
|
132
|
-
<Option value="D">Diners Club</Option>
|
|
133
|
-
</Select>
|
|
134
|
-
|
|
135
|
-
<TextInput
|
|
136
|
-
label="Card Number (PAN) *"
|
|
124
|
+
/>
|
|
125
|
+
|
|
126
|
+
<RenderInput
|
|
137
127
|
name="cardpan"
|
|
128
|
+
label="Card Number (PAN) *"
|
|
138
129
|
value={cardpan || ""}
|
|
139
130
|
onChange={(e) => setCardpan(e.target.value)}
|
|
131
|
+
inputType="textInput"
|
|
140
132
|
placeholder="Enter card number"
|
|
141
|
-
hint="Credit card number (PAN)"
|
|
142
133
|
required
|
|
143
|
-
|
|
134
|
+
tooltipContent="Credit card number (PAN)"
|
|
144
135
|
style={{ flex: 2, minWidth: "300px" }}
|
|
145
136
|
/>
|
|
146
137
|
</Flex>
|
|
147
138
|
|
|
148
139
|
<Flex gap={4} wrap="wrap" alignItems="flex-start">
|
|
149
|
-
<
|
|
150
|
-
label="Expiry Date *"
|
|
140
|
+
<RenderInput
|
|
151
141
|
name="cardexpiredate"
|
|
142
|
+
label="Expiry Date *"
|
|
152
143
|
value={cardexpiredate || ""}
|
|
153
144
|
onChange={(e) => setCardexpiredate(e.target.value)}
|
|
145
|
+
inputType="textInput"
|
|
154
146
|
placeholder="YYMM (e.g., 2512)"
|
|
155
|
-
hint="Format: YYMM (e.g., 2512 = December 2025)"
|
|
156
147
|
required
|
|
148
|
+
tooltipContent="Format: YYMM (e.g., 2512 = December 2025)"
|
|
149
|
+
type="text"
|
|
157
150
|
maxLength={4}
|
|
158
|
-
className="payment-input"
|
|
159
151
|
style={{ flex: 1, minWidth: "150px" }}
|
|
160
152
|
/>
|
|
161
153
|
|
|
162
|
-
<
|
|
163
|
-
label="CVC/CVV *"
|
|
154
|
+
<RenderInput
|
|
164
155
|
name="cardcvc2"
|
|
156
|
+
label="CVC/CVV *"
|
|
165
157
|
value={cardcvc2 || ""}
|
|
166
158
|
onChange={(e) => setCardcvc2(e.target.value)}
|
|
159
|
+
inputType="textInput"
|
|
167
160
|
placeholder="123 or 1234"
|
|
168
|
-
hint={cardtype === "A" ? "4 digits for AMEX" : "3 digits for other cards"}
|
|
169
161
|
required
|
|
162
|
+
tooltipContent={
|
|
163
|
+
cardtype === "A"
|
|
164
|
+
? "4 digits for AMEX"
|
|
165
|
+
: "3 digits for other cards"
|
|
166
|
+
}
|
|
167
|
+
type="text"
|
|
170
168
|
maxLength={4}
|
|
171
|
-
className="payment-input"
|
|
172
169
|
style={{ flex: 1, minWidth: "150px" }}
|
|
173
170
|
/>
|
|
174
171
|
</Flex>
|
|
175
172
|
|
|
176
173
|
<Box paddingTop={2}>
|
|
177
|
-
<Typography
|
|
178
|
-
|
|
179
|
-
|
|
174
|
+
<Typography
|
|
175
|
+
variant="pi"
|
|
176
|
+
textColor="neutral600"
|
|
177
|
+
style={{ textAlign: "left" }}
|
|
178
|
+
>
|
|
179
|
+
For all test card numbers (positive, negative, frictionless 3DS), 3D
|
|
180
|
+
Secure test data, and detailed documentation, please refer to the{" "}
|
|
181
|
+
<Link
|
|
182
|
+
href="https://docs.payone.com/security-risk-management/3d-secure#/"
|
|
183
|
+
target="_blank"
|
|
184
|
+
rel="noopener noreferrer"
|
|
185
|
+
>
|
|
180
186
|
Payone 3D Secure Documentation
|
|
181
187
|
</Link>
|
|
182
188
|
.
|
|
@@ -188,4 +194,3 @@ const CardDetailsInput = ({
|
|
|
188
194
|
};
|
|
189
195
|
|
|
190
196
|
export default CardDetailsInput;
|
|
191
|
-
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Box, Flex, Typography, Accordion } from "@strapi/design-system";
|
|
3
|
+
import PaymentMethodSelector from "./PaymentMethodSelector";
|
|
4
|
+
import PreauthorizationForm from "./PreauthorizationForm";
|
|
5
|
+
import AuthorizationForm from "./AuthorizationForm";
|
|
6
|
+
import CaptureForm from "./CaptureForm";
|
|
7
|
+
import RefundForm from "./RefundForm";
|
|
8
|
+
import PaymentResult from "./PaymentResult";
|
|
9
|
+
import ApplePayPanel from "./ApplePayPanel";
|
|
10
|
+
|
|
11
|
+
const PaymentActionsPanel = ({
|
|
12
|
+
onNavigateToConfig,
|
|
13
|
+
settings,
|
|
14
|
+
paymentActions,
|
|
15
|
+
}) => {
|
|
16
|
+
const mode = (settings?.settings?.mode || "test").toLowerCase();
|
|
17
|
+
const isLiveMode = mode === "live";
|
|
18
|
+
|
|
19
|
+
React.useEffect(() => {
|
|
20
|
+
if (isLiveMode && paymentActions.paymentState.paymentMethod !== "apl") {
|
|
21
|
+
paymentActions.handleFieldChange("paymentMethod", "apl");
|
|
22
|
+
}
|
|
23
|
+
}, [
|
|
24
|
+
isLiveMode,
|
|
25
|
+
paymentActions.paymentState.paymentMethod,
|
|
26
|
+
paymentActions.handleFieldChange,
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
if (isLiveMode && paymentActions.paymentState.paymentMethod !== "apl") {
|
|
30
|
+
return (
|
|
31
|
+
<Box
|
|
32
|
+
style={{
|
|
33
|
+
display: "flex",
|
|
34
|
+
flexDirection: "column",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "center",
|
|
37
|
+
gap: "8px",
|
|
38
|
+
marginTop: "44px",
|
|
39
|
+
}}
|
|
40
|
+
>
|
|
41
|
+
<Typography variant="pi" textColor="neutral600">
|
|
42
|
+
Test Payments are only works in test mode.
|
|
43
|
+
</Typography>
|
|
44
|
+
<Typography variant="pi" textColor="neutral600">
|
|
45
|
+
Please switch to test mode in plugin settings to use test payments.
|
|
46
|
+
</Typography>
|
|
47
|
+
</Box>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (paymentActions.paymentState.paymentMethod === "apl") {
|
|
52
|
+
return (
|
|
53
|
+
<ApplePayPanel
|
|
54
|
+
onNavigateToConfig={onNavigateToConfig}
|
|
55
|
+
isLiveMode={isLiveMode}
|
|
56
|
+
paymentActions={paymentActions}
|
|
57
|
+
settings={settings}
|
|
58
|
+
/>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<Box
|
|
64
|
+
className="payment-container"
|
|
65
|
+
paddingTop={8}
|
|
66
|
+
paddingBottom={8}
|
|
67
|
+
paddingLeft={8}
|
|
68
|
+
paddingRight={8}
|
|
69
|
+
>
|
|
70
|
+
<Flex direction="column" alignItems="stretch" gap={6}>
|
|
71
|
+
<Box
|
|
72
|
+
style={{
|
|
73
|
+
display: "flex",
|
|
74
|
+
flexDirection: "column",
|
|
75
|
+
alignItems: "flex-start",
|
|
76
|
+
gap: "8px",
|
|
77
|
+
}}
|
|
78
|
+
>
|
|
79
|
+
<Typography
|
|
80
|
+
variant="beta"
|
|
81
|
+
as="h2"
|
|
82
|
+
className="payment-title"
|
|
83
|
+
style={{ fontSize: "20px", marginBottom: "4px" }}
|
|
84
|
+
>
|
|
85
|
+
Payment Actions
|
|
86
|
+
</Typography>
|
|
87
|
+
<Typography
|
|
88
|
+
variant="pi"
|
|
89
|
+
textColor="neutral600"
|
|
90
|
+
className="payment-subtitle"
|
|
91
|
+
style={{ fontSize: "14px" }}
|
|
92
|
+
>
|
|
93
|
+
Process payments, captures, and refunds with multiple payment
|
|
94
|
+
methods
|
|
95
|
+
</Typography>
|
|
96
|
+
</Box>
|
|
97
|
+
|
|
98
|
+
<PaymentMethodSelector
|
|
99
|
+
paymentActions={paymentActions}
|
|
100
|
+
onNavigateToConfig={onNavigateToConfig}
|
|
101
|
+
isLiveMode={isLiveMode}
|
|
102
|
+
/>
|
|
103
|
+
|
|
104
|
+
<Accordion.Root>
|
|
105
|
+
{/* Preauthorization */}
|
|
106
|
+
<Accordion.Item value="preauthorization">
|
|
107
|
+
<Accordion.Header>
|
|
108
|
+
<Accordion.Trigger>Preauthorization</Accordion.Trigger>
|
|
109
|
+
</Accordion.Header>
|
|
110
|
+
<Accordion.Content>
|
|
111
|
+
<Box
|
|
112
|
+
className="payment-form-section"
|
|
113
|
+
style={{
|
|
114
|
+
opacity: isLiveMode ? 0.5 : 1,
|
|
115
|
+
pointerEvents: isLiveMode ? "none" : "auto",
|
|
116
|
+
}}
|
|
117
|
+
>
|
|
118
|
+
<PreauthorizationForm
|
|
119
|
+
paymentActions={paymentActions}
|
|
120
|
+
settings={settings}
|
|
121
|
+
/>
|
|
122
|
+
</Box>
|
|
123
|
+
</Accordion.Content>
|
|
124
|
+
</Accordion.Item>
|
|
125
|
+
{/* Authorization */}
|
|
126
|
+
<Accordion.Item value="authorization">
|
|
127
|
+
<Accordion.Header>
|
|
128
|
+
<Accordion.Trigger>Authorization</Accordion.Trigger>
|
|
129
|
+
</Accordion.Header>
|
|
130
|
+
<Accordion.Content>
|
|
131
|
+
<Box className="payment-form-section">
|
|
132
|
+
<AuthorizationForm
|
|
133
|
+
paymentActions={paymentActions}
|
|
134
|
+
settings={settings}
|
|
135
|
+
/>
|
|
136
|
+
</Box>
|
|
137
|
+
</Accordion.Content>
|
|
138
|
+
</Accordion.Item>
|
|
139
|
+
{/* Capture */}
|
|
140
|
+
<Accordion.Item value="capture">
|
|
141
|
+
<Accordion.Header>
|
|
142
|
+
<Accordion.Trigger>Capture</Accordion.Trigger>
|
|
143
|
+
</Accordion.Header>
|
|
144
|
+
<Accordion.Content>
|
|
145
|
+
<Box
|
|
146
|
+
className="payment-form-section"
|
|
147
|
+
style={{
|
|
148
|
+
opacity: isLiveMode ? 0.5 : 1,
|
|
149
|
+
pointerEvents: isLiveMode ? "none" : "auto",
|
|
150
|
+
}}
|
|
151
|
+
>
|
|
152
|
+
<CaptureForm paymentActions={paymentActions} />
|
|
153
|
+
</Box>
|
|
154
|
+
</Accordion.Content>
|
|
155
|
+
</Accordion.Item>
|
|
156
|
+
{/* Refund */}
|
|
157
|
+
<Accordion.Item value="refund">
|
|
158
|
+
<Accordion.Header>
|
|
159
|
+
<Accordion.Trigger>Refund</Accordion.Trigger>
|
|
160
|
+
</Accordion.Header>
|
|
161
|
+
<Accordion.Content>
|
|
162
|
+
<Box
|
|
163
|
+
className="payment-form-section"
|
|
164
|
+
style={{
|
|
165
|
+
opacity: isLiveMode ? 0.5 : 1,
|
|
166
|
+
pointerEvents: isLiveMode ? "none" : "auto",
|
|
167
|
+
}}
|
|
168
|
+
>
|
|
169
|
+
<RefundForm paymentActions={paymentActions} />
|
|
170
|
+
</Box>
|
|
171
|
+
</Accordion.Content>
|
|
172
|
+
</Accordion.Item>
|
|
173
|
+
</Accordion.Root>
|
|
174
|
+
|
|
175
|
+
<hr className="payment-divider" />
|
|
176
|
+
|
|
177
|
+
<PaymentResult
|
|
178
|
+
paymentError={paymentActions.paymentError}
|
|
179
|
+
paymentResult={paymentActions.paymentResult}
|
|
180
|
+
/>
|
|
181
|
+
|
|
182
|
+
<Box paddingTop={4}>
|
|
183
|
+
<Typography variant="sigma" textColor="neutral600">
|
|
184
|
+
Note: These payment actions allow you to test the complete payment
|
|
185
|
+
flow: Preauthorization → Capture → Refund. Make sure to use valid
|
|
186
|
+
Transaction IDs for capture and refund operations.
|
|
187
|
+
</Typography>
|
|
188
|
+
</Box>
|
|
189
|
+
</Flex>
|
|
190
|
+
</Box>
|
|
191
|
+
);
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
export default PaymentActionsPanel;
|