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
|
@@ -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;
|