strapi-plugin-payone-provider 4.6.9 → 5.6.10

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.
Files changed (104) hide show
  1. package/README.md +156 -11
  2. package/admin/src/components/Initializer/index.jsx +3 -3
  3. package/admin/src/components/PluginIcon/index.jsx +3 -3
  4. package/admin/src/index.js +33 -11
  5. package/admin/src/pages/App/components/AppHeader.jsx +17 -32
  6. package/admin/src/pages/App/components/AppTabs.jsx +36 -162
  7. package/admin/src/pages/App/components/ApplePayBtn.jsx +9 -11
  8. package/admin/src/pages/App/components/ApplePayConfig.jsx +221 -161
  9. package/admin/src/pages/App/components/ApplePayConfigPanel.jsx +33 -45
  10. package/admin/src/pages/App/components/DocsPanel.jsx +66 -1726
  11. package/admin/src/pages/App/components/GooglePayConfig.jsx +136 -169
  12. package/admin/src/pages/App/components/GooglePayConfigPanel.jsx +37 -55
  13. package/admin/src/pages/App/components/GooglePaybutton.jsx +101 -43
  14. package/admin/src/pages/App/components/RenderInput.jsx +94 -0
  15. package/admin/src/pages/App/components/StatusBadge.jsx +24 -71
  16. package/admin/src/pages/App/components/configuration/ConfigurationFields.jsx +255 -0
  17. package/admin/src/pages/App/components/configuration/ConfigurationPanel.jsx +54 -0
  18. package/admin/src/pages/App/components/configuration/TestConnection.jsx +130 -0
  19. package/admin/src/pages/App/components/docs/ApplePaySection.jsx +260 -0
  20. package/admin/src/pages/App/components/docs/BaseUrlSection.jsx +53 -0
  21. package/admin/src/pages/App/components/docs/CaptureRefundSection.jsx +113 -0
  22. package/admin/src/pages/App/components/docs/CodeBlock.jsx +59 -0
  23. package/admin/src/pages/App/components/docs/CreditCardSection.jsx +93 -0
  24. package/admin/src/pages/App/components/docs/GooglePaySection.jsx +248 -0
  25. package/admin/src/pages/App/components/docs/PayPalSection.jsx +116 -0
  26. package/admin/src/pages/App/components/docs/PaymentMethodsSection.jsx +55 -0
  27. package/admin/src/pages/App/components/docs/TableOfContents.jsx +47 -0
  28. package/admin/src/pages/App/components/docs/TestCredentialsSection.jsx +304 -0
  29. package/admin/src/pages/App/components/docs/ThreeDSecureSection.jsx +188 -0
  30. package/admin/src/pages/App/components/icons/BankIcon.jsx +1 -1
  31. package/admin/src/pages/App/components/icons/ChevronDownIcon.jsx +1 -1
  32. package/admin/src/pages/App/components/icons/ChevronUpIcon.jsx +1 -1
  33. package/admin/src/pages/App/components/icons/CreditCardIcon.jsx +1 -1
  34. package/admin/src/pages/App/components/icons/ErrorIcon.jsx +1 -1
  35. package/admin/src/pages/App/components/icons/InfoIcon.jsx +1 -1
  36. package/admin/src/pages/App/components/icons/MarkCircle.jsx +19 -0
  37. package/admin/src/pages/App/components/icons/PaymentIcon.jsx +1 -1
  38. package/admin/src/pages/App/components/icons/PendingIcon.jsx +1 -1
  39. package/admin/src/pages/App/components/icons/PersonIcon.jsx +1 -1
  40. package/admin/src/pages/App/components/icons/SuccessIcon.jsx +1 -1
  41. package/admin/src/pages/App/components/icons/WalletIcon.jsx +1 -1
  42. package/admin/src/pages/App/components/payment-actions/ApplePayPanel.jsx +51 -0
  43. package/admin/src/pages/App/components/payment-actions/AuthorizationForm.jsx +341 -0
  44. package/admin/src/pages/App/components/payment-actions/CaptureForm.jsx +128 -0
  45. package/admin/src/pages/App/components/{paymentActions → payment-actions}/CardDetailsInput.jsx +77 -72
  46. package/admin/src/pages/App/components/payment-actions/PaymentActionsPanel.jsx +194 -0
  47. package/admin/src/pages/App/components/payment-actions/PaymentMethodSelector.jsx +313 -0
  48. package/admin/src/pages/App/components/payment-actions/PaymentResult.jsx +133 -0
  49. package/admin/src/pages/App/components/payment-actions/PreauthorizationForm.jsx +280 -0
  50. package/admin/src/pages/App/components/payment-actions/RefundForm.jsx +121 -0
  51. package/admin/src/pages/App/components/transaction-history/FiltersPanel.jsx +145 -0
  52. package/admin/src/pages/App/components/transaction-history/HistoryPanel.jsx +50 -0
  53. package/admin/src/pages/App/components/transaction-history/TransactionTable.jsx +163 -0
  54. package/admin/src/pages/App/components/transaction-history/details/TransactionDetails.jsx +156 -0
  55. package/admin/src/pages/App/components/{TransactionHistoryItem.jsx → transaction-history/details/TransactionHistoryItem.jsx} +16 -28
  56. package/admin/src/pages/App/index.jsx +27 -70
  57. package/admin/src/pages/App/styles.css +46 -169
  58. package/admin/src/pages/constants/paymentConstants.js +52 -16
  59. package/admin/src/pages/hooks/use-system-theme.js +27 -0
  60. package/admin/src/pages/hooks/usePaymentActions.js +273 -210
  61. package/admin/src/pages/hooks/useSettings.js +87 -48
  62. package/admin/src/pages/hooks/useTransactionHistory.js +105 -108
  63. package/admin/src/pages/utils/api.js +57 -72
  64. package/admin/src/pages/utils/applePayConstants.js +2 -28
  65. package/admin/src/pages/utils/countryLanguageUtils.js +280 -0
  66. package/admin/src/pages/utils/getInputComponent.jsx +225 -0
  67. package/admin/src/pages/utils/googlePayConstants.js +2 -9
  68. package/admin/src/pages/utils/paymentUtils.js +13 -26
  69. package/admin/src/pages/utils/tooltipHelpers.js +18 -0
  70. package/admin/src/pages/utils/transactionTableUtils.js +60 -0
  71. package/package.json +8 -14
  72. package/server/config/index.js +18 -2
  73. package/server/controllers/payone.js +98 -31
  74. package/server/policies/index.js +2 -1
  75. package/server/policies/is-auth.js +9 -3
  76. package/server/policies/is-payone-notification.js +31 -0
  77. package/server/policies/isSuperAdmin.js +7 -5
  78. package/server/routes/index.js +11 -0
  79. package/server/services/paymentService.js +6 -22
  80. package/server/services/payone.js +10 -3
  81. package/server/services/settingsService.js +13 -3
  82. package/server/services/testConnectionService.js +11 -73
  83. package/server/services/transactionService.js +62 -99
  84. package/server/services/transactionStatusService.js +87 -0
  85. package/server/utils/normalize.js +0 -12
  86. package/server/utils/paymentMethodParams.js +0 -1
  87. package/server/utils/requestBuilder.js +34 -5
  88. package/server/utils/responseParser.js +9 -14
  89. package/strapi-admin.js +3 -1
  90. package/admin/src/pages/App/components/ConfigurationPanel.jsx +0 -517
  91. package/admin/src/pages/App/components/CustomerInfoPopover.jsx +0 -147
  92. package/admin/src/pages/App/components/HistoryPanel.jsx +0 -94
  93. package/admin/src/pages/App/components/PaymentActionsPanel.jsx +0 -280
  94. package/admin/src/pages/App/components/RawDataPopover.jsx +0 -113
  95. package/admin/src/pages/App/components/TransactionHistoryTable/TransactionHistoryTableFilters.jsx +0 -113
  96. package/admin/src/pages/App/components/TransactionHistoryTable/TransactionHistoryTablePagination.jsx +0 -180
  97. package/admin/src/pages/App/components/TransactionHistoryTable/index.jsx +0 -225
  98. package/admin/src/pages/App/components/paymentActions/ApplePayPanel.jsx +0 -95
  99. package/admin/src/pages/App/components/paymentActions/AuthorizationForm.jsx +0 -197
  100. package/admin/src/pages/App/components/paymentActions/CaptureForm.jsx +0 -65
  101. package/admin/src/pages/App/components/paymentActions/PaymentMethodSelector.jsx +0 -306
  102. package/admin/src/pages/App/components/paymentActions/PaymentResult.jsx +0 -192
  103. package/admin/src/pages/App/components/paymentActions/PreauthorizationForm.jsx +0 -142
  104. package/admin/src/pages/App/components/paymentActions/RefundForm.jsx +0 -90
@@ -1,65 +0,0 @@
1
- import React from "react";
2
- import { Box, Flex, Typography, TextInput, Button } from "@strapi/design-system";
3
- import { Play } from "@strapi/icons";
4
-
5
- const CaptureForm = ({
6
- paymentAmount,
7
- setPaymentAmount,
8
- captureTxid,
9
- setCaptureTxid,
10
- isProcessingPayment,
11
- onCapture
12
- }) => {
13
- return (
14
- <Flex direction="column" alignItems="stretch" gap={4}>
15
- <Flex direction="row" gap={2}>
16
- <Typography variant="omega" fontWeight="semiBold" textColor="neutral800" className="payment-form-title">
17
- Capture
18
- </Typography>
19
- <Typography variant="pi" textColor="neutral600" className="payment-form-description">
20
- Capture a previously authorized amount. Note: Reference parameter is
21
- not supported by Payone capture.
22
- </Typography>
23
- </Flex>
24
-
25
- <Flex gap={4} wrap="wrap">
26
- <TextInput
27
- label="Transaction ID"
28
- name="captureTxid"
29
- value={captureTxid}
30
- onChange={(e) => setCaptureTxid(e.target.value)}
31
- placeholder="Enter TxId from preauthorization"
32
- hint="Transaction ID from a previous preauthorization"
33
- className="payment-input"
34
- style={{ flex: 1, minWidth: "250px" }}
35
- />
36
-
37
- <TextInput
38
- label="Amount (in cents)"
39
- name="captureAmount"
40
- value={paymentAmount}
41
- onChange={(e) => setPaymentAmount(e.target.value)}
42
- placeholder="1000"
43
- hint="Amount in cents to capture"
44
- className="payment-input"
45
- style={{ flex: 1, minWidth: "250px" }}
46
- />
47
- </Flex>
48
-
49
- <Button
50
- variant="default"
51
- onClick={onCapture}
52
- loading={isProcessingPayment}
53
- startIcon={<Play />}
54
- style={{ maxWidth: '200px' }}
55
- className="payment-button payment-button-primary"
56
- disabled={!captureTxid.trim() || !paymentAmount.trim()}
57
- >
58
- Process Capture
59
- </Button>
60
- </Flex>
61
- );
62
- };
63
-
64
- export default CaptureForm;
65
-
@@ -1,306 +0,0 @@
1
- import React from "react";
2
- import {
3
- Box,
4
- Flex,
5
- Select,
6
- Option,
7
- Typography,
8
- Link,
9
- Alert,
10
- } from "@strapi/design-system";
11
- import pluginId from "../../../../pluginId";
12
- import {
13
- getPaymentMethodOptions,
14
- supportsCaptureMode,
15
- getCaptureModeOptions,
16
- getPaymentMethodDisplayName,
17
- } from "../../../utils/paymentUtils";
18
-
19
- const PaymentMethodSelector = ({
20
- paymentMethod,
21
- setPaymentMethod,
22
- captureMode,
23
- setCaptureMode,
24
- onNavigateToConfig,
25
- isLiveMode,
26
- }) => {
27
- return (
28
- <Box>
29
- <Flex direction="column" alignItems="stretch" gap={4}>
30
- <Select
31
- label="Select Payment Method"
32
- name="paymentMethod"
33
- value={paymentMethod}
34
- onChange={(value) => setPaymentMethod(value)}
35
- hint={`Current: ${getPaymentMethodDisplayName(paymentMethod)}`}
36
- >
37
- {getPaymentMethodOptions(isLiveMode).map((option) => (
38
- <Option key={option.value} value={option.value}>
39
- {option.label}
40
- </Option>
41
- ))}
42
- </Select>
43
- {paymentMethod === "apl" && onNavigateToConfig && (
44
- <>
45
- <Box
46
- style={{ display: "flex", flexDirection: "column", gap: "16px" }}
47
- >
48
- <Box
49
- style={{
50
- background: "transparent",
51
- padding: "16px",
52
- borderRadius: "4px",
53
- border: "1px solid #eaeaea",
54
- }}
55
- >
56
- <Typography variant="pi" style={{ lineHeight: "1.6" }}>
57
- <strong>Apple Pay requires middleware configuration</strong>{" "}
58
- to work properly. You must configure Content Security Policy
59
- (CSP) in{" "}
60
- <code
61
- style={{
62
- padding: "2px 6px",
63
- borderRadius: "3px",
64
- fontSize: "13px",
65
- }}
66
- >
67
- config/middlewares.js
68
- </code>{" "}
69
- to allow Apple Pay scripts.
70
- </Typography>
71
-
72
- <Box style={{ marginTop: "16px" }}>
73
- <Typography
74
- variant="pi"
75
- style={{
76
- fontWeight: "600",
77
- marginBottom: "8px",
78
- display: "block",
79
- }}
80
- >
81
- Required CSP directives:
82
- </Typography>
83
-
84
- <Box>
85
- <Typography
86
- variant="pi"
87
- style={{
88
- fontFamily: "monospace",
89
- fontSize: "12px",
90
- lineHeight: "1.8",
91
- }}
92
- >
93
- <div>
94
- 'script-src': ['https://applepay.cdn-apple.com',
95
- 'https://www.apple.com']
96
- </div>
97
- <div>
98
- 'connect-src': ['https://applepay.cdn-apple.com',
99
- 'https://www.apple.com']
100
- </div>
101
- <div>'frame-src': ['https://applepay.cdn-apple.com']</div>
102
- </Typography>
103
- </Box>
104
- </Box>
105
-
106
- <Box
107
- padding={2}
108
- background="warning100"
109
- style={{
110
- marginTop: "16px",
111
- borderRadius: "4px",
112
- borderLeft: "3px solid #f29d41",
113
- }}
114
- >
115
- <Typography variant="pi" style={{ fontWeight: "600" }}>
116
- ⚠️ Without this configuration, Apple Pay will NOT work!
117
- </Typography>
118
- </Box>
119
- </Box>
120
-
121
- <Box
122
- style={{
123
- background: "transparent",
124
- padding: "16px",
125
- borderRadius: "4px",
126
- border: "1px solid #eaeaea",
127
- }}
128
- >
129
- <Typography variant="pi" style={{ lineHeight: "1.6" }}>
130
- <strong>Download the domain verification file</strong> from
131
- your Payone merchant portal and place it in the following
132
- locations:
133
- </Typography>
134
-
135
- <Box>
136
- <Typography
137
- variant="pi"
138
- style={{
139
- fontFamily: "monospace",
140
- fontSize: "12px",
141
- lineHeight: "1.8",
142
- }}
143
- >
144
- <div style={{ marginBottom: "8px" }}>
145
- <strong>Strapi:</strong>{" "}
146
- <code>
147
- public/.well-known/apple-developer-merchantid-domain-association
148
- </code>
149
- </div>
150
- <div>
151
- <strong>Frontend:</strong>{" "}
152
- <code>
153
- public/.well-known/apple-developer-merchantid-domain-association
154
- </code>
155
- </div>
156
- </Typography>
157
- </Box>
158
-
159
- <Box style={{ marginTop: "16px" }}>
160
- <Typography variant="pi" style={{ lineHeight: "1.6" }}>
161
- <strong>Download URL:</strong> Get the domain verification
162
- file from Payone documentation:
163
- </Typography>
164
- <Box
165
- padding={2}
166
- background="primary100"
167
- style={{ marginTop: "8px", borderRadius: "4px" }}
168
- >
169
- <Link
170
- href="https://docs.payone.com/payment-methods/apple-pay/apple-pay-without-dev"
171
- target="_blank"
172
- rel="noopener noreferrer"
173
- style={{
174
- color: "#4945ff",
175
- textDecoration: "none",
176
- fontWeight: "500",
177
- fontSize: "14px",
178
- }}
179
- >
180
-
181
- https://docs.payone.com/payment-methods/apple-pay/apple-pay-without-dev
182
- </Link>
183
- </Box>
184
- </Box>
185
-
186
- <Box
187
- padding={2}
188
- background="danger100"
189
- style={{
190
- marginTop: "16px",
191
- borderRadius: "4px",
192
- borderLeft: "3px solid #d02b20",
193
- }}
194
- >
195
- <Typography
196
- variant="pi"
197
- textColor="danger600"
198
- style={{ fontWeight: "600" }}
199
- >
200
- ⚠️ Without this file, Apple Pay will NOT work on your
201
- domain!
202
- </Typography>
203
- </Box>
204
- </Box>
205
- </Box>
206
-
207
- <Box padding={3} borderRadius="4px">
208
- <Typography variant="pi" textColor="neutral600">
209
- Configure Apple Pay settings:{" "}
210
- <Link
211
- href={`/plugins/${pluginId}/apple-pay-config`}
212
- onClick={(e) => {
213
- e.preventDefault();
214
- onNavigateToConfig("apple-pay");
215
- }}
216
- style={{
217
- cursor: "pointer",
218
- textDecoration: "underline",
219
- color: "#0066ff",
220
- }}
221
- >
222
- /plugins/{pluginId}/apple-pay-config
223
- </Link>
224
- </Typography>
225
- </Box>
226
- </>
227
- )}
228
- {paymentMethod === "gpp" && onNavigateToConfig && (
229
- <>
230
- <Alert
231
- closeLabel="Close"
232
- title="⚠️ Important: Middleware Configuration Required"
233
- variant="warning"
234
- >
235
- <Typography variant="pi" marginTop={2}>
236
- <strong>Google Pay requires middleware configuration</strong> to
237
- work properly. You must configure Content Security Policy (CSP)
238
- in <code>config/middlewares.js</code> to allow Google Pay
239
- scripts, otherwise Google Pay will NOT work.
240
- </Typography>
241
- <Typography variant="pi" marginTop={2}>
242
- Required CSP directives for Google Pay:
243
- </Typography>
244
- <Box
245
- marginTop={2}
246
- padding={2}
247
- background="neutral100"
248
- borderRadius="4px"
249
- >
250
- <Typography
251
- variant="pi"
252
- style={{ fontFamily: "monospace", fontSize: "12px" }}
253
- >
254
- 'script-src': ['https://pay.google.com']
255
- <br />
256
- 'connect-src': ['https://pay.google.com']
257
- <br />
258
- 'frame-src': ['https://pay.google.com']
259
- </Typography>
260
- </Box>
261
- <Typography variant="pi" marginTop={2} fontWeight="bold">
262
- ⚠️ Without this configuration, Google Pay will NOT work!
263
- </Typography>
264
- </Alert>
265
- <Box padding={3} background="neutral100" borderRadius="4px">
266
- <Typography variant="pi" textColor="neutral600">
267
- Configure Google Pay settings:{" "}
268
- <Link
269
- href={`/plugins/${pluginId}/google-pay-config`}
270
- onClick={(e) => {
271
- e.preventDefault();
272
- onNavigateToConfig("google-pay");
273
- }}
274
- style={{
275
- cursor: "pointer",
276
- textDecoration: "underline",
277
- color: "#0066ff",
278
- }}
279
- >
280
- /plugins/{pluginId}/google-pay-config
281
- </Link>
282
- </Typography>
283
- </Box>
284
- </>
285
- )}
286
- {paymentMethod !== "apl" && supportsCaptureMode(paymentMethod) && (
287
- <Select
288
- label="Capture Mode"
289
- name="captureMode"
290
- value={captureMode}
291
- onChange={(value) => setCaptureMode(value)}
292
- hint="Select capture mode for wallet payments"
293
- >
294
- {getCaptureModeOptions().map((option) => (
295
- <Option key={option.value} value={option.value}>
296
- {option.label}
297
- </Option>
298
- ))}
299
- </Select>
300
- )}
301
- </Flex>
302
- </Box>
303
- );
304
- };
305
-
306
- export default PaymentMethodSelector;
@@ -1,192 +0,0 @@
1
- import React from "react";
2
- import {
3
- Box,
4
- Card,
5
- CardBody,
6
- Divider,
7
- Flex,
8
- Stack,
9
- Typography,
10
- Alert,
11
- } from "@strapi/design-system";
12
- import StatusBadge from "../StatusBadge";
13
- import { formatTransactionData } from "../../../utils/formatTransactionData";
14
-
15
- const PaymentResult = ({ paymentError, paymentResult }) => {
16
- if (!paymentError && !paymentResult) {
17
- return null;
18
- }
19
-
20
- const status = paymentResult?.status || paymentResult?.Status || "";
21
- const errorCode =
22
- paymentResult?.errorcode ||
23
- paymentResult?.errorCode ||
24
- paymentResult?.ErrorCode;
25
- const errorMessage =
26
- paymentResult?.errormessage ||
27
- paymentResult?.errorMessage ||
28
- paymentResult?.ErrorMessage;
29
- const customerMessage =
30
- paymentResult?.customermessage ||
31
- paymentResult?.customerMessage ||
32
- paymentResult?.CustomerMessage;
33
- const isError = status === "ERROR" || status === "INVALID" || errorCode;
34
-
35
- return (
36
- <>
37
- {paymentError && (
38
- <Alert variant="danger" title="Error" className="payment-alert">
39
- {paymentError}
40
- </Alert>
41
- )}
42
-
43
- {paymentResult && (
44
- <Card className="payment-result-card">
45
- <CardBody>
46
- <Stack spacing={4}>
47
- <Flex justifyContent="space-between" alignItems="center">
48
- <Typography
49
- variant="delta"
50
- as="h3"
51
- className="payment-section-title"
52
- >
53
- Payment Result
54
- </Typography>
55
- {(status || paymentResult.Status) && (
56
- <StatusBadge status={status || paymentResult.Status} />
57
- )}
58
- </Flex>
59
-
60
- <hr className="payment-divider" style={{ margin: "16px 0" }} />
61
-
62
- {/* Show error information prominently if error */}
63
- {isError && (
64
- <Alert variant="danger" title="Transaction Failed">
65
- <Stack spacing={2}>
66
- {errorCode && (
67
- <Typography variant="pi">
68
- <strong>Error Code:</strong> {errorCode}
69
- </Typography>
70
- )}
71
- {errorMessage && (
72
- <Typography variant="pi">
73
- <strong>Error Message:</strong> {errorMessage}
74
- </Typography>
75
- )}
76
- {customerMessage && (
77
- <Typography variant="pi">
78
- <strong>Customer Message:</strong> {customerMessage}
79
- </Typography>
80
- )}
81
- </Stack>
82
- </Alert>
83
- )}
84
-
85
- <Box>
86
- <Typography
87
- variant="omega"
88
- fontWeight="semiBold"
89
- marginBottom={2}
90
- >
91
- Full Response Details:
92
- </Typography>
93
- <Stack spacing={3}>
94
- {formatTransactionData(paymentResult).map((item, index) => (
95
- <Flex
96
- key={index}
97
- justifyContent="space-between"
98
- alignItems="start"
99
- style={{
100
- padding: "8px 0",
101
- borderBottom:
102
- index <
103
- formatTransactionData(paymentResult).length - 1
104
- ? "1px solid #e8e8ea"
105
- : "none",
106
- }}
107
- >
108
- <Typography
109
- variant="pi"
110
- textColor="neutral600"
111
- style={{ minWidth: "200px", fontWeight: "500" }}
112
- >
113
- {item.key}:
114
- </Typography>
115
- <Typography
116
- variant="pi"
117
- style={{
118
- flex: 1,
119
- textAlign: "right",
120
- fontWeight: "400",
121
- wordBreak: "break-word",
122
- fontFamily: item.key.toLowerCase().includes("raw")
123
- ? "monospace"
124
- : "inherit",
125
- fontSize: item.key.toLowerCase().includes("raw")
126
- ? "11px"
127
- : "inherit",
128
- }}
129
- >
130
- {item.value}
131
- </Typography>
132
- </Flex>
133
- ))}
134
- </Stack>
135
- </Box>
136
-
137
- {/* 3DS Required Warning */}
138
- {paymentResult?.is3DSRequired && !paymentResult?.redirectUrl && (
139
- <Alert
140
- variant="warning"
141
- title="3D Secure Authentication Required"
142
- >
143
- <Stack spacing={2}>
144
- <Typography variant="pi">
145
- Payone requires 3D Secure authentication, but no redirect
146
- URL was provided in the response.
147
- </Typography>
148
- <Typography variant="pi" fontWeight="semiBold">
149
- Possible solutions:
150
- </Typography>
151
- <Typography
152
- variant="pi"
153
- component="ul"
154
- style={{ marginLeft: "20px" }}
155
- >
156
- <li>
157
- Check Payone portal configuration for 3DS settings
158
- </li>
159
- <li>
160
- Verify that redirect URLs (successurl, errorurl,
161
- backurl) are properly configured
162
- </li>
163
- <li>
164
- Ensure you're using test mode with proper test
165
- credentials
166
- </li>
167
- <li>
168
- Check if 3dscheck request is needed before authorization
169
- </li>
170
- </Typography>
171
- <Typography
172
- variant="pi"
173
- textColor="neutral600"
174
- marginTop={2}
175
- >
176
- <strong>Error Code:</strong>{" "}
177
- {paymentResult?.errorCode ||
178
- paymentResult?.ErrorCode ||
179
- "4219"}
180
- </Typography>
181
- </Stack>
182
- </Alert>
183
- )}
184
- </Stack>
185
- </CardBody>
186
- </Card>
187
- )}
188
- </>
189
- );
190
- };
191
-
192
- export default PaymentResult;