strapi-plugin-payone-provider 5.6.13 → 5.6.14

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 (39) hide show
  1. package/admin/src/index.js +14 -20
  2. package/admin/src/pages/App/components/AppHeader.jsx +16 -17
  3. package/admin/src/pages/App/components/AppTabs.jsx +14 -15
  4. package/admin/src/pages/App/components/ApplePayBtn.jsx +9 -14
  5. package/admin/src/pages/App/components/ApplePayConfig.jsx +25 -26
  6. package/admin/src/pages/App/components/ApplePayConfigPanel.jsx +4 -4
  7. package/admin/src/pages/App/components/DocsPanel.jsx +8 -21
  8. package/admin/src/pages/App/components/GooglePayConfig.jsx +16 -14
  9. package/admin/src/pages/App/components/GooglePayConfigPanel.jsx +4 -4
  10. package/admin/src/pages/App/components/GooglePaybutton.jsx +6 -5
  11. package/admin/src/pages/App/components/configuration/ConfigurationFields.jsx +39 -47
  12. package/admin/src/pages/App/components/configuration/ConfigurationPanel.jsx +5 -4
  13. package/admin/src/pages/App/components/configuration/TestConnection.jsx +19 -36
  14. package/admin/src/pages/App/components/payment-actions/ApplePayPanel.jsx +4 -4
  15. package/admin/src/pages/App/components/payment-actions/AuthorizationForm.jsx +12 -19
  16. package/admin/src/pages/App/components/payment-actions/CaptureForm.jsx +15 -23
  17. package/admin/src/pages/App/components/payment-actions/CardDetailsInput.jsx +20 -19
  18. package/admin/src/pages/App/components/payment-actions/PaymentActionsPanel.jsx +13 -24
  19. package/admin/src/pages/App/components/payment-actions/PaymentMethodSelector.jsx +8 -6
  20. package/admin/src/pages/App/components/payment-actions/PaymentResult.jsx +6 -10
  21. package/admin/src/pages/App/components/payment-actions/PreauthorizationForm.jsx +12 -19
  22. package/admin/src/pages/App/components/payment-actions/RefundForm.jsx +15 -22
  23. package/admin/src/pages/App/components/transaction-history/FiltersPanel.jsx +83 -84
  24. package/admin/src/pages/App/components/transaction-history/HistoryPanel.jsx +7 -17
  25. package/admin/src/pages/App/components/transaction-history/ImportExportBar.jsx +153 -0
  26. package/admin/src/pages/App/components/transaction-history/TransactionTable.jsx +22 -15
  27. package/admin/src/pages/hooks/usePluginTranslations.js +12 -0
  28. package/admin/src/pages/utils/api.js +27 -0
  29. package/admin/src/translations/de.json +235 -0
  30. package/admin/src/translations/en.json +235 -0
  31. package/admin/src/translations/fr.json +235 -0
  32. package/admin/src/translations/ru.json +235 -0
  33. package/admin/src/utils/prefixPluginTranslations.js +13 -0
  34. package/package.json +2 -2
  35. package/server/controllers/payone.js +70 -0
  36. package/server/routes/index.js +16 -0
  37. package/server/services/payone.js +8 -0
  38. package/server/services/transactionService.js +80 -1
  39. package/server/utils/csvTransactions.js +82 -0
@@ -0,0 +1,235 @@
1
+ {
2
+ "plugin.name": "Fournisseur Payone",
3
+ "tabs.history": "Historique des transactions",
4
+ "tabs.configuration": "Configuration",
5
+ "tabs.paymentActions": "Actions de paiement",
6
+ "tabs.documentation": "Documentation",
7
+ "header.subtitle": "Configurez votre intégration Payone et gérez les transactions de paiement",
8
+ "header.subtitleApplePay": "Configurer les paramètres Apple Pay pour votre passerelle de paiement",
9
+ "header.subtitleGooglePay": "Configurer les paramètres Google Pay pour votre passerelle de paiement",
10
+ "header.backToMain": "Retour à l'accueil",
11
+ "header.saveConfiguration": "Enregistrer la configuration",
12
+ "error.tabError": "Une erreur s'est produite lors du chargement de cet onglet.",
13
+ "error.tabErrorHint": "Essayez de changer d'onglet ou de recharger la page.",
14
+ "history.title": "Gestion des transactions",
15
+ "history.subtitle": "Consulter et filtrer toutes les transactions de paiement traitées via Payone",
16
+ "history.note": "Affiche toutes les transactions Payone traitées par ce plugin. Les transactions sont enregistrées automatiquement avec les données détaillées des requêtes et réponses.",
17
+ "table.txid": "TxId",
18
+ "table.reference": "Référence",
19
+ "table.amount": "Montant",
20
+ "table.paymentMethod": "Mode de paiement",
21
+ "table.type": "Type",
22
+ "table.status": "Statut",
23
+ "table.createdAt": "Créé le",
24
+ "table.updatedAt": "Mis à jour le",
25
+ "table.details": "Détails",
26
+ "table.hide": "Masquer",
27
+ "table.na": "n/d",
28
+ "filters.search": "Rechercher",
29
+ "filters.searchPlaceholder": "Rechercher par référence ou ID de transaction",
30
+ "filters.searchTooltip": "Rechercher par référence ou ID de transaction pour filtrer",
31
+ "filters.status": "Statut",
32
+ "filters.allStatuses": "Tous les statuts",
33
+ "filters.statusTooltip": "Filtrer par statut (Approuvé, Erreur, Redirection, Invalide, En attente, Annulé)",
34
+ "filters.requestType": "Type de requête",
35
+ "filters.allTypes": "Tous les types",
36
+ "filters.requestTypeTooltip": "Filtrer par type (Préautorisation, Autorisation, Capture, Remboursement)",
37
+ "filters.paymentMethod": "Mode de paiement",
38
+ "filters.allMethods": "Tous les modes",
39
+ "filters.paymentMethodTooltip": "Filtrer par mode de paiement (Carte, PayPal, Google Pay, Apple Pay, Sofort, SEPA)",
40
+ "filters.dateFrom": "Date de début",
41
+ "filters.dateTo": "Date de fin",
42
+ "filters.dateFromTooltip": "Afficher les transactions à partir de cette date.",
43
+ "filters.dateToTooltip": "Afficher les transactions jusqu'à cette date.",
44
+ "filters.reset": "Réinitialiser",
45
+ "status.approved": "Approuvé",
46
+ "status.error": "Erreur",
47
+ "status.redirect": "Redirection",
48
+ "status.invalid": "Invalide",
49
+ "status.pending": "En attente",
50
+ "status.cancelled": "Annulé",
51
+ "requestType.preauthorization": "Préautorisation",
52
+ "requestType.authorization": "Autorisation",
53
+ "requestType.capture": "Capture",
54
+ "requestType.refund": "Remboursement",
55
+ "paymentMethod.creditCard": "Carte bancaire",
56
+ "paymentMethod.paypal": "PayPal",
57
+ "paymentMethod.googlePay": "Google Pay",
58
+ "paymentMethod.applePay": "Apple Pay",
59
+ "paymentMethod.sofort": "Sofort",
60
+ "paymentMethod.sepa": "Prélèvement SEPA",
61
+ "config.title": "Configuration de l'API Payone",
62
+ "config.subtitle": "Configurer les paramètres de votre passerelle de paiement Payone",
63
+ "config.note": "Ces paramètres sont utilisés pour toutes les requêtes API Payone. Utilisez les identifiants correspondant au mode sélectionné.",
64
+ "config.fields.aid": "ID de compte (aid)",
65
+ "config.fields.aidTooltip": "Votre ID de compte Payone",
66
+ "config.fields.portalid": "ID de portail",
67
+ "config.fields.portalidTooltip": "Votre ID de portail Payone",
68
+ "config.fields.mid": "ID marchand (mid)",
69
+ "config.fields.midTooltip": "Votre ID marchand Payone",
70
+ "config.fields.key": "Clé de portail",
71
+ "config.fields.keyTooltip": "Votre clé de portail Payone (sera chiffrée)",
72
+ "config.fields.domainName": "Nom de domaine",
73
+ "config.fields.domainNameTooltip": "Votre nom de domaine Payone",
74
+ "config.fields.displayName": "Nom d'affichage",
75
+ "config.fields.displayNameTooltip": "Nom d'affichage des modes de paiement (optionnel)",
76
+ "config.fields.mode": "Mode",
77
+ "config.fields.modeTooltip": "Sélectionner le mode API",
78
+ "config.fields.modeTest": "Test",
79
+ "config.fields.modeLive": "Production",
80
+ "config.fields.enable3DSecure": "Activer 3D Secure",
81
+ "config.fields.enable3DSecureTooltip": "Activer l'authentification 3D Secure pour les paiements par carte",
82
+ "config.fields.enabled": "Activé",
83
+ "config.fields.disabled": "Désactivé",
84
+ "config.fields.apiVersion": "Version de l'API",
85
+ "config.fields.apiVersionTooltip": "Version de l'API Payone",
86
+ "config.paymentMethods.title": "Activer ou désactiver les modes de paiement pour votre intégration Payone",
87
+ "config.paymentMethods.creditCard": "Carte bancaire (Visa, Mastercard)",
88
+ "config.paymentMethods.creditCardTooltip": "Activer ou désactiver les paiements par carte",
89
+ "config.paymentMethods.paypal": "PayPal",
90
+ "config.paymentMethods.paypalTooltip": "Activer ou désactiver PayPal",
91
+ "config.paymentMethods.googlePay": "Google Pay",
92
+ "config.paymentMethods.googlePayTooltip": "Activer ou désactiver Google Pay",
93
+ "config.paymentMethods.applePay": "Apple Pay",
94
+ "config.paymentMethods.applePayTooltip": "Activer ou désactiver Apple Pay",
95
+ "config.paymentMethods.sofort": "Sofort Banking",
96
+ "config.paymentMethods.sofortTooltip": "Activer ou désactiver Sofort",
97
+ "config.paymentMethods.sepa": "Prélèvement SEPA",
98
+ "config.paymentMethods.sepaTooltip": "Activer ou désactiver le prélèvement SEPA",
99
+ "config.buttons.applePayConfig": "Config. Apple Pay",
100
+ "config.buttons.googlePayConfig": "Config. Google Pay",
101
+ "testConnection.title": "Tester la connexion",
102
+ "testConnection.description": "Vérifiez votre configuration Payone en testant la connexion API",
103
+ "testConnection.disabledInLive": "Le test de connexion est désactivé en mode production.",
104
+ "testConnection.button": "Tester la connexion",
105
+ "testConnection.testing": "Test en cours...",
106
+ "testConnection.mode": "Mode",
107
+ "testConnection.aid": "AID",
108
+ "testConnection.portalid": "ID de portail",
109
+ "testConnection.errorCode": "Code d'erreur",
110
+ "testConnection.errorMessage": "Message d'erreur",
111
+ "testConnection.customerMessage": "Message client",
112
+ "paymentActions.title": "Actions de paiement",
113
+ "paymentActions.subtitle": "Effectuer des préautorisations, captures, remboursements et autres opérations.",
114
+ "paymentActions.testModeOnly": "Les paiements test ne fonctionnent qu'en mode test.",
115
+ "paymentActions.switchToTestMode": "Passez en mode test dans les paramètres du plugin pour utiliser les paiements test.",
116
+ "paymentActions.note": "Ces actions permettent de tester le flux de paiement complet : préautorisation → capture → remboursement. Utilisez des ID de transaction valides pour les opérations de capture et de remboursement.",
117
+ "preauth.title": "Préautorisation",
118
+ "preauth.description": "Réserver un montant sur une carte sans le capturer immédiatement.",
119
+ "preauth.amount": "Montant *",
120
+ "preauth.amountPlaceholder": "Saisir le montant (ex. 1000 pour 10,00 €)",
121
+ "preauth.amountTooltip": "Montant en centimes (ex. 1000 = 10,00 €)",
122
+ "preauth.firstName": "Prénom",
123
+ "preauth.lastName": "Nom",
124
+ "preauth.submit": "Préautoriser",
125
+ "paymentMethodSelector.label": "Sélectionner le mode de paiement",
126
+ "paymentMethodSelector.placeholder": "Sélectionner le mode de paiement",
127
+ "paymentMethodSelector.tooltip": "Sélectionnez le mode de paiement pour cette transaction",
128
+ "paymentMethodSelector.hintCurrent": "Actuel",
129
+ "paymentMethodSelector.applePayConfigRequired": "Apple Pay nécessite une configuration middleware. Configurez la Content Security Policy (CSP) dans config/middlewares.",
130
+ "auth.title": "Autorisation",
131
+ "auth.description": "Autoriser un paiement avec une préautorisation existante.",
132
+ "capture.title": "Capture",
133
+ "capture.description": "Capturer un montant précédemment préautorisé.",
134
+ "refund.title": "Remboursement",
135
+ "refund.description": "Rembourser un paiement capturé.",
136
+ "docs.title": "Plugin Payone – Guide d'intégration frontend",
137
+ "docs.subtitle": "Documentation pour intégrer les moyens de paiement Payone dans votre application",
138
+ "docs.moreInfo": "Pour plus d'informations, consultez la documentation Payone ou contactez votre chargé de compte Payone.",
139
+ "paymentResult.title": "Résultat du paiement",
140
+ "paymentResult.errorTitle": "Erreur",
141
+ "capture.placeholderTxid": "Saisir le TxId de la préautorisation",
142
+ "capture.tooltipTxid": "ID de transaction d'une préautorisation précédente",
143
+ "capture.tooltipAmount": "Montant en centimes à capturer",
144
+ "capture.sequenceNumber": "Numéro de séquence",
145
+ "capture.tooltipSequence": "Numéro de séquence pour cette capture (1-127), par défaut 1",
146
+ "capture.submit": "Capture",
147
+ "refund.placeholderTxid": "Saisir le TxId de la capture",
148
+ "refund.tooltipTxid": "ID de transaction d'une capture précédente",
149
+ "refund.sequenceNumber": "Numéro de séquence",
150
+ "refund.tooltipSequence": "Numéro de séquence pour ce remboursement (1-127), par défaut 2 pour le premier remboursement",
151
+ "refund.tooltipAmount": "Montant en centimes à rembourser (sera automatiquement négatif)",
152
+ "refund.submit": "Remboursement",
153
+ "common.transactionId": "ID de transaction *",
154
+ "common.amount": "Montant *",
155
+ "common.currency": "Devise",
156
+ "auth.submit": "Autoriser",
157
+ "export.json": "Exporter JSON",
158
+ "export.csv": "Exporter CSV",
159
+ "export.success": "Export terminé",
160
+ "export.error": "Échec de l'export",
161
+ "import.button": "Importer",
162
+ "import.success": "{{count}} transaction(s) importée(s).",
163
+ "import.partial": "Import : {{imported}} importée(s), {{failed}} en échec.",
164
+ "import.error": "Échec de l'import",
165
+ "card.testCards": "Cartes test 3D Secure",
166
+ "card.selectTestCard": "Sélectionner une carte test 3DS pour remplir automatiquement",
167
+ "card.testCardsTooltip": "Ces cartes déclencheront une redirection 3DS. Mot de passe : 12345",
168
+ "card.selectTestCardOption": "-- Sélectionner une carte test --",
169
+ "card.cardType": "Type de carte *",
170
+ "card.cardTypeTooltip": "Sélectionner le type de carte",
171
+ "card.cardNumber": "Numéro de carte (PAN) *",
172
+ "card.cardNumberPlaceholder": "Entrer le numéro de carte",
173
+ "card.cardNumberTooltip": "Numéro de carte bancaire (PAN)",
174
+ "card.expiryDate": "Date d'expiration *",
175
+ "card.expiryPlaceholder": "AAMM (ex. 2512)",
176
+ "card.expiryTooltip": "Format AAMM (ex. 2512 = décembre 2025)",
177
+ "card.cvc": "CVC/CVV *",
178
+ "card.cvcPlaceholder": "123 ou 1234",
179
+ "card.cvcAmex": "4 chiffres pour AMEX",
180
+ "card.cvcOther": "3 chiffres pour les autres cartes",
181
+ "card.3dsDocLink": "Pour les numéros de cartes test et la doc 3D Secure, consulter",
182
+ "card.3dsDocTitle": "Documentation Payone 3D Secure",
183
+ "applePayPanel.warning": "Apple Pay ne peut être testé que sur un domaine en production avec HTTPS et mode Live. Le test dans l'admin Strapi n'est pas pris en charge.",
184
+ "applePayBtn.merchantIdMissingTitle": "ID marchand manquant",
185
+ "applePayBtn.merchantIdMissing": "L'ID marchand n'est pas configuré. Définissez-le dans les paramètres du plugin.",
186
+ "applePayBtn.merchantIdHint": "Vous trouverez votre merchantIdentifier dans le PMI : CONFIGURATION → PORTALS DE PAIEMENT → [Votre portail] → Configuration des types de paiement.",
187
+ "applePayBtn.liveModeOnly": "Apple Pay uniquement en mode Live",
188
+ "applePayBtn.liveModeMessage": "Apple Pay est pris en charge uniquement en mode live. Le mode test sera disponible ultérieurement selon la doc Payone.",
189
+ "applePayBtn.switchToLive": "Passez en mode live dans les paramètres du plugin pour utiliser Apple Pay.",
190
+ "applePayBtn.noLocalhost": "Apple Pay ne fonctionne PAS sur localhost. Utilisez un domaine de production avec HTTPS.",
191
+ "applePayConfig.countryCode": "Code pays",
192
+ "applePayConfig.countryTooltip": "Sélectionner le pays de votre activité",
193
+ "applePayConfig.currencyCode": "Code devise",
194
+ "applePayConfig.currencyTooltip": "Devises prises en charge pour {{country}}",
195
+ "applePayConfig.noCurrencies": "Aucune devise pour ce pays. Choisissez un autre pays.",
196
+ "applePayConfig.buttonStyle": "Style du bouton",
197
+ "applePayConfig.buttonStyleTooltip": "Apparence du bouton Apple Pay",
198
+ "applePayConfig.buttonType": "Type de bouton",
199
+ "applePayConfig.buttonTypeTooltip": "Type d'action du bouton",
200
+ "applePayConfig.supportedNetworks": "Réseaux pris en charge",
201
+ "applePayConfig.supportedNetworksHint": "Sélectionner les réseaux de paiement pour {{country}}",
202
+ "applePayConfig.notAvailable": "(Non disponible)",
203
+ "applePayConfig.atLeastOneNetwork": "Au moins un réseau doit être sélectionné",
204
+ "applePayConfig.merchantCapabilities": "Fonctions marchand",
205
+ "applePayConfig.merchantCapabilitiesHint": "Sélectionner les fonctions. « 3D Secure » est requis pour la plupart des moyens de paiement.",
206
+ "applePayConfig.atLeastOneCapability": "Au moins une fonction doit être sélectionnée. « supports3DS » est recommandé.",
207
+ "applePayConfig.domainVerificationTitle": "Fichier de vérification de domaine requis",
208
+ "applePayConfig.domainVerificationDesc": "Télécharger le fichier de vérification de domaine Apple Pay",
209
+ "applePayConfig.domainVerificationDescSuffix": "dans la documentation Payone :",
210
+ "applePayConfig.downloadUrl": "URL de téléchargement :",
211
+ "applePayConfig.placeFileAt": "Placer le fichier dans :",
212
+ "applePayConfig.fileMustBeAccessible": "Le fichier doit être accessible à :",
213
+ "applePayConfig.withoutFileWarning": "Sans ce fichier, Apple Pay ne fonctionnera PAS sur votre domaine !",
214
+ "applePayConfigPanel.note": "La configuration Apple Pay est utilisée pour les requêtes Apple Pay. Configurez l'identifiant marchand, les réseaux et les fonctions pour votre région.",
215
+ "applePayConfigPanel.save": "Enregistrer la configuration",
216
+ "googlePay.loading": "Chargement de Google Pay...",
217
+ "googlePay.notAvailable": "Google Pay n'est pas disponible",
218
+ "googlePay.paymentTitle": "Paiement Google Pay",
219
+ "googlePay.paymentHint": "Cliquez sur le bouton pour payer avec Google Pay. Le jeton sera envoyé automatiquement à Payone.",
220
+ "googlePayConfig.countryCode": "Code pays",
221
+ "googlePayConfig.countryTooltip": "Sélectionner le pays de votre activité",
222
+ "googlePayConfig.currencyCode": "Code devise",
223
+ "googlePayConfig.currencyTooltip": "Sélectionner la devise des transactions",
224
+ "googlePayConfig.merchantName": "Nom du marchand",
225
+ "googlePayConfig.merchantNamePlaceholder": "Nom de votre boutique",
226
+ "googlePayConfig.merchantNameTooltip": "Nom de votre entreprise tel qu'il apparaîtra dans Google Pay",
227
+ "googlePayConfig.allowedNetworks": "Réseaux de cartes autorisés",
228
+ "googlePayConfig.allowedNetworksHint": "Sélectionner les réseaux de cartes acceptés",
229
+ "googlePayConfig.atLeastOneNetwork": "Au moins un réseau de cartes doit être sélectionné",
230
+ "googlePayConfig.allowedAuthMethods": "Méthodes d'authentification autorisées",
231
+ "googlePayConfig.allowedAuthMethodsHint": "Sélectionner les méthodes d'authentification pour les cartes",
232
+ "googlePayConfig.atLeastOneAuth": "Au moins une méthode d'authentification doit être sélectionnée",
233
+ "googlePayConfigPanel.note": "La configuration Google Pay est utilisée pour les requêtes Google Pay. Configurez les réseaux de cartes, les méthodes d'authentification et les infos marchand pour votre région.",
234
+ "googlePayConfigPanel.save": "Enregistrer la configuration"
235
+ }
@@ -0,0 +1,235 @@
1
+ {
2
+ "plugin.name": "Провайдер Payone",
3
+ "tabs.history": "История транзакций",
4
+ "tabs.configuration": "Настройки",
5
+ "tabs.paymentActions": "Платёжные действия",
6
+ "tabs.documentation": "Документация",
7
+ "header.subtitle": "Настройте интеграцию Payone и управляйте платёжными транзакциями",
8
+ "header.subtitleApplePay": "Настройка Apple Pay для вашего платёжного шлюза",
9
+ "header.subtitleGooglePay": "Настройка Google Pay для вашего платёжного шлюза",
10
+ "header.backToMain": "Назад в меню",
11
+ "header.saveConfiguration": "Сохранить настройки",
12
+ "error.tabError": "Не удалось загрузить эту вкладку.",
13
+ "error.tabErrorHint": "Переключитесь на другую вкладку или обновите страницу.",
14
+ "history.title": "Управление транзакциями",
15
+ "history.subtitle": "Просмотр и фильтрация всех платёжных транзакций, обработанных через Payone",
16
+ "history.note": "Здесь отображаются все транзакции Payone, обработанные через этот плагин. Транзакции автоматически логируются с детальными данными запроса и ответа.",
17
+ "table.txid": "TxId",
18
+ "table.reference": "Референс",
19
+ "table.amount": "Сумма",
20
+ "table.paymentMethod": "Способ оплаты",
21
+ "table.type": "Тип",
22
+ "table.status": "Статус",
23
+ "table.createdAt": "Создано",
24
+ "table.updatedAt": "Обновлено",
25
+ "table.details": "Подробности",
26
+ "table.hide": "Скрыть",
27
+ "table.na": "н/д",
28
+ "filters.search": "Поиск",
29
+ "filters.searchPlaceholder": "Поиск по референсу или ID транзакции",
30
+ "filters.searchTooltip": "Поиск по референсу или ID транзакции для фильтрации",
31
+ "filters.status": "Статус",
32
+ "filters.allStatuses": "Все статусы",
33
+ "filters.statusTooltip": "Фильтр по статусу (Успешно, Ошибка, Редирект, Недействительно, В ожидании, Отменено)",
34
+ "filters.requestType": "Тип запроса",
35
+ "filters.allTypes": "Все типы",
36
+ "filters.requestTypeTooltip": "Фильтр по типу запроса (Предавторизация, Авторизация, Захват, Возврат)",
37
+ "filters.paymentMethod": "Способ оплаты",
38
+ "filters.allMethods": "Все методы",
39
+ "filters.paymentMethodTooltip": "Фильтр по способу оплаты (Карта, PayPal, Google Pay, Apple Pay, Sofort, SEPA)",
40
+ "filters.dateFrom": "Дата с",
41
+ "filters.dateTo": "Дата по",
42
+ "filters.dateFromTooltip": "Показать транзакции начиная с этой даты.",
43
+ "filters.dateToTooltip": "Показать транзакции до этой даты.",
44
+ "filters.reset": "Сбросить",
45
+ "status.approved": "Успешно",
46
+ "status.error": "Ошибка",
47
+ "status.redirect": "Редирект",
48
+ "status.invalid": "Недействительно",
49
+ "status.pending": "В ожидании",
50
+ "status.cancelled": "Отменено",
51
+ "requestType.preauthorization": "Предавторизация",
52
+ "requestType.authorization": "Авторизация",
53
+ "requestType.capture": "Захват",
54
+ "requestType.refund": "Возврат",
55
+ "paymentMethod.creditCard": "Банковская карта",
56
+ "paymentMethod.paypal": "PayPal",
57
+ "paymentMethod.googlePay": "Google Pay",
58
+ "paymentMethod.applePay": "Apple Pay",
59
+ "paymentMethod.sofort": "Sofort",
60
+ "paymentMethod.sepa": "SEPA-дебет",
61
+ "config.title": "Настройка API Payone",
62
+ "config.subtitle": "Настройка параметров платёжного шлюза Payone",
63
+ "config.note": "Эти настройки используются для всех запросов к API Payone. Убедитесь, что используете правильные учётные данные для выбранного режима.",
64
+ "config.fields.aid": "ID аккаунта (aid)",
65
+ "config.fields.aidTooltip": "Ваш ID аккаунта Payone",
66
+ "config.fields.portalid": "ID портала",
67
+ "config.fields.portalidTooltip": "Ваш ID портала Payone",
68
+ "config.fields.mid": "ID мерчанта (mid)",
69
+ "config.fields.midTooltip": "Ваш ID мерчанта Payone",
70
+ "config.fields.key": "Ключ портала",
71
+ "config.fields.keyTooltip": "Ключ портала Payone (хранится в зашифрованном виде)",
72
+ "config.fields.domainName": "Доменное имя",
73
+ "config.fields.domainNameTooltip": "Доменное имя Payone",
74
+ "config.fields.displayName": "Отображаемое имя",
75
+ "config.fields.displayNameTooltip": "Отображаемое имя способов оплаты (необязательно)",
76
+ "config.fields.mode": "Режим",
77
+ "config.fields.modeTooltip": "Выберите режим API",
78
+ "config.fields.modeTest": "Тест",
79
+ "config.fields.modeLive": "Боевой",
80
+ "config.fields.enable3DSecure": "Включить 3D Secure",
81
+ "config.fields.enable3DSecureTooltip": "Включить 3D Secure для оплаты картой",
82
+ "config.fields.enabled": "Включено",
83
+ "config.fields.disabled": "Выключено",
84
+ "config.fields.apiVersion": "Версия API",
85
+ "config.fields.apiVersionTooltip": "Версия API Payone",
86
+ "config.paymentMethods.title": "Включить или отключить способы оплаты для интеграции Payone",
87
+ "config.paymentMethods.creditCard": "Банковская карта (Visa, Mastercard)",
88
+ "config.paymentMethods.creditCardTooltip": "Включить или отключить оплату картой",
89
+ "config.paymentMethods.paypal": "PayPal",
90
+ "config.paymentMethods.paypalTooltip": "Включить или отключить PayPal",
91
+ "config.paymentMethods.googlePay": "Google Pay",
92
+ "config.paymentMethods.googlePayTooltip": "Включить или отключить Google Pay",
93
+ "config.paymentMethods.applePay": "Apple Pay",
94
+ "config.paymentMethods.applePayTooltip": "Включить или отключить Apple Pay",
95
+ "config.paymentMethods.sofort": "Sofort Banking",
96
+ "config.paymentMethods.sofortTooltip": "Включить или отключить Sofort",
97
+ "config.paymentMethods.sepa": "SEPA-дебет",
98
+ "config.paymentMethods.sepaTooltip": "Включить или отключить SEPA-дебет",
99
+ "config.buttons.applePayConfig": "Настройка Apple Pay",
100
+ "config.buttons.googlePayConfig": "Настройка Google Pay",
101
+ "testConnection.title": "Проверка соединения",
102
+ "testConnection.description": "Проверьте настройки Payone, выполнив тестовый запрос к API",
103
+ "testConnection.disabledInLive": "Проверка соединения отключена в боевом режиме.",
104
+ "testConnection.button": "Проверить соединение",
105
+ "testConnection.testing": "Проверка соединения...",
106
+ "testConnection.mode": "Режим",
107
+ "testConnection.aid": "AID",
108
+ "testConnection.portalid": "ID портала",
109
+ "testConnection.errorCode": "Код ошибки",
110
+ "testConnection.errorMessage": "Сообщение об ошибке",
111
+ "testConnection.customerMessage": "Сообщение для клиента",
112
+ "paymentActions.title": "Платёжные действия",
113
+ "paymentActions.subtitle": "Выполнение предавторизации, захвата, возврата и других операций.",
114
+ "paymentActions.testModeOnly": "Тестовые платежи доступны только в тестовом режиме.",
115
+ "paymentActions.switchToTestMode": "Переключитесь в тестовый режим в настройках плагина для тестовых платежей.",
116
+ "paymentActions.note": "Эти действия позволяют проверить полный платёжный цикл: предавторизация → захват → возврат. Используйте действительные ID транзакций для захвата и возврата.",
117
+ "preauth.title": "Предавторизация",
118
+ "preauth.description": "Резервирование суммы на карте без немедленного списания.",
119
+ "preauth.amount": "Сумма *",
120
+ "preauth.amountPlaceholder": "Введите сумму (например, 1000 для 10,00 €)",
121
+ "preauth.amountTooltip": "Сумма в копейках/центах (например, 1000 = 10,00 €)",
122
+ "preauth.firstName": "Имя",
123
+ "preauth.lastName": "Фамилия",
124
+ "preauth.submit": "Предавторизовать",
125
+ "paymentMethodSelector.label": "Выберите способ оплаты",
126
+ "paymentMethodSelector.placeholder": "Выберите способ оплаты",
127
+ "paymentMethodSelector.tooltip": "Выберите способ оплаты для этой транзакции",
128
+ "paymentMethodSelector.hintCurrent": "Текущий",
129
+ "paymentMethodSelector.applePayConfigRequired": "Для Apple Pay требуется настройка middleware. Настройте Content Security Policy (CSP) в config/middlewares.",
130
+ "auth.title": "Авторизация",
131
+ "auth.description": "Авторизация платежа по существующей предавторизации.",
132
+ "capture.title": "Захват",
133
+ "capture.description": "Списание ранее предавторизованной суммы.",
134
+ "refund.title": "Возврат",
135
+ "refund.description": "Возврат проведённого платежа.",
136
+ "docs.title": "Плагин Payone — руководство по интеграции во фронтенд",
137
+ "docs.subtitle": "Документация по интеграции способов оплаты Payone в ваше приложение",
138
+ "docs.moreInfo": "Подробнее см. в документации Payone или обратитесь к вашему менеджеру по работе с Payone.",
139
+ "paymentResult.title": "Результат платежа",
140
+ "paymentResult.errorTitle": "Ошибка",
141
+ "capture.placeholderTxid": "Введите TxId предавторизации",
142
+ "capture.tooltipTxid": "ID транзакции предыдущей предавторизации",
143
+ "capture.tooltipAmount": "Сумма в копейках для захвата",
144
+ "capture.sequenceNumber": "Номер последовательности",
145
+ "capture.tooltipSequence": "Номер последовательности для захвата (1-127), по умолчанию 1",
146
+ "capture.submit": "Захват",
147
+ "refund.placeholderTxid": "Введите TxId захвата",
148
+ "refund.tooltipTxid": "ID транзакции предыдущего захвата",
149
+ "refund.sequenceNumber": "Номер последовательности",
150
+ "refund.tooltipSequence": "Номер последовательности для возврата (1-127), по умолчанию 2 для первого возврата",
151
+ "refund.tooltipAmount": "Сумма в копейках для возврата (будет автоматически отрицательной)",
152
+ "refund.submit": "Возврат",
153
+ "common.transactionId": "ID транзакции *",
154
+ "common.amount": "Сумма *",
155
+ "common.currency": "Валюта",
156
+ "auth.submit": "Авторизовать",
157
+ "export.json": "Экспорт JSON",
158
+ "export.csv": "Экспорт CSV",
159
+ "export.success": "Экспорт выполнен",
160
+ "export.error": "Ошибка экспорта",
161
+ "import.button": "Импорт",
162
+ "import.success": "Импортировано транзакций: {{count}}.",
163
+ "import.partial": "Импорт: {{imported}} импортировано, {{failed}} с ошибкой.",
164
+ "import.error": "Ошибка импорта",
165
+ "card.testCards": "Тестовые карты 3D Secure",
166
+ "card.selectTestCard": "Выберите тестовую карту 3DS для автозаполнения",
167
+ "card.testCardsTooltip": "Эти карты вызывают редирект 3DS. Пароль: 12345",
168
+ "card.selectTestCardOption": "-- Выберите тестовую карту --",
169
+ "card.cardType": "Тип карты *",
170
+ "card.cardTypeTooltip": "Выберите тип карты",
171
+ "card.cardNumber": "Номер карты (PAN) *",
172
+ "card.cardNumberPlaceholder": "Введите номер карты",
173
+ "card.cardNumberTooltip": "Номер банковской карты (PAN)",
174
+ "card.expiryDate": "Срок действия *",
175
+ "card.expiryPlaceholder": "ГГММ (напр. 2512)",
176
+ "card.expiryTooltip": "Формат ГГММ (напр. 2512 = декабрь 2025)",
177
+ "card.cvc": "CVC/CVV *",
178
+ "card.cvcPlaceholder": "123 или 1234",
179
+ "card.cvcAmex": "4 цифры для AMEX",
180
+ "card.cvcOther": "3 цифры для остальных карт",
181
+ "card.3dsDocLink": "Тестовые номера карт и документация 3D Secure:",
182
+ "card.3dsDocTitle": "Документация Payone 3D Secure",
183
+ "applePayPanel.warning": "Apple Pay можно тестировать только на продакшн-домене с HTTPS и в режиме Live. В админке Strapi тестирование не поддерживается.",
184
+ "applePayBtn.merchantIdMissingTitle": "Отсутствует ID продавца",
185
+ "applePayBtn.merchantIdMissing": "ID продавца не настроен. Укажите его в настройках плагина.",
186
+ "applePayBtn.merchantIdHint": "merchantIdentifier можно найти в PMI: КОНФИГУРАЦИЯ → ПЛАТЁЖНЫЕ ПОРТАЛЫ → [Ваш портал] → Настройка типов оплаты.",
187
+ "applePayBtn.liveModeOnly": "Apple Pay только в режиме Live",
188
+ "applePayBtn.liveModeMessage": "Apple Pay поддерживается только в режиме live. Поддержка тестового режима будет позже (документация Payone).",
189
+ "applePayBtn.switchToLive": "Переключитесь на режим live в настройках плагина для использования Apple Pay.",
190
+ "applePayBtn.noLocalhost": "Apple Pay НЕ работает на localhost. Используйте продакшн-домен с HTTPS.",
191
+ "applePayConfig.countryCode": "Код страны",
192
+ "applePayConfig.countryTooltip": "Выберите страну вашего бизнеса",
193
+ "applePayConfig.currencyCode": "Код валюты",
194
+ "applePayConfig.currencyTooltip": "Поддерживаемые валюты для {{country}}",
195
+ "applePayConfig.noCurrencies": "Нет валют для этой страны. Выберите другую страну.",
196
+ "applePayConfig.buttonStyle": "Стиль кнопки",
197
+ "applePayConfig.buttonStyleTooltip": "Внешний вид кнопки Apple Pay",
198
+ "applePayConfig.buttonType": "Тип кнопки",
199
+ "applePayConfig.buttonTypeTooltip": "Тип действия кнопки",
200
+ "applePayConfig.supportedNetworks": "Поддерживаемые сети",
201
+ "applePayConfig.supportedNetworksHint": "Выберите платёжные сети для {{country}}",
202
+ "applePayConfig.notAvailable": "(Недоступно)",
203
+ "applePayConfig.atLeastOneNetwork": "Необходимо выбрать хотя бы одну сеть",
204
+ "applePayConfig.merchantCapabilities": "Возможности продавца",
205
+ "applePayConfig.merchantCapabilitiesHint": "Выберите возможности. «3D Secure» требуется для большинства способов оплаты.",
206
+ "applePayConfig.atLeastOneCapability": "Выберите хотя бы одну возможность. Рекомендуется «supports3DS».",
207
+ "applePayConfig.domainVerificationTitle": "Требуется файл верификации домена",
208
+ "applePayConfig.domainVerificationDesc": "Скачайте файл верификации домена Apple Pay",
209
+ "applePayConfig.domainVerificationDescSuffix": "из документации Payone:",
210
+ "applePayConfig.downloadUrl": "URL загрузки:",
211
+ "applePayConfig.placeFileAt": "Разместите файл по пути:",
212
+ "applePayConfig.fileMustBeAccessible": "Файл должен быть доступен по адресу:",
213
+ "applePayConfig.withoutFileWarning": "Без этого файла Apple Pay НЕ будет работать на вашем домене!",
214
+ "applePayConfigPanel.note": "Конфигурация Apple Pay используется для запросов Apple Pay. Настройте идентификатор продавца, сети и возможности для вашего региона.",
215
+ "applePayConfigPanel.save": "Сохранить конфигурацию",
216
+ "googlePay.loading": "Загрузка Google Pay...",
217
+ "googlePay.notAvailable": "Google Pay недоступен",
218
+ "googlePay.paymentTitle": "Оплата Google Pay",
219
+ "googlePay.paymentHint": "Нажмите кнопку для оплаты через Google Pay. Токен будет автоматически отправлен в Payone.",
220
+ "googlePayConfig.countryCode": "Код страны",
221
+ "googlePayConfig.countryTooltip": "Выберите страну вашего бизнеса",
222
+ "googlePayConfig.currencyCode": "Код валюты",
223
+ "googlePayConfig.currencyTooltip": "Выберите валюту для транзакций",
224
+ "googlePayConfig.merchantName": "Название продавца",
225
+ "googlePayConfig.merchantNamePlaceholder": "Название вашего магазина",
226
+ "googlePayConfig.merchantNameTooltip": "Название вашего бизнеса, как оно будет отображаться в Google Pay",
227
+ "googlePayConfig.allowedNetworks": "Разрешённые платёжные сети",
228
+ "googlePayConfig.allowedNetworksHint": "Выберите платёжные сети для приёма",
229
+ "googlePayConfig.atLeastOneNetwork": "Необходимо выбрать хотя бы одну платёжную сеть",
230
+ "googlePayConfig.allowedAuthMethods": "Разрешённые методы аутентификации",
231
+ "googlePayConfig.allowedAuthMethodsHint": "Выберите методы аутентификации для карт",
232
+ "googlePayConfig.atLeastOneAuth": "Необходимо выбрать хотя бы один метод аутентификации",
233
+ "googlePayConfigPanel.note": "Конфигурация Google Pay используется для запросов Google Pay. Настройте платёжные сети, методы аутентификации и данные продавца для вашего региона.",
234
+ "googlePayConfigPanel.save": "Сохранить конфигурацию"
235
+ }
@@ -0,0 +1,13 @@
1
+
2
+ const prefixPluginTranslations = (trad, pluginId) => {
3
+ if (!pluginId) {
4
+ throw new TypeError("pluginId can't be empty");
5
+ }
6
+
7
+ return Object.keys(trad).reduce((acc, current) => {
8
+ acc[`${pluginId}.${current}`] = trad[current];
9
+ return acc;
10
+ }, {});
11
+ };
12
+
13
+ export { prefixPluginTranslations };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "strapi-plugin-payone-provider",
3
- "version": "5.6.13",
3
+ "version": "5.6.14",
4
4
  "description": "Strapi plugin for Payone payment gateway integration",
5
5
  "license": "MIT",
6
6
  "maintainers": [
@@ -42,4 +42,4 @@
42
42
  "kind": "plugin",
43
43
  "displayName": "Strapi Payone Provider"
44
44
  }
45
- }
45
+ }
@@ -1,11 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  const PLUGIN_NAME = "strapi-plugin-payone-provider";
4
+ const { rowsToCsv, csvToRows, TRANSACTION_ATTRS } = require("../utils/csvTransactions");
4
5
 
5
6
  const getPayoneService = (strapi) => {
6
7
  return strapi.plugin(PLUGIN_NAME).service("payone");
7
8
  };
8
9
 
10
+ const buildFiltersFromQuery = (rawFilters = {}) => {
11
+ const filters = {};
12
+ if (rawFilters && typeof rawFilters === "object") {
13
+ for (const [key, value] of Object.entries(rawFilters)) {
14
+ const v = value == null ? "" : String(value).trim();
15
+ if (v !== "" && v.toLowerCase() !== "all") filters[key] = value;
16
+ }
17
+ }
18
+ return filters;
19
+ };
20
+
9
21
  const handleError = (ctx, error) => {
10
22
  const status = error.status || error.response?.status || 500;
11
23
  const message = error.message || "Internal server error";
@@ -186,6 +198,64 @@ module.exports = ({ strapi }) => ({
186
198
  }
187
199
  },
188
200
 
201
+ async exportTransactions(ctx) {
202
+ try {
203
+ const { filters: rawFilters = {}, format = "json", sort_by, sort_order } = ctx.query || {};
204
+ const filters = buildFiltersFromQuery(rawFilters);
205
+ const data = await getPayoneService(strapi).getTransactionsForExport({
206
+ filters,
207
+ sort_by: sort_by || "createdAt",
208
+ sort_order: sort_order || "desc",
209
+ });
210
+ const rows = Array.isArray(data) ? data : [];
211
+ const fmt = (format || "json").toLowerCase();
212
+
213
+ if (fmt === "csv") {
214
+ ctx.set("Content-Type", "text/csv; charset=utf-8");
215
+ ctx.set("Content-Disposition", 'attachment; filename="transactions.csv"');
216
+ ctx.body = rowsToCsv(rows, TRANSACTION_ATTRS);
217
+ return;
218
+ }
219
+
220
+ ctx.set("Content-Type", "application/json");
221
+ ctx.set("Content-Disposition", 'attachment; filename="transactions.json"');
222
+ ctx.body = rows;
223
+ } catch (error) {
224
+ handleError(ctx, error);
225
+ }
226
+ },
227
+
228
+ async importTransactions(ctx) {
229
+ try {
230
+ const body = ctx.request.body;
231
+ if (!body || typeof body !== "object") ctx.throw(400, "Request body must be JSON");
232
+
233
+ let rows = [];
234
+ if (Array.isArray(body)) {
235
+ rows = body;
236
+ } else if (Array.isArray(body.data)) {
237
+ rows = body.data;
238
+ } else if (body.format === "csv" && typeof body.data === "string") {
239
+ rows = csvToRows(body.data);
240
+ } else {
241
+ ctx.throw(400, "Body must be an array, { data: array }, or { format: 'csv', data: csvString }");
242
+ }
243
+
244
+ if (rows.length === 0) {
245
+ ctx.body = { imported: 0, failed: 0, errors: [], message: "No rows to import" };
246
+ return;
247
+ }
248
+
249
+ const result = await getPayoneService(strapi).importTransactions(rows);
250
+ ctx.body = {
251
+ ...result,
252
+ message: `Imported ${result.imported}, failed ${result.failed}`,
253
+ };
254
+ } catch (error) {
255
+ handleError(ctx, error);
256
+ }
257
+ },
258
+
189
259
  async testConnection(ctx) {
190
260
  try {
191
261
  const result = await getPayoneService(strapi).testConnection();
@@ -28,6 +28,22 @@ module.exports = {
28
28
  policies: ["admin::isAuthenticatedAdmin"]
29
29
  }
30
30
  },
31
+ {
32
+ method: "GET",
33
+ path: "/transactions/export",
34
+ handler: "payone.exportTransactions",
35
+ config: {
36
+ policies: ["admin::isAuthenticatedAdmin"]
37
+ }
38
+ },
39
+ {
40
+ method: "POST",
41
+ path: "/transactions/import",
42
+ handler: "payone.importTransactions",
43
+ config: {
44
+ policies: ["admin::isAuthenticatedAdmin"]
45
+ }
46
+ },
31
47
  {
32
48
  method: "POST",
33
49
  path: "/test-connection",
@@ -43,6 +43,14 @@ module.exports = ({ strapi }) => ({
43
43
  return await transactionService.getTransactionHistory(strapi, { filters, pagination });
44
44
  },
45
45
 
46
+ async getTransactionsForExport({ filters = {}, sort_by, sort_order } = {}) {
47
+ return await transactionService.getTransactionsForExport(strapi, { filters, sort_by, sort_order });
48
+ },
49
+
50
+ async importTransactions(rows) {
51
+ return await transactionService.importTransactions(strapi, rows);
52
+ },
53
+
46
54
  // Test connection
47
55
  async testConnection() {
48
56
  return await testConnectionService.testConnection(strapi);