diff --git a/assets/screenshot-1.png b/assets/screenshot-1.png index f27086a..c70e680 100644 Binary files a/assets/screenshot-1.png and b/assets/screenshot-1.png differ diff --git a/assets/screenshot-2.png b/assets/screenshot-2.png index ab1c0fd..e1d0dc3 100644 Binary files a/assets/screenshot-2.png and b/assets/screenshot-2.png differ diff --git a/assets/screenshot-3.png b/assets/screenshot-3.png index 3d99206..c53c70e 100644 Binary files a/assets/screenshot-3.png and b/assets/screenshot-3.png differ diff --git a/languages/wc-moldovaagroindbank-ro_RO.mo b/languages/wc-moldovaagroindbank-ro_RO.mo index 6a4e25a..ea92b00 100644 Binary files a/languages/wc-moldovaagroindbank-ro_RO.mo and b/languages/wc-moldovaagroindbank-ro_RO.mo differ diff --git a/languages/wc-moldovaagroindbank-ro_RO.po b/languages/wc-moldovaagroindbank-ro_RO.po index 02a5a31..32cd2ba 100644 --- a/languages/wc-moldovaagroindbank-ro_RO.po +++ b/languages/wc-moldovaagroindbank-ro_RO.po @@ -2,11 +2,11 @@ # This file is distributed under the same license as the WooCommerce Moldova Agroindbank Payment Gateway package. msgid "" msgstr "" -"Project-Id-Version: WooCommerce Moldova Agroindbank Payment Gateway 1.1\n" -"Report-Msgid-Bugs-To: https://github.com/alexminza/wc-moldovaagroindbank/" -"issues\n" -"POT-Creation-Date: 2018-12-07 21:49+0200\n" -"PO-Revision-Date: 2018-12-07 21:50+0200\n" +"Project-Id-Version: WooCommerce Moldova Agroindbank Payment Gateway 1.1.1\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-" +"moldovaagroindbank\n" +"POT-Creation-Date: 2019-01-06 17:59+0200\n" +"PO-Revision-Date: 2019-01-06 18:02+0200\n" "Last-Translator: Alexander Minza \n" "Language-Team: \n" "Language: ro\n" @@ -17,55 +17,55 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" -#: wc-moldovaagroindbank.php:168 +#: wc-moldovaagroindbank.php:163 msgid "Enable/Disable" msgstr "Activare/dezactivare" -#: wc-moldovaagroindbank.php:170 +#: wc-moldovaagroindbank.php:165 msgid "Enable this gateway" msgstr "Activează acest gateway de plata" -#: wc-moldovaagroindbank.php:174 +#: wc-moldovaagroindbank.php:169 msgid "Title" msgstr "Titlu" -#: wc-moldovaagroindbank.php:176 +#: wc-moldovaagroindbank.php:171 msgid "Payment method title that the customer will see during checkout." msgstr "Titlul metodei de plată afișat clientului în timpul plății." -#: wc-moldovaagroindbank.php:180 +#: wc-moldovaagroindbank.php:175 msgid "Description" msgstr "Descriere" -#: wc-moldovaagroindbank.php:182 +#: wc-moldovaagroindbank.php:177 msgid "Payment method description that the customer will see during checkout." msgstr "Descrierea metodei de plată afișată clientului în timpul plății." -#: wc-moldovaagroindbank.php:186 +#: wc-moldovaagroindbank.php:181 msgid "Logo" msgstr "Logo" -#: wc-moldovaagroindbank.php:189 +#: wc-moldovaagroindbank.php:184 msgid "Payment method logo image that the customer will see during checkout." msgstr "Sigla metodei de plată afișată clientului în timpul plății." -#: wc-moldovaagroindbank.php:192 +#: wc-moldovaagroindbank.php:187 msgid "Bank logo" msgstr "Logo bancă" -#: wc-moldovaagroindbank.php:193 +#: wc-moldovaagroindbank.php:188 msgid "Payment systems logos" msgstr "Logo sisteme de plăți" -#: wc-moldovaagroindbank.php:198 +#: wc-moldovaagroindbank.php:193 msgid "Test mode" msgstr "Mod testare" -#: wc-moldovaagroindbank.php:200 +#: wc-moldovaagroindbank.php:195 msgid "Enabled" msgstr "Activat" -#: wc-moldovaagroindbank.php:201 +#: wc-moldovaagroindbank.php:196 msgid "" "Use Test or Live bank gateway to process the payments. Disable when ready to " "accept live payments." @@ -73,19 +73,19 @@ msgstr "" "Conectare la mediul de Test sau Producție al băncii pentru procesarea " "plăților. Dezactivați atunci când sunteți gata să acceptați plăți reale." -#: wc-moldovaagroindbank.php:205 +#: wc-moldovaagroindbank.php:200 msgid "Debug mode" msgstr "Mod depanare" -#: wc-moldovaagroindbank.php:207 +#: wc-moldovaagroindbank.php:202 msgid "Enable logging" msgstr "Activează jurnalizare" -#: wc-moldovaagroindbank.php:209 +#: wc-moldovaagroindbank.php:204 msgid "View logs" msgstr "Vizualizați jurnalele" -#: wc-moldovaagroindbank.php:210 +#: wc-moldovaagroindbank.php:205 msgid "" "Save debug messages to the WooCommerce System Status logs. Note: this may " "log personal information. Use this for debugging purposes only and delete " @@ -95,11 +95,11 @@ msgstr "" "Notă: acest lucru poate înregistra informații personale. Utilizați această " "opțiune numai pentru depanare și ștergeți jurnalele atunci când ați terminat." -#: wc-moldovaagroindbank.php:214 +#: wc-moldovaagroindbank.php:209 msgid "Transaction type" msgstr "Tip tranzacție" -#: wc-moldovaagroindbank.php:217 +#: wc-moldovaagroindbank.php:212 msgid "" "Select how transactions should be processed. Charge submits all transactions " "for settlement, Authorization simply authorizes the order total for capture " @@ -109,47 +109,59 @@ msgstr "" "toate tranzacțiile la bancă pentru decontare, Authorization doar autorizează " "suma comenzii la bancă pentru decontare ulterioară." -#: wc-moldovaagroindbank.php:220 +#: wc-moldovaagroindbank.php:215 msgid "Charge" msgstr "Plată (Charge)" -#: wc-moldovaagroindbank.php:221 +#: wc-moldovaagroindbank.php:216 msgid "Authorization" msgstr "Autorizare (Authorization)" -#: wc-moldovaagroindbank.php:232 +#: wc-moldovaagroindbank.php:227 msgid "Order description" msgstr "Descriere comandă" -#: wc-moldovaagroindbank.php:234 +#: wc-moldovaagroindbank.php:229 msgid "" "Format: %1$s - Order ID, %2$s - Order items summary" msgstr "" "Format: %1$s - ID Comandă, %2$s - Sumar conținut " "comandă" -#: wc-moldovaagroindbank.php:235 +#: wc-moldovaagroindbank.php:230 msgid "Order description that the customer will see on the bank payment page." msgstr "" "Descrierea comenzii afișată clientului pe pagina băncii în timpul plății." -#: wc-moldovaagroindbank.php:240 +#: wc-moldovaagroindbank.php:235 wc-moldovaagroindbank.php:370 msgid "Connection Settings" msgstr "Setări conexiune" -#: wc-moldovaagroindbank.php:241 +#: wc-moldovaagroindbank.php:237 msgid "" -"Upload the certificate file received from the bank or configure manually " -"using Advanced settings below." +"Use Basic settings to upload the certificate file received from the bank or " +"configure manually using Advanced settings below." msgstr "" -"Încărcați fișierul de certificat primit de la bancă sau configurați manual " -"utilizând Setările avansate de mai jos." +"Utilizați Setările de bază pentru a încărca fișierul de certificat primit de " +"la bancă sau configurați manual utilizând Setările avansate de mai jos." + +#: wc-moldovaagroindbank.php:238 +msgid "Basic settings»" +msgstr "Setări de bază»" -#: wc-moldovaagroindbank.php:245 +#: wc-moldovaagroindbank.php:239 +msgid "or" +msgstr "sau" + +#: wc-moldovaagroindbank.php:240 +msgid "Advanced settings»" +msgstr "Setări avansate»" + +#: wc-moldovaagroindbank.php:244 msgid "Client certificate (PFX)" msgstr "Certificat client (PFX)" -#: wc-moldovaagroindbank.php:247 +#: wc-moldovaagroindbank.php:246 msgid "" "Uploaded PFX certificate will be processed and converted to PEM format. " "Advanced settings will be overwritten and configured automatically." @@ -157,201 +169,194 @@ msgstr "" "Certificatul PFX încărcat va fi procesat și transformat în format PEM. " "Setările avansate vor fi suprascrise și configurate automat." -#: wc-moldovaagroindbank.php:253 +#: wc-moldovaagroindbank.php:253 wc-moldovaagroindbank.php:376 +msgid "Client certificate file" +msgstr "Fișier certificat client" + +#: wc-moldovaagroindbank.php:259 wc-moldovaagroindbank.php:382 +msgid "Private key file" +msgstr "Fișier cheie privată" + +#: wc-moldovaagroindbank.php:265 msgid "Certificate / private key passphrase" msgstr "Parolă certificat / cheie privată" -#: wc-moldovaagroindbank.php:255 -msgid "Advanced settings»" -msgstr "Setări avansate»" - -#: wc-moldovaagroindbank.php:256 +#: wc-moldovaagroindbank.php:267 msgid "Leave empty if certificate / private key is not encrypted." msgstr "Lăsați vid dacă certificatul / cheia privată nu sunt criptate." -#: wc-moldovaagroindbank.php:257 +#: wc-moldovaagroindbank.php:268 msgid "Optional" msgstr "Opțional" -#: wc-moldovaagroindbank.php:261 wc-moldovaagroindbank.php:353 -msgid "Certificate Authority (CA) bundle" -msgstr "" - -#: wc-moldovaagroindbank.php:267 wc-moldovaagroindbank.php:359 -msgid "Client certificate file" -msgstr "Fișier certificat client" - -#: wc-moldovaagroindbank.php:273 wc-moldovaagroindbank.php:365 -msgid "Private key file" -msgstr "Fișier cheie privată" - -#: wc-moldovaagroindbank.php:280 +#: wc-moldovaagroindbank.php:273 msgid "Payment Notification" msgstr "Notificare plăți" -#: wc-moldovaagroindbank.php:281 +#: wc-moldovaagroindbank.php:274 msgid "Provide this URL to the bank to enable online payment notifications." msgstr "" "Furnizați băncii această adresă URL pentru activare notificări de plată " "online." -#: wc-moldovaagroindbank.php:285 +#: wc-moldovaagroindbank.php:278 msgid "Callback URL" msgstr "URL apel invers (Callback URL)" -#: wc-moldovaagroindbank.php:343 +#: wc-moldovaagroindbank.php:361 msgid "Unsupported store currency" msgstr "Valuta magazinului nu este suportată" -#: wc-moldovaagroindbank.php:345 +#: wc-moldovaagroindbank.php:363 msgid "Supported currencies" msgstr "Valute suportate" -#: wc-moldovaagroindbank.php:377 +#: wc-moldovaagroindbank.php:370 +msgid "Not configured" +msgstr "Neconfigurat" + +#: wc-moldovaagroindbank.php:391 msgid "" "Please review the payment method settings page for log " "details and setup instructions." msgstr "" -"Consultați pagina cu setările metodei de plată pentru " +"Consultați pagina cu setările metodei de plată pentru " "detaliile jurnalului și instrucțiuni de configurare." -#: wc-moldovaagroindbank.php:450 -msgid "Certificate expired on %1$s" -msgstr "Certificatul a expirat pe %1$s" +#: wc-moldovaagroindbank.php:480 +msgid "Certificate valid until %1$s" +msgstr "Certificatul este valabil până la %1$s" -#: wc-moldovaagroindbank.php:452 +#: wc-moldovaagroindbank.php:487 msgid "Invalid certificate" msgstr "Certificat nevalid" -#: wc-moldovaagroindbank.php:457 +#: wc-moldovaagroindbank.php:490 msgid "Could not validate certificate" msgstr "Nu s-a putut valida certificatul" -#: wc-moldovaagroindbank.php:471 +#: wc-moldovaagroindbank.php:507 msgid "Invalid private key or wrong private key passphrase" msgstr "Cheie privată nevalidă sau parolă cheie privată incorectă" -#: wc-moldovaagroindbank.php:481 +#: wc-moldovaagroindbank.php:519 msgid "Private key does not correspond to client certificate" msgstr "Cheia privată nu corespunde certificatului client" -#: wc-moldovaagroindbank.php:485 +#: wc-moldovaagroindbank.php:524 msgid "Could not validate private key" msgstr "Nu s-a putut valida cheia privată" -#: wc-moldovaagroindbank.php:492 +#: wc-moldovaagroindbank.php:531 msgid "Invalid value" msgstr "Valoare nevalidă" -#: wc-moldovaagroindbank.php:495 +#: wc-moldovaagroindbank.php:534 msgid "File not found" msgstr "Fișierul nu a fost găsit" -#: wc-moldovaagroindbank.php:498 +#: wc-moldovaagroindbank.php:537 msgid "File not readable" msgstr "Fișierul nu poate fi citit" -#: wc-moldovaagroindbank.php:501 +#: wc-moldovaagroindbank.php:540 msgid "Could not validate file" msgstr "Nu s-a putut valida fișierul" -#: wc-moldovaagroindbank.php:529 +#: wc-moldovaagroindbank.php:568 msgid "Invalid certificate or wrong passphrase" msgstr "Certificat nevalid sau parolă incorectă" -#: wc-moldovaagroindbank.php:547 +#: wc-moldovaagroindbank.php:590 msgid "Unable to create temporary file: %1$s" msgstr "Nu s-a putut crea fișier temporar: %1$s" -#: wc-moldovaagroindbank.php:552 +#: wc-moldovaagroindbank.php:595 msgid "Unable to save data to temporary file: %1$s" msgstr "Nu s-au putut salva datele in fișier temporar: %1$s" -#: wc-moldovaagroindbank.php:597 wc-moldovaagroindbank.php:1021 +#: wc-moldovaagroindbank.php:649 wc-moldovaagroindbank.php:1064 msgid "%1$s is not properly configured." msgstr "%1$s nu este configurat corect." -#: wc-moldovaagroindbank.php:611 -msgid "Order #%1$s not found." -msgstr "Comanda #%1$s nu a fost găsită." - -#: wc-moldovaagroindbank.php:676 +#: wc-moldovaagroindbank.php:712 msgid "Payment initiated via %1$s: %2$s" msgstr "Plată inițiată prin %1$s: %2$s" -#: wc-moldovaagroindbank.php:691 +#: wc-moldovaagroindbank.php:727 msgid "Payment initiation failed via %1$s." msgstr "Inițierea plății prin %1$s a eșuat." -#: wc-moldovaagroindbank.php:789 +#: wc-moldovaagroindbank.php:818 +msgid "Payment completion failed via %1$s: %2$s" +msgstr "Finalizarea plății prin %1$s a eșuat: %2$s" + +#: wc-moldovaagroindbank.php:828 msgid "Payment completed via %1$s: %2$s" msgstr "Plată finalizată prin %1$s: %2$s" -#: wc-moldovaagroindbank.php:826 +#: wc-moldovaagroindbank.php:860 +msgid "Refund of %1$s %2$s via %3$s failed: %4$s" +msgstr "Rambursarea sumei de %1$s %2$s prin %3$s a eșuat: %4$s" + +#: wc-moldovaagroindbank.php:870 msgid "Refund of %1$s %2$s via %3$s approved: %4$s" msgstr "Rambursarea sumei de %1$s %2$s prin %3$s a fost aprobată: %4$s" -#: wc-moldovaagroindbank.php:866 +#: wc-moldovaagroindbank.php:909 msgid "This Callback URL works and should not be called directly." msgstr "" "Această adresă de apel invers (Callback URL) funcționează și nu trebuie " "apelată direct." -#: wc-moldovaagroindbank.php:878 +#: wc-moldovaagroindbank.php:921 msgid "Payment verification failed: Transaction ID not received from %1$s." msgstr "" "Verificarea plății a eșuat: Transaction ID nu a fost primit de la %1$s." -#: wc-moldovaagroindbank.php:892 +#: wc-moldovaagroindbank.php:933 msgid "Order not found by Transaction ID: %1$s received from %2$s." msgstr "Comanda nu a fost gasită după Transaction ID: %1$s primit de la %2$s." -#: wc-moldovaagroindbank.php:916 +#: wc-moldovaagroindbank.php:957 msgid "Payment authorized via %1$s: %2$s" msgstr "Plată autorizată prin %1$s: %2$s" -#: wc-moldovaagroindbank.php:923 +#: wc-moldovaagroindbank.php:964 msgid "Order #%1$s paid successfully via %2$s." msgstr "Comanda #%1$s a fost platită cu succes prin %2$s." -#: wc-moldovaagroindbank.php:931 +#: wc-moldovaagroindbank.php:973 msgid "Order #%1$s payment failed via %2$s." msgstr "Plata comenzii #%1$s prin %2$s a eșuat." -#: wc-moldovaagroindbank.php:934 -msgid "" -"%1$s payment transaction check failed. Transaction ID: %2$s Order ID: %3$s" -msgstr "" -"Verificarea tranzacției prin %1$s a eșuat. Transaction ID: %2$s Order ID: " -"%3$s" - -#: wc-moldovaagroindbank.php:950 -msgid "Order fully refunded via %1$s" -msgstr "Comanda a fost rambursată integral prin %1$s" +#: wc-moldovaagroindbank.php:992 +msgid "Order fully refunded via %1$s." +msgstr "Comanda a fost rambursată integral prin %1$s." -#: wc-moldovaagroindbank.php:969 +#: wc-moldovaagroindbank.php:1011 msgid "Pay" msgstr "Plătește" -#: wc-moldovaagroindbank.php:978 +#: wc-moldovaagroindbank.php:1021 msgid "Transaction ID not found for order #%1$s" msgstr "" "Identificatorul tranzacției (Transaction ID) nu a fost găsit pentru comanda #" "%1$s" -#: wc-moldovaagroindbank.php:1014 +#: wc-moldovaagroindbank.php:1057 msgid "Close business day via %1$s succeeded: %2$s" msgstr "Închiderea zilei economice prin %1$s a fost efectuată cu succes: %2$s" -#: wc-moldovaagroindbank.php:1024 +#: wc-moldovaagroindbank.php:1067 msgid "Close business day via %1$s failed: %2$s" msgstr "Închiderea zilei economice prin %1$s a eșuat: %2$s" -#: wc-moldovaagroindbank.php:1182 +#: wc-moldovaagroindbank.php:1209 msgid "Settings" msgstr "Setări" -#: wc-moldovaagroindbank.php:1199 +#: wc-moldovaagroindbank.php:1226 msgid "Complete %1$s transaction" msgstr "Finalizează tranzacția prin %1$s" diff --git a/languages/wc-moldovaagroindbank-ru_RU.mo b/languages/wc-moldovaagroindbank-ru_RU.mo index 432f9fc..8818492 100644 Binary files a/languages/wc-moldovaagroindbank-ru_RU.mo and b/languages/wc-moldovaagroindbank-ru_RU.mo differ diff --git a/languages/wc-moldovaagroindbank-ru_RU.po b/languages/wc-moldovaagroindbank-ru_RU.po index 4de4421..cd9bbfc 100644 --- a/languages/wc-moldovaagroindbank-ru_RU.po +++ b/languages/wc-moldovaagroindbank-ru_RU.po @@ -2,11 +2,11 @@ # This file is distributed under the same license as the WooCommerce Moldova Agroindbank Payment Gateway package. msgid "" msgstr "" -"Project-Id-Version: WooCommerce Moldova Agroindbank Payment Gateway 1.1\n" -"Report-Msgid-Bugs-To: https://github.com/alexminza/wc-moldovaagroindbank/" -"issues\n" -"POT-Creation-Date: 2018-12-07 21:49+0200\n" -"PO-Revision-Date: 2018-12-07 21:50+0200\n" +"Project-Id-Version: WooCommerce Moldova Agroindbank Payment Gateway 1.1.1\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-" +"moldovaagroindbank\n" +"POT-Creation-Date: 2019-01-06 17:59+0200\n" +"PO-Revision-Date: 2019-01-06 18:02+0200\n" "Last-Translator: Alexander Minza \n" "Language-Team: \n" "Language: ru\n" @@ -17,59 +17,59 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: wc-moldovaagroindbank.php:168 +#: wc-moldovaagroindbank.php:163 msgid "Enable/Disable" msgstr "Включить/Выключить" -#: wc-moldovaagroindbank.php:170 +#: wc-moldovaagroindbank.php:165 msgid "Enable this gateway" msgstr "Включить платежный шлюз" -#: wc-moldovaagroindbank.php:174 +#: wc-moldovaagroindbank.php:169 msgid "Title" msgstr "Название" -#: wc-moldovaagroindbank.php:176 +#: wc-moldovaagroindbank.php:171 msgid "Payment method title that the customer will see during checkout." msgstr "" "Название способа оплаты, которое клиент будет видеть при оформлении заказа." -#: wc-moldovaagroindbank.php:180 +#: wc-moldovaagroindbank.php:175 msgid "Description" msgstr "Описание" -#: wc-moldovaagroindbank.php:182 +#: wc-moldovaagroindbank.php:177 msgid "Payment method description that the customer will see during checkout." msgstr "" "Описание способа оплаты, которое клиент будет видеть при оформлении заказа." -#: wc-moldovaagroindbank.php:186 +#: wc-moldovaagroindbank.php:181 msgid "Logo" msgstr "Логотип" -#: wc-moldovaagroindbank.php:189 +#: wc-moldovaagroindbank.php:184 msgid "Payment method logo image that the customer will see during checkout." msgstr "" "Изображение логотипа способа оплаты, которое клиент будет видеть при " "оформлении заказа." -#: wc-moldovaagroindbank.php:192 +#: wc-moldovaagroindbank.php:187 msgid "Bank logo" msgstr "Логотип банка" -#: wc-moldovaagroindbank.php:193 +#: wc-moldovaagroindbank.php:188 msgid "Payment systems logos" msgstr "Логотипы платежных систем" -#: wc-moldovaagroindbank.php:198 +#: wc-moldovaagroindbank.php:193 msgid "Test mode" msgstr "Тестовый режим" -#: wc-moldovaagroindbank.php:200 +#: wc-moldovaagroindbank.php:195 msgid "Enabled" msgstr "Включен" -#: wc-moldovaagroindbank.php:201 +#: wc-moldovaagroindbank.php:196 msgid "" "Use Test or Live bank gateway to process the payments. Disable when ready to " "accept live payments." @@ -77,19 +77,19 @@ msgstr "" "Использовать Тестовый или Рабочий платежный шлюз на стороне банка. " "Отключить, когда будете готовы принимать реальные платежи." -#: wc-moldovaagroindbank.php:205 +#: wc-moldovaagroindbank.php:200 msgid "Debug mode" msgstr "Режим отладки" -#: wc-moldovaagroindbank.php:207 +#: wc-moldovaagroindbank.php:202 msgid "Enable logging" msgstr "Включить журналирование" -#: wc-moldovaagroindbank.php:209 +#: wc-moldovaagroindbank.php:204 msgid "View logs" msgstr "Просмотреть журналы" -#: wc-moldovaagroindbank.php:210 +#: wc-moldovaagroindbank.php:205 msgid "" "Save debug messages to the WooCommerce System Status logs. Note: this may " "log personal information. Use this for debugging purposes only and delete " @@ -99,11 +99,11 @@ msgstr "" "могут быть записаны персональные данные. Используйте эту опцию только для " "отладки и удалите журналы по завершению." -#: wc-moldovaagroindbank.php:214 +#: wc-moldovaagroindbank.php:209 msgid "Transaction type" msgstr "Тип транзакции" -#: wc-moldovaagroindbank.php:217 +#: wc-moldovaagroindbank.php:212 msgid "" "Select how transactions should be processed. Charge submits all transactions " "for settlement, Authorization simply authorizes the order total for capture " @@ -113,47 +113,59 @@ msgstr "" "транзакции в банк для расчета, Authorization просто авторизует в банке сумму " "заказа для последующего расчета." -#: wc-moldovaagroindbank.php:220 +#: wc-moldovaagroindbank.php:215 msgid "Charge" msgstr "Оплата (Charge)" -#: wc-moldovaagroindbank.php:221 +#: wc-moldovaagroindbank.php:216 msgid "Authorization" msgstr "Авторизация (Authorization)" -#: wc-moldovaagroindbank.php:232 +#: wc-moldovaagroindbank.php:227 msgid "Order description" msgstr "Описание заказа" -#: wc-moldovaagroindbank.php:234 +#: wc-moldovaagroindbank.php:229 msgid "" "Format: %1$s - Order ID, %2$s - Order items summary" msgstr "" "Формат: %1$s - номер заказа, %2$s - описание " "позиций заказа" -#: wc-moldovaagroindbank.php:235 +#: wc-moldovaagroindbank.php:230 msgid "Order description that the customer will see on the bank payment page." msgstr "" "Описание заказа, которое клиент будет видеть при оплате на странице банка." -#: wc-moldovaagroindbank.php:240 +#: wc-moldovaagroindbank.php:235 wc-moldovaagroindbank.php:370 msgid "Connection Settings" msgstr "Настройки подключения" -#: wc-moldovaagroindbank.php:241 +#: wc-moldovaagroindbank.php:237 msgid "" -"Upload the certificate file received from the bank or configure manually " -"using Advanced settings below." +"Use Basic settings to upload the certificate file received from the bank or " +"configure manually using Advanced settings below." msgstr "" -"Загрузите файл сертификата, полученный из банка, или настройте вручную, " -"используя Расширенные настройки ниже." +"Используйте Простые настройки для загрузки файла сертификата, полученного из " +"банка, или установите вручную, используя Расширенные настройки ниже." + +#: wc-moldovaagroindbank.php:238 +msgid "Basic settings»" +msgstr "Простые настройки»" -#: wc-moldovaagroindbank.php:245 +#: wc-moldovaagroindbank.php:239 +msgid "or" +msgstr "или" + +#: wc-moldovaagroindbank.php:240 +msgid "Advanced settings»" +msgstr "Расширенные настройки»" + +#: wc-moldovaagroindbank.php:244 msgid "Client certificate (PFX)" msgstr "Сертификата клиента (PFX)" -#: wc-moldovaagroindbank.php:247 +#: wc-moldovaagroindbank.php:246 msgid "" "Uploaded PFX certificate will be processed and converted to PEM format. " "Advanced settings will be overwritten and configured automatically." @@ -161,200 +173,195 @@ msgstr "" "Загруженный сертификат PFX будет обработан и преобразован в формат PEM. " "Расширенные настройки будут перезаписаны и заданы автоматически." -#: wc-moldovaagroindbank.php:253 +#: wc-moldovaagroindbank.php:253 wc-moldovaagroindbank.php:376 +msgid "Client certificate file" +msgstr "Файл сертификата клиента" + +#: wc-moldovaagroindbank.php:259 wc-moldovaagroindbank.php:382 +msgid "Private key file" +msgstr "Файл закрытого ключа" + +#: wc-moldovaagroindbank.php:265 msgid "Certificate / private key passphrase" msgstr "Пароль сертификата / закрытого ключа" -#: wc-moldovaagroindbank.php:255 -msgid "Advanced settings»" -msgstr "Расширенные настройки»" - -#: wc-moldovaagroindbank.php:256 +#: wc-moldovaagroindbank.php:267 msgid "Leave empty if certificate / private key is not encrypted." msgstr "Оставьте пустым, если сертификат / закрытый ключ не зашифрованы." -#: wc-moldovaagroindbank.php:257 +#: wc-moldovaagroindbank.php:268 msgid "Optional" msgstr "Необязательно" -#: wc-moldovaagroindbank.php:261 wc-moldovaagroindbank.php:353 -msgid "Certificate Authority (CA) bundle" -msgstr "" - -#: wc-moldovaagroindbank.php:267 wc-moldovaagroindbank.php:359 -msgid "Client certificate file" -msgstr "Файл сертификата клиента" - -#: wc-moldovaagroindbank.php:273 wc-moldovaagroindbank.php:365 -msgid "Private key file" -msgstr "Файл закрытого ключа" - -#: wc-moldovaagroindbank.php:280 +#: wc-moldovaagroindbank.php:273 msgid "Payment Notification" msgstr "Уведомление об оплате" -#: wc-moldovaagroindbank.php:281 +#: wc-moldovaagroindbank.php:274 msgid "Provide this URL to the bank to enable online payment notifications." msgstr "" -"Предоставьте этот URL банку для получения онлайн уведомлений о платежах." +"Предоставьте этот URL-адрес банку для получения онлайн уведомлений о " +"платежах." -#: wc-moldovaagroindbank.php:285 +#: wc-moldovaagroindbank.php:278 msgid "Callback URL" msgstr "URL обратного вызова (Callback URL)" -#: wc-moldovaagroindbank.php:343 +#: wc-moldovaagroindbank.php:361 msgid "Unsupported store currency" msgstr "Валюта магазина не поддерживается" -#: wc-moldovaagroindbank.php:345 +#: wc-moldovaagroindbank.php:363 msgid "Supported currencies" msgstr "Поддерживаемые валюты" -#: wc-moldovaagroindbank.php:377 +#: wc-moldovaagroindbank.php:370 +msgid "Not configured" +msgstr "Не настроено" + +#: wc-moldovaagroindbank.php:391 msgid "" "Please review the payment method settings page for log " "details and setup instructions." msgstr "" -"Перейдите на страницу настройки платежного шлюза для " +"Перейдите на страницу настройки платежного шлюза для " "просмотра сведений журнала и инструкций по установке." -#: wc-moldovaagroindbank.php:450 -msgid "Certificate expired on %1$s" -msgstr "Срок действия сертификата истек %1$s" +#: wc-moldovaagroindbank.php:480 +msgid "Certificate valid until %1$s" +msgstr "Сертификат действителен до %1$s" -#: wc-moldovaagroindbank.php:452 +#: wc-moldovaagroindbank.php:487 msgid "Invalid certificate" msgstr "Невалидный сертификат" -#: wc-moldovaagroindbank.php:457 +#: wc-moldovaagroindbank.php:490 msgid "Could not validate certificate" msgstr "Ошибка проверки сертификата" -#: wc-moldovaagroindbank.php:471 +#: wc-moldovaagroindbank.php:507 msgid "Invalid private key or wrong private key passphrase" msgstr "Невалидный закрытый ключ или неправильный пароль закрытого ключа" -#: wc-moldovaagroindbank.php:481 +#: wc-moldovaagroindbank.php:519 msgid "Private key does not correspond to client certificate" msgstr "Закрытый ключ не соответствует сертификату клиента" -#: wc-moldovaagroindbank.php:485 +#: wc-moldovaagroindbank.php:524 msgid "Could not validate private key" msgstr "Ошибка проверки закрытого ключа" -#: wc-moldovaagroindbank.php:492 +#: wc-moldovaagroindbank.php:531 msgid "Invalid value" msgstr "Недопустимое значение" -#: wc-moldovaagroindbank.php:495 +#: wc-moldovaagroindbank.php:534 msgid "File not found" msgstr "Файл не найден" -#: wc-moldovaagroindbank.php:498 +#: wc-moldovaagroindbank.php:537 msgid "File not readable" msgstr "Ошибка чтения файла" -#: wc-moldovaagroindbank.php:501 +#: wc-moldovaagroindbank.php:540 msgid "Could not validate file" msgstr "Ошибка проверки файла" -#: wc-moldovaagroindbank.php:529 +#: wc-moldovaagroindbank.php:568 msgid "Invalid certificate or wrong passphrase" msgstr "Невалидный сертификат или неправильный пароль" -#: wc-moldovaagroindbank.php:547 +#: wc-moldovaagroindbank.php:590 msgid "Unable to create temporary file: %1$s" msgstr "Ошибка создания временного файла: %1$s" -#: wc-moldovaagroindbank.php:552 +#: wc-moldovaagroindbank.php:595 msgid "Unable to save data to temporary file: %1$s" msgstr "Ошибка записи данных во временный файл: %1$s" -#: wc-moldovaagroindbank.php:597 wc-moldovaagroindbank.php:1021 +#: wc-moldovaagroindbank.php:649 wc-moldovaagroindbank.php:1064 msgid "%1$s is not properly configured." msgstr "%1$s неправильно настроен." -#: wc-moldovaagroindbank.php:611 -msgid "Order #%1$s not found." -msgstr "Заказ #%1$s не найден." - -#: wc-moldovaagroindbank.php:676 +#: wc-moldovaagroindbank.php:712 msgid "Payment initiated via %1$s: %2$s" msgstr "Платеж инициирован через %1$s: %2$s" -#: wc-moldovaagroindbank.php:691 +#: wc-moldovaagroindbank.php:727 msgid "Payment initiation failed via %1$s." msgstr "Ошибка инициирования платежа через %1$s." -#: wc-moldovaagroindbank.php:789 +#: wc-moldovaagroindbank.php:818 +msgid "Payment completion failed via %1$s: %2$s" +msgstr "Ошибка проведения платежа через %1$s: %2$s" + +#: wc-moldovaagroindbank.php:828 msgid "Payment completed via %1$s: %2$s" msgstr "Платеж проведен через %1$s: %2$s" -#: wc-moldovaagroindbank.php:826 +#: wc-moldovaagroindbank.php:860 +msgid "Refund of %1$s %2$s via %3$s failed: %4$s" +msgstr "Ошибка возврата %1$s %2$s через %3$s: %4$s" + +#: wc-moldovaagroindbank.php:870 msgid "Refund of %1$s %2$s via %3$s approved: %4$s" msgstr "Возврат %1$s %2$s через %3$s подтвержден: %4$s" -#: wc-moldovaagroindbank.php:866 +#: wc-moldovaagroindbank.php:909 msgid "This Callback URL works and should not be called directly." msgstr "" "Этот URL обратного вызова (Callback URL) работает и не должен вызываться " "напрямую." -#: wc-moldovaagroindbank.php:878 +#: wc-moldovaagroindbank.php:921 msgid "Payment verification failed: Transaction ID not received from %1$s." msgstr "" "Ошибка проверки платежа: идентификатор транзакции (Transaction ID) не " "получен от %1$s." -#: wc-moldovaagroindbank.php:892 +#: wc-moldovaagroindbank.php:933 msgid "Order not found by Transaction ID: %1$s received from %2$s." msgstr "" "Заказ не найден по идентификатору транзакции (Transaction ID): %1$s " "полученному от %2$s." -#: wc-moldovaagroindbank.php:916 +#: wc-moldovaagroindbank.php:957 msgid "Payment authorized via %1$s: %2$s" msgstr "Платеж авторизован через %1$s: %2$s" -#: wc-moldovaagroindbank.php:923 +#: wc-moldovaagroindbank.php:964 msgid "Order #%1$s paid successfully via %2$s." msgstr "Заказ #%1$s успешно оплачен через %2$s." -#: wc-moldovaagroindbank.php:931 +#: wc-moldovaagroindbank.php:973 msgid "Order #%1$s payment failed via %2$s." msgstr "Ошибка оплаты заказа #%1$s через %2$s." -#: wc-moldovaagroindbank.php:934 -msgid "" -"%1$s payment transaction check failed. Transaction ID: %2$s Order ID: %3$s" -msgstr "" -"Ошибка проверки платежа через %1$s. Transaction ID: %2$s Order ID: %3$s" - -#: wc-moldovaagroindbank.php:950 -msgid "Order fully refunded via %1$s" -msgstr "Оплата заказа полностью возвращена через %1$s" +#: wc-moldovaagroindbank.php:992 +msgid "Order fully refunded via %1$s." +msgstr "Оплата заказа полностью возвращена через %1$s." -#: wc-moldovaagroindbank.php:969 +#: wc-moldovaagroindbank.php:1011 msgid "Pay" msgstr "Оплатить" -#: wc-moldovaagroindbank.php:978 +#: wc-moldovaagroindbank.php:1021 msgid "Transaction ID not found for order #%1$s" msgstr "Идентификатор транзакции (Transaction ID) не найден для заказа #%1$s" -#: wc-moldovaagroindbank.php:1014 +#: wc-moldovaagroindbank.php:1057 msgid "Close business day via %1$s succeeded: %2$s" msgstr "Завершение бизнес-дня через %1$s прошло успешно: %2$s" -#: wc-moldovaagroindbank.php:1024 +#: wc-moldovaagroindbank.php:1067 msgid "Close business day via %1$s failed: %2$s" msgstr "Ошибка завершения бизнес-дня через %1$s: %2$s" -#: wc-moldovaagroindbank.php:1182 +#: wc-moldovaagroindbank.php:1209 msgid "Settings" msgstr "Настройки" -#: wc-moldovaagroindbank.php:1199 +#: wc-moldovaagroindbank.php:1226 msgid "Complete %1$s transaction" msgstr "Провести платеж через %1$s" diff --git a/languages/wc-moldovaagroindbank.pot b/languages/wc-moldovaagroindbank.pot index c032b59..21284e3 100644 --- a/languages/wc-moldovaagroindbank.pot +++ b/languages/wc-moldovaagroindbank.pot @@ -1,312 +1,320 @@ -# Copyright (C) 2018 WooCommerce Moldova Agroindbank Payment Gateway +# Copyright (C) 2019 WooCommerce Moldova Agroindbank Payment Gateway # This file is distributed under the same license as the WooCommerce Moldova Agroindbank Payment Gateway package. #, fuzzy msgid "" msgstr "" -"Project-Id-Version: WooCommerce Moldova Agroindbank Payment Gateway 1.1\n" -"Report-Msgid-Bugs-To: https://github.com/alexminza/wc-moldovaagroindbank/issues\n" -"POT-Creation-Date: 2018-12-07 21:49+0200\n" +"Project-Id-Version: WooCommerce Moldova Agroindbank Payment Gateway 1.1.1\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-moldovaagroindbank\n" +"POT-Creation-Date: 2019-01-06 17:59+0200\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "X-Generator: Poedit 2.2\n" -#: wc-moldovaagroindbank.php:168 +#: wc-moldovaagroindbank.php:163 msgid "Enable/Disable" msgstr "" -#: wc-moldovaagroindbank.php:170 +#: wc-moldovaagroindbank.php:165 msgid "Enable this gateway" msgstr "" -#: wc-moldovaagroindbank.php:174 +#: wc-moldovaagroindbank.php:169 msgid "Title" msgstr "" -#: wc-moldovaagroindbank.php:176 +#: wc-moldovaagroindbank.php:171 msgid "Payment method title that the customer will see during checkout." msgstr "" -#: wc-moldovaagroindbank.php:180 +#: wc-moldovaagroindbank.php:175 msgid "Description" msgstr "" -#: wc-moldovaagroindbank.php:182 +#: wc-moldovaagroindbank.php:177 msgid "Payment method description that the customer will see during checkout." msgstr "" -#: wc-moldovaagroindbank.php:186 +#: wc-moldovaagroindbank.php:181 msgid "Logo" msgstr "" -#: wc-moldovaagroindbank.php:189 +#: wc-moldovaagroindbank.php:184 msgid "Payment method logo image that the customer will see during checkout." msgstr "" -#: wc-moldovaagroindbank.php:192 +#: wc-moldovaagroindbank.php:187 msgid "Bank logo" msgstr "" -#: wc-moldovaagroindbank.php:193 +#: wc-moldovaagroindbank.php:188 msgid "Payment systems logos" msgstr "" -#: wc-moldovaagroindbank.php:198 +#: wc-moldovaagroindbank.php:193 msgid "Test mode" msgstr "" -#: wc-moldovaagroindbank.php:200 +#: wc-moldovaagroindbank.php:195 msgid "Enabled" msgstr "" -#: wc-moldovaagroindbank.php:201 +#: wc-moldovaagroindbank.php:196 msgid "Use Test or Live bank gateway to process the payments. Disable when ready to accept live payments." msgstr "" -#: wc-moldovaagroindbank.php:205 +#: wc-moldovaagroindbank.php:200 msgid "Debug mode" msgstr "" -#: wc-moldovaagroindbank.php:207 +#: wc-moldovaagroindbank.php:202 msgid "Enable logging" msgstr "" -#: wc-moldovaagroindbank.php:209 +#: wc-moldovaagroindbank.php:204 msgid "View logs" msgstr "" -#: wc-moldovaagroindbank.php:210 +#: wc-moldovaagroindbank.php:205 msgid "Save debug messages to the WooCommerce System Status logs. Note: this may log personal information. Use this for debugging purposes only and delete the logs when finished." msgstr "" -#: wc-moldovaagroindbank.php:214 +#: wc-moldovaagroindbank.php:209 msgid "Transaction type" msgstr "" -#: wc-moldovaagroindbank.php:217 +#: wc-moldovaagroindbank.php:212 msgid "Select how transactions should be processed. Charge submits all transactions for settlement, Authorization simply authorizes the order total for capture later." msgstr "" -#: wc-moldovaagroindbank.php:220 +#: wc-moldovaagroindbank.php:215 msgid "Charge" msgstr "" -#: wc-moldovaagroindbank.php:221 +#: wc-moldovaagroindbank.php:216 msgid "Authorization" msgstr "" -#: wc-moldovaagroindbank.php:232 +#: wc-moldovaagroindbank.php:227 msgid "Order description" msgstr "" -#: wc-moldovaagroindbank.php:234 +#: wc-moldovaagroindbank.php:229 msgid "Format: %1$s - Order ID, %2$s - Order items summary" msgstr "" -#: wc-moldovaagroindbank.php:235 +#: wc-moldovaagroindbank.php:230 msgid "Order description that the customer will see on the bank payment page." msgstr "" -#: wc-moldovaagroindbank.php:240 +#: wc-moldovaagroindbank.php:235 wc-moldovaagroindbank.php:370 msgid "Connection Settings" msgstr "" -#: wc-moldovaagroindbank.php:241 -msgid "Upload the certificate file received from the bank or configure manually using Advanced settings below." +#: wc-moldovaagroindbank.php:237 +msgid "Use Basic settings to upload the certificate file received from the bank or configure manually using Advanced settings below." msgstr "" -#: wc-moldovaagroindbank.php:245 -msgid "Client certificate (PFX)" +#: wc-moldovaagroindbank.php:238 +msgid "Basic settings»" msgstr "" -#: wc-moldovaagroindbank.php:247 -msgid "Uploaded PFX certificate will be processed and converted to PEM format. Advanced settings will be overwritten and configured automatically." +#: wc-moldovaagroindbank.php:239 +msgid "or" msgstr "" -#: wc-moldovaagroindbank.php:253 -msgid "Certificate / private key passphrase" +#: wc-moldovaagroindbank.php:240 +msgid "Advanced settings»" msgstr "" -#: wc-moldovaagroindbank.php:255 -msgid "Advanced settings»" +#: wc-moldovaagroindbank.php:244 +msgid "Client certificate (PFX)" msgstr "" -#: wc-moldovaagroindbank.php:256 -msgid "Leave empty if certificate / private key is not encrypted." +#: wc-moldovaagroindbank.php:246 +msgid "Uploaded PFX certificate will be processed and converted to PEM format. Advanced settings will be overwritten and configured automatically." msgstr "" -#: wc-moldovaagroindbank.php:257 -msgid "Optional" +#: wc-moldovaagroindbank.php:253 wc-moldovaagroindbank.php:376 +msgid "Client certificate file" msgstr "" -#: wc-moldovaagroindbank.php:261 wc-moldovaagroindbank.php:353 -msgid "Certificate Authority (CA) bundle" +#: wc-moldovaagroindbank.php:259 wc-moldovaagroindbank.php:382 +msgid "Private key file" msgstr "" -#: wc-moldovaagroindbank.php:267 wc-moldovaagroindbank.php:359 -msgid "Client certificate file" +#: wc-moldovaagroindbank.php:265 +msgid "Certificate / private key passphrase" msgstr "" -#: wc-moldovaagroindbank.php:273 wc-moldovaagroindbank.php:365 -msgid "Private key file" +#: wc-moldovaagroindbank.php:267 +msgid "Leave empty if certificate / private key is not encrypted." msgstr "" -#: wc-moldovaagroindbank.php:280 +#: wc-moldovaagroindbank.php:268 +msgid "Optional" +msgstr "" + +#: wc-moldovaagroindbank.php:273 msgid "Payment Notification" msgstr "" -#: wc-moldovaagroindbank.php:281 +#: wc-moldovaagroindbank.php:274 msgid "Provide this URL to the bank to enable online payment notifications." msgstr "" -#: wc-moldovaagroindbank.php:285 +#: wc-moldovaagroindbank.php:278 msgid "Callback URL" msgstr "" -#: wc-moldovaagroindbank.php:343 +#: wc-moldovaagroindbank.php:361 msgid "Unsupported store currency" msgstr "" -#: wc-moldovaagroindbank.php:345 +#: wc-moldovaagroindbank.php:363 msgid "Supported currencies" msgstr "" -#: wc-moldovaagroindbank.php:377 +#: wc-moldovaagroindbank.php:370 +msgid "Not configured" +msgstr "" + +#: wc-moldovaagroindbank.php:391 msgid "Please review the payment method settings page for log details and setup instructions." msgstr "" -#: wc-moldovaagroindbank.php:450 -msgid "Certificate expired on %1$s" +#: wc-moldovaagroindbank.php:480 +msgid "Certificate valid until %1$s" msgstr "" -#: wc-moldovaagroindbank.php:452 +#: wc-moldovaagroindbank.php:487 msgid "Invalid certificate" msgstr "" -#: wc-moldovaagroindbank.php:457 +#: wc-moldovaagroindbank.php:490 msgid "Could not validate certificate" msgstr "" -#: wc-moldovaagroindbank.php:471 +#: wc-moldovaagroindbank.php:507 msgid "Invalid private key or wrong private key passphrase" msgstr "" -#: wc-moldovaagroindbank.php:481 +#: wc-moldovaagroindbank.php:519 msgid "Private key does not correspond to client certificate" msgstr "" -#: wc-moldovaagroindbank.php:485 +#: wc-moldovaagroindbank.php:524 msgid "Could not validate private key" msgstr "" -#: wc-moldovaagroindbank.php:492 +#: wc-moldovaagroindbank.php:531 msgid "Invalid value" msgstr "" -#: wc-moldovaagroindbank.php:495 +#: wc-moldovaagroindbank.php:534 msgid "File not found" msgstr "" -#: wc-moldovaagroindbank.php:498 +#: wc-moldovaagroindbank.php:537 msgid "File not readable" msgstr "" -#: wc-moldovaagroindbank.php:501 +#: wc-moldovaagroindbank.php:540 msgid "Could not validate file" msgstr "" -#: wc-moldovaagroindbank.php:529 +#: wc-moldovaagroindbank.php:568 msgid "Invalid certificate or wrong passphrase" msgstr "" -#: wc-moldovaagroindbank.php:547 +#: wc-moldovaagroindbank.php:590 msgid "Unable to create temporary file: %1$s" msgstr "" -#: wc-moldovaagroindbank.php:552 +#: wc-moldovaagroindbank.php:595 msgid "Unable to save data to temporary file: %1$s" msgstr "" -#: wc-moldovaagroindbank.php:597 wc-moldovaagroindbank.php:1021 +#: wc-moldovaagroindbank.php:649 wc-moldovaagroindbank.php:1064 msgid "%1$s is not properly configured." msgstr "" -#: wc-moldovaagroindbank.php:611 -msgid "Order #%1$s not found." -msgstr "" - -#: wc-moldovaagroindbank.php:676 +#: wc-moldovaagroindbank.php:712 msgid "Payment initiated via %1$s: %2$s" msgstr "" -#: wc-moldovaagroindbank.php:691 +#: wc-moldovaagroindbank.php:727 msgid "Payment initiation failed via %1$s." msgstr "" -#: wc-moldovaagroindbank.php:789 +#: wc-moldovaagroindbank.php:818 +msgid "Payment completion failed via %1$s: %2$s" +msgstr "" + +#: wc-moldovaagroindbank.php:828 msgid "Payment completed via %1$s: %2$s" msgstr "" -#: wc-moldovaagroindbank.php:826 +#: wc-moldovaagroindbank.php:860 +msgid "Refund of %1$s %2$s via %3$s failed: %4$s" +msgstr "" + +#: wc-moldovaagroindbank.php:870 msgid "Refund of %1$s %2$s via %3$s approved: %4$s" msgstr "" -#: wc-moldovaagroindbank.php:866 +#: wc-moldovaagroindbank.php:909 msgid "This Callback URL works and should not be called directly." msgstr "" -#: wc-moldovaagroindbank.php:878 +#: wc-moldovaagroindbank.php:921 msgid "Payment verification failed: Transaction ID not received from %1$s." msgstr "" -#: wc-moldovaagroindbank.php:892 +#: wc-moldovaagroindbank.php:933 msgid "Order not found by Transaction ID: %1$s received from %2$s." msgstr "" -#: wc-moldovaagroindbank.php:916 +#: wc-moldovaagroindbank.php:957 msgid "Payment authorized via %1$s: %2$s" msgstr "" -#: wc-moldovaagroindbank.php:923 +#: wc-moldovaagroindbank.php:964 msgid "Order #%1$s paid successfully via %2$s." msgstr "" -#: wc-moldovaagroindbank.php:931 +#: wc-moldovaagroindbank.php:973 msgid "Order #%1$s payment failed via %2$s." msgstr "" -#: wc-moldovaagroindbank.php:934 -msgid "%1$s payment transaction check failed. Transaction ID: %2$s Order ID: %3$s" -msgstr "" - -#: wc-moldovaagroindbank.php:950 -msgid "Order fully refunded via %1$s" +#: wc-moldovaagroindbank.php:992 +msgid "Order fully refunded via %1$s." msgstr "" -#: wc-moldovaagroindbank.php:969 +#: wc-moldovaagroindbank.php:1011 msgid "Pay" msgstr "" -#: wc-moldovaagroindbank.php:978 +#: wc-moldovaagroindbank.php:1021 msgid "Transaction ID not found for order #%1$s" msgstr "" -#: wc-moldovaagroindbank.php:1014 +#: wc-moldovaagroindbank.php:1057 msgid "Close business day via %1$s succeeded: %2$s" msgstr "" -#: wc-moldovaagroindbank.php:1024 +#: wc-moldovaagroindbank.php:1067 msgid "Close business day via %1$s failed: %2$s" msgstr "" -#: wc-moldovaagroindbank.php:1182 +#: wc-moldovaagroindbank.php:1209 msgid "Settings" msgstr "" -#: wc-moldovaagroindbank.php:1199 +#: wc-moldovaagroindbank.php:1226 msgid "Complete %1$s transaction" msgstr "" diff --git a/readme.txt b/readme.txt index 2260fc5..8ace6ab 100644 --- a/readme.txt +++ b/readme.txt @@ -3,7 +3,7 @@ Contributors: alexminza Donate link: https://www.paypal.me/AlexMinza Tags: WooCommerce, Moldova, Agroindbank, MAIB, payment, gateway Requires at least: 4.8 -Tested up to: 4.9.8 +Tested up to: 5.0.2 Stable tag: trunk Requires PHP: 7.0 License: GPLv3 or later @@ -22,24 +22,40 @@ WooCommerce Payment Gateway for Moldova Agroindbank * Admin order actions - complete authorized transaction * Close business day scheduled action += Getting Started = + +* [Installation Instructions](./installation/) +* [Frequently Asked Questions](./faq/) + +== Installation == + +1. Configure the plugin Connection Settings by performing one of the following steps: + * **BASIC**: Upload the PFX client certificate file received from the bank + * **ADVANCED**: Convert and copy the private key and certificates PEM files to the server, securely set up the owner and file system permissions, configure the paths to the files +2. Set the certificate / private key password (or leave the field empty if not encrypted) +3. Provide the *Callback URL* to the bank to enable online payment notifications +4. Perform a test payment, refund and verify they are processed correctly +5. Review the *Close day* scheduled action settings on the WooCommerce Status page +6. Disable *Test* and *Debug* modes when ready to accept live payments + == Frequently Asked Questions == = How can I configure the plugin settings? = -Use the WooCommerce -> Settings -> Payments -> Moldova Agroindbank screen to configure the plugin. +Use the *WooCommerce > Settings > Payments > Moldova Agroindbank* screen to configure the plugin. = Where can I get the Connection Settings data? = -The connection settings and merchant data are provided by Moldova Agroindbank. This data is used by the plugin to connect to the Moldova Agroindbank payment gateway and process the card transactions. Please see [www.maib.md](https://www.maib.md) and contact [cards@maib.md](mailto:cards@maib.md) for details. +The merchant data and connection settings are provided by Moldova Agroindbank. This data is used by the plugin to connect to the Moldova Agroindbank payment gateway and process the card transactions. Please see [www.maib.md](https://www.maib.md) and contact [cards@maib.md](mailto:cards@maib.md) for details. = What store settings are supported? = Moldova Agroindbank currently supports transactions in MDL (Moldovan Leu). -= What is the difference between Transaction types? = += What is the difference between transaction types? = -* Charge submits all transactions for settlement. -* Authorization simply authorizes the order total for capture later. Use the Complete transaction order action to settle the previously authorized transaction. +* **Charge** submits all transactions for settlement. +* **Authorization** simply authorizes the order total for capture later. Use the *Complete transaction* order action to settle the previously authorized transaction. = How can I contribute to the plugin? = @@ -47,17 +63,6 @@ If you're a developer and you have some ideas to improve the plugin or to solve You can also contribute to the plugin by translating it. Simply visit [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/wc-moldovaagroindbank) to get started. -== Installation == - -1. Configure the plugin Connection Settings by performing one of the following steps: - * BASIC: Upload the PFX client certificate file received from the bank - * ADVANCED: Convert and upload the private key and certificates PEM files to the server and securely set up the owner and file system permissions -2. Set the certificate / private key password (or leave the field empty if not encrypted) -3. Provide the Callback URL to the bank to enable online payment notifications -4. Perform a test payment, refund and verify they are processed correctly -5. Review the Close day scheduled action settings on the WooCommerce Status page -6. Disable Test and Debug modes when ready to accept live payments - == Screenshots == 1. Plugin settings @@ -68,6 +73,9 @@ You can also contribute to the plugin by translating it. Simply visit [translate == Changelog == += 1.1.1 = +* Basic and Advanced settings configuration modes + = 1.1 = * Simplified payment gateway setup * Added client certificate upload diff --git a/wc-moldovaagroindbank.php b/wc-moldovaagroindbank.php index fc3b77b..fc0bf21 100644 --- a/wc-moldovaagroindbank.php +++ b/wc-moldovaagroindbank.php @@ -2,8 +2,8 @@ /** * Plugin Name: WooCommerce Moldova Agroindbank Payment Gateway * Description: WooCommerce Payment Gateway for Moldova Agroindbank - * Plugin URI: https://wordpress.org/plugins/wc-moldovaagroindbank/ - * Version: 1.1 + * Plugin URI: https://github.com/alexminza/wc-moldovaagroindbank + * Version: 1.1.1 * Author: Alexander Minza * Author URI: https://profiles.wordpress.org/alexminza * Developer: Alexander Minza @@ -13,9 +13,9 @@ * License: GPLv3 or later * License URI: https://www.gnu.org/licenses/gpl-3.0.html * Requires at least: 4.8 - * Tested up to: 4.9.8 + * Tested up to: 5.0.2 * WC requires at least: 3.3 - * WC tested up to: 3.5.2 + * WC tested up to: 3.5.3 */ //Looking to contribute code to this plugin? Go ahead and fork the repository over at GitHub https://github.com/alexminza/wc-moldovaagroindbank @@ -38,15 +38,15 @@ add_action('plugins_loaded', 'woocommerce_moldovaagroindbank_init', 0); function woocommerce_moldovaagroindbank_init() { - if(!class_exists(WC_Payment_Gateway::class)) + if(!class_exists('WC_Payment_Gateway')) return; - load_plugin_textdomain('wc-moldovaagroindbank', false, dirname(plugin_basename(__FILE__)) . '/languages/'); + load_plugin_textdomain('wc-moldovaagroindbank', false, dirname(plugin_basename(__FILE__)) . '/languages'); class WC_MoldovaAgroindbank extends WC_Payment_Gateway { protected $logger; - //region Constants + #region Constants const MOD_ID = 'moldovaagroindbank'; const MOD_TITLE = 'Moldova Agroindbank'; const MOD_PREFIX = 'maib_'; @@ -59,8 +59,8 @@ class WC_MoldovaAgroindbank extends WC_Payment_Gateway { const LOGO_TYPE_SYSTEMS = 'systems'; const MOD_TRANSACTION_TYPE = self::MOD_PREFIX . 'transaction_type'; - const MOD_TRANSACTION_ID = self::MOD_PREFIX . self::MAIB_TRANSACTION_ID; - const MOD_CLOSEDAY_ACTION = self::MOD_PREFIX . 'close_day'; + const MOD_TRANSACTION_ID = self::MOD_PREFIX . 'transaction_id'; + const MOD_CLOSEDAY_ACTION = self::MOD_PREFIX . 'close_day'; const SUPPORTED_CURRENCIES = ['MDL']; const ORDER_TEMPLATE = 'Order #%1$s'; @@ -83,7 +83,7 @@ class WC_MoldovaAgroindbank extends WC_Payment_Gateway { const MAIB_RESULT_RRN = 'RRN'; const MAIB_RESULT_APPROVAL_CODE = 'APPROVAL_CODE'; const MAIB_RESULT_CARD_NUMBER = 'CARD_NUMBER'; - //endregion + #endregion public function __construct() { $plugin_dir = plugin_dir_url(__FILE__); @@ -93,14 +93,14 @@ public function __construct() { $this->id = self::MOD_ID; $this->method_title = self::MOD_TITLE; $this->method_description = 'WooCommerce Payment Gateway for Moldova Agroindbank'; - $this->icon = apply_filters('woocommerce_moldovaagroindbank_icon', '' . $plugin_dir . 'assets/img/moldovaagroindbank.png'); + $this->icon = apply_filters('woocommerce_moldovaagroindbank_icon', $plugin_dir . 'assets/img/moldovaagroindbank.png'); $this->has_fields = false; $this->supports = array('products', 'refunds'); $this->init_form_fields(); $this->init_settings(); - //region Define user set variables + #region Initialize user set variables $this->enabled = $this->get_option('enabled', 'yes'); $this->title = $this->get_option('title', $this->method_title); $this->description = $this->get_option('description'); @@ -128,7 +128,6 @@ public function __construct() { $this->skip_receipt_page = true; $this->maib_pfxcert = $this->get_option('maib_pfxcert'); - $this->maib_cacert = $this->get_option('maib_cacert'); $this->maib_pcert = $this->get_option('maib_pcert'); $this->maib_key = $this->get_option('maib_key'); $this->maib_key_password = $this->get_option('maib_key_password'); @@ -136,7 +135,7 @@ public function __construct() { $this->initialize_certificates(); $this->update_option('maib_callback_url', $this->get_callback_url()); - //endregion + #endregion if(is_admin()) { //Save options @@ -153,16 +152,12 @@ public function __construct() { //Payment listener/API hook add_action('woocommerce_api_wc_' . $this->id, array($this, 'check_response')); - - if(!$this->is_valid_for_use()) { - $this->enabled = false; - } } /** * Initialize Gateway Settings Form Fields */ - function init_form_fields() { + public function init_form_fields() { $this->form_fields = array( 'enabled' => array( 'title' => __('Enable/Disable', self::MOD_TEXT_DOMAIN), @@ -238,7 +233,11 @@ function init_form_fields() { 'connection_settings' => array( 'title' => __('Connection Settings', self::MOD_TEXT_DOMAIN), - 'description' => __('Upload the certificate file received from the bank or configure manually using Advanced settings below.', self::MOD_TEXT_DOMAIN), + 'description' => sprintf('%1$s

%2$s %3$s %4$s', + __('Use Basic settings to upload the certificate file received from the bank or configure manually using Advanced settings below.', self::MOD_TEXT_DOMAIN), + __('Basic settings»', self::MOD_TEXT_DOMAIN), + __('or', self::MOD_TEXT_DOMAIN), + __('Advanced settings»', self::MOD_TEXT_DOMAIN)), 'type' => 'title' ), 'maib_pfxcert' => array( @@ -249,20 +248,7 @@ function init_form_fields() { 'accept' => '.pfx' ) ), - 'maib_key_password' => array( - 'title' => __('Certificate / private key passphrase', self::MOD_TEXT_DOMAIN), - 'type' => 'password', - 'description' => sprintf('%1$s', __('Advanced settings»', self::MOD_TEXT_DOMAIN)), - 'desc_tip' => __('Leave empty if certificate / private key is not encrypted.', self::MOD_TEXT_DOMAIN), - 'placeholder' => __('Optional', self::MOD_TEXT_DOMAIN), - 'default' => '' - ), - 'maib_cacert' => array( - 'title' => __('Certificate Authority (CA) bundle', self::MOD_TEXT_DOMAIN), - 'type' => 'text', - 'description' => '/path/to/cacert.pem', - 'default' => '' - ), + 'maib_pcert' => array( 'title' => __('Client certificate file', self::MOD_TEXT_DOMAIN), 'type' => 'text', @@ -275,6 +261,13 @@ function init_form_fields() { 'description' => '/path/to/key.pem', 'default' => '' ), + 'maib_key_password' => array( + 'title' => __('Certificate / private key passphrase', self::MOD_TEXT_DOMAIN), + 'type' => 'password', + 'desc_tip' => __('Leave empty if certificate / private key is not encrypted.', self::MOD_TEXT_DOMAIN), + 'placeholder' => __('Optional', self::MOD_TEXT_DOMAIN), + 'default' => '' + ), 'payment_notification' => array( 'title' => __('Payment Notification', self::MOD_TEXT_DOMAIN), @@ -293,7 +286,7 @@ function init_form_fields() { ); } - protected function is_valid_for_use() { + public function is_valid_for_use() { if(!in_array(get_option('woocommerce_currency'), self::SUPPORTED_CURRENCIES)) { return false; } @@ -301,20 +294,46 @@ protected function is_valid_for_use() { return true; } + public function is_available() { + if(!$this->is_valid_for_use()) + return false; + + if(!$this->check_settings()) + return false; + + return parent::is_available(); + } + + public function needs_setup() { + return !$this->check_settings(); + } + public function admin_options() { $this->validate_settings(); $this->display_errors(); wc_enqueue_js(' jQuery(function() { - var advanced_fields = "#woocommerce_moldovaagroindbank_maib_cacert, #woocommerce_moldovaagroindbank_maib_pcert, #woocommerce_moldovaagroindbank_maib_key"; + var basic_fields_ids = "#woocommerce_moldovaagroindbank_maib_pfxcert, #woocommerce_moldovaagroindbank_maib_key_password"; + var advanced_fields_ids = "#woocommerce_moldovaagroindbank_maib_pcert, #woocommerce_moldovaagroindbank_maib_key, #woocommerce_moldovaagroindbank_maib_key_password"; + + var basic_fields = jQuery(basic_fields_ids).closest("tr"); + var advanced_fields = jQuery(advanced_fields_ids).closest("tr"); jQuery(document).ready(function() { - jQuery(advanced_fields).closest("tr").hide(); + basic_fields.hide(); + advanced_fields.hide(); + }); + + jQuery("#woocommerce_moldovaagroindbank_basic_settings").on("click", function() { + advanced_fields.hide(); + basic_fields.show(); + return false; }); jQuery("#woocommerce_moldovaagroindbank_advanced_settings").on("click", function() { - jQuery(advanced_fields).closest("tr").toggle(400); + basic_fields.hide(); + advanced_fields.show(); return false; }); }); @@ -326,12 +345,11 @@ public function admin_options() { public function process_admin_options() { $this->process_pfx_setting('woocommerce_moldovaagroindbank_maib_pfxcert', $this->maib_pfxcert, 'woocommerce_moldovaagroindbank_maib_key_password'); - parent::process_admin_options(); + return parent::process_admin_options(); } protected function check_settings() { - return !self::string_empty($this->maib_cacert) - && !self::string_empty($this->maib_pcert) + return !self::string_empty($this->maib_pcert) && !self::string_empty($this->maib_key); } @@ -348,9 +366,8 @@ protected function validate_settings() { $validate_result = false; } - $result = $this->validate_certificate($this->maib_cacert); - if(!self::string_empty($result)) { - $this->add_error(sprintf('%1$s: %2$s', __('Certificate Authority (CA) bundle', self::MOD_TEXT_DOMAIN), $result)); + if(!$this->check_settings()) { + $this->add_error(sprintf('%1$s: %2$s', __('Connection Settings', self::MOD_TEXT_DOMAIN), __('Not configured', self::MOD_TEXT_DOMAIN))); $validate_result = false; } @@ -366,65 +383,76 @@ protected function validate_settings() { $validate_result = false; } - /*if(!self::is_secure_url($this->get_callback_url())) { - $this->add_error(sprintf('%1$s: %2$s', __('Callback URL', self::MOD_TEXT_DOMAIN), __('Not secure', self::MOD_TEXT_DOMAIN))); - }*/ - return $validate_result; } - protected function get_settings_admin_notice() { - return sprintf(__('Please review the payment method settings page for log details and setup instructions.', self::MOD_TEXT_DOMAIN), self::get_settings_url()); + protected function settings_admin_notice() { + if(current_user_can('manage_woocommerce')) { + $message = sprintf(__('Please review the payment method settings page for log details and setup instructions.', self::MOD_TEXT_DOMAIN), self::get_settings_url()); + wc_add_notice($message, 'error'); + } } #region Certificates protected function process_pfx_setting($pfxFieldId, $pfxOptionValue, $passFieldId) { try { if(array_key_exists($pfxFieldId, $_FILES)) { - $pfxCert = $_FILES[$pfxFieldId]; - - if($pfxCert['error'] == UPLOAD_ERR_OK) { - $pfxCertData = file_get_contents($pfxCert['tmp_name']); - $pfxPassphrase = $_POST[$passFieldId]; - - $result = $this->process_export_certificates($pfxCertData, $pfxPassphrase); - - $resultCaCert = $result['cacert']; - $resultPCert = $result['pcert']; - $resultKey = $result['key']; - - //Overwrite advanced settings values - $_POST['woocommerce_moldovaagroindbank_maib_cacert'] = $resultCaCert; - $_POST['woocommerce_moldovaagroindbank_maib_pcert'] = $resultPCert; - $_POST['woocommerce_moldovaagroindbank_maib_key'] = $resultKey; - - if(!self::string_empty($resultCaCert) && !self::string_empty($resultPCert) && !self::string_empty($resultKey)) { - //Certificates export success - save PFX bundle to settings - $_POST[$pfxFieldId] = base64_encode($pfxCertData); - } else { - //Invalid certificate file - reset setting value - $_POST[$pfxFieldId] = null; - $_POST['woocommerce_moldovaagroindbank_maib_key_password'] = null; + $pfxFile = $_FILES[$pfxFieldId]; + $tmpName = $pfxFile['tmp_name']; + + if($pfxFile['error'] == UPLOAD_ERR_OK && is_uploaded_file($tmpName)) { + $pfxData = file_get_contents($tmpName); + + if($pfxData !== false) { + $pfxPassphrase = $_POST[$passFieldId]; + + $result = $this->process_export_certificates($pfxData, $pfxPassphrase); + + $resultPCert = $result['pcert'] ?? null; + $resultKey = $result['key'] ?? null; + + if(!self::string_empty($resultPCert) && !self::string_empty($resultKey)) { + //Overwrite advanced settings values + $_POST['woocommerce_moldovaagroindbank_maib_pcert'] = $resultPCert; + $_POST['woocommerce_moldovaagroindbank_maib_key'] = $resultKey; + + //Certificates export success - save PFX bundle to settings + $_POST[$pfxFieldId] = base64_encode($pfxData); + + return; + } } } - } else { - $_POST[$pfxFieldId] = $pfxOptionValue; } } catch(Exception $ex) { $this->log($ex, WC_Log_Levels::ERROR); } + + //Preserve existing value + $_POST[$pfxFieldId] = $pfxOptionValue; } protected function initialize_certificates() { try { - if(!file_exists($this->maib_cacert) || !file_exists($this->maib_pcert) || !file_exists($this->maib_key)) { - if(!self::string_empty($this->maib_pfxcert)) { - $pfxCertData = base64_decode($this->maib_pfxcert); - $result = $this->process_export_certificates($pfxCertData, $this->maib_key_password); - - $this->update_option('maib_cacert', $result['cacert']); - $this->update_option('maib_pcert', $result['pcert']); - $this->update_option('maib_key', $result['key']); + if(!is_readable($this->maib_pcert) || !is_readable($this->maib_key)) { + if(self::is_overwritable($this->maib_pcert) && self::is_overwritable($this->maib_key)) { + if(!self::string_empty($this->maib_pfxcert)) { + $pfxCertData = base64_decode($this->maib_pfxcert); + if($pfxCertData !== false) { + $result = $this->process_export_certificates($pfxCertData, $this->maib_key_password); + + $resultPCert = $result['pcert'] ?? null; + $resultKey = $result['key'] ?? null; + + if(!self::string_empty($resultPCert) && !self::string_empty($resultKey)) { + $this->update_option('maib_pcert', $resultPCert); + $this->update_option('maib_key', $resultKey); + + $this->maib_pcert = $resultPCert; + $this->maib_key = $resultKey; + } + } + } } } } catch(Exception $ex) { @@ -442,16 +470,21 @@ protected function validate_certificate($certFile) { $cert = openssl_x509_read($certData); if (false !== $cert) { - $certinfo = openssl_x509_parse($cert); - if (false !== $certinfo) { - $valid_until = $certinfo['validTo_time_t']; - openssl_x509_free($certinfo); - if($valid_until < time()) - return sprintf(__('Certificate expired on %1$s', self::MOD_TEXT_DOMAIN), date_i18n(get_option('date_format'), $valid_until)); - } else { - return __('Invalid certificate', self::MOD_TEXT_DOMAIN); + $certInfo = openssl_x509_parse($cert); + openssl_x509_free($cert); + + if (false !== $certInfo) { + $valid_until = $certInfo['validTo_time_t']; + + if($valid_until < (time() - 2592000)) //Certificate already expired or expires in the next 30 days + return sprintf(__('Certificate valid until %1$s', self::MOD_TEXT_DOMAIN), date_i18n(get_option('date_format'), $valid_until)); + + return null; } } + + $this->log_openssl_errors(); + return __('Invalid certificate', self::MOD_TEXT_DOMAIN); } catch(Exception $ex) { $this->log($ex, WC_Log_Levels::ERROR); return __('Could not validate certificate', self::MOD_TEXT_DOMAIN); @@ -466,9 +499,13 @@ protected function validate_private_key($certFile, $keyFile, $keyPassphrase) { $keyData = file_get_contents($keyFile); $privateKey = openssl_pkey_get_private($keyData, $keyPassphrase); - openssl_pkey_free($privateKey); - if(!$privateKey) + + if(false !== $privateKey) { + openssl_pkey_free($privateKey); + } else { + $this->log_openssl_errors(); return __('Invalid private key or wrong private key passphrase', self::MOD_TEXT_DOMAIN); + } $certData = file_get_contents($certFile); $keyCheckData = array( @@ -477,8 +514,10 @@ protected function validate_private_key($certFile, $keyFile, $keyPassphrase) { ); $validateResult = openssl_x509_check_private_key($certData, $keyCheckData); - if(!$validateResult) + if(false === $validateResult) { + $this->log_openssl_errors(); return __('Private key does not correspond to client certificate', self::MOD_TEXT_DOMAIN); + } } catch(Exception $ex) { $this->log($ex, WC_Log_Levels::ERROR); @@ -505,6 +544,7 @@ protected function validate_file($file) { protected function process_export_certificates($pfxCertData, $pfxPassphrase) { $result = array(); $pfxCerts = array(); + $error = null; if(openssl_pkcs12_read($pfxCertData, $pfxCerts, $pfxPassphrase)) { if(isset($pfxCerts['pkey'])) { @@ -512,30 +552,33 @@ protected function process_export_certificates($pfxCertData, $pfxPassphrase) { if(openssl_pkey_export($pfxCerts['pkey'], $pfxPkey, $pfxPassphrase)) { $result['key'] = self::save_temp_file($pfxPkey, 'key.pem'); - if(isset($pfxCerts['cert'])) { + if(isset($pfxCerts['cert'])) $result['pcert'] = self::save_temp_file($pfxCerts['cert'], 'pcert.pem'); - } - if(isset($pfxCerts['extracerts'])) { + /*if(isset($pfxCerts['extracerts'])) { $pfxExtraCerts = ''; foreach($pfxCerts['extracerts'] as $extraCert) $pfxExtraCerts .= $extraCert; $result['cacert'] = self::save_temp_file($pfxExtraCerts, 'cacert.pem'); - } + }*/ } } } else { $error = __('Invalid certificate or wrong passphrase', self::MOD_TEXT_DOMAIN); } - if(!self::string_empty($error)) + if(!self::string_empty($error)) { $this->log($error, WC_Log_Levels::ERROR); + $this->log_openssl_errors(); + } + + return $result; + } + protected function log_openssl_errors() { while($opensslError = openssl_error_string()) $this->log($opensslError, WC_Log_Levels::ERROR); - - return $result; } static function save_temp_file($fileData, $fileSuffix = '') { @@ -555,27 +598,36 @@ static function save_temp_file($fileData, $fileSuffix = '') { return $temp_file; } + + static function is_temp_file($fileName) { + $temp_dir = get_temp_dir(); + return strncmp($fileName, $temp_dir, strlen($temp_dir)) === 0; + } + + static function is_overwritable($fileName) { + return self::string_empty($fileName) || self::is_temp_file($fileName); + } #endregion protected function init_maib_client() { $options = [ 'base_url' => $this->base_url, 'debug' => $this->debug, - 'verify' => false, + 'verify' => true, 'defaults' => [ - 'verify' => $this->maib_cacert, - 'cert' => [$this->maib_pcert, $this->maib_key_password], - 'ssl_key' => $this->maib_key, + 'verify' => true, + 'cert' => $this->maib_pcert, + 'ssl_key' => [$this->maib_key, $this->maib_key_password], 'config' => [ - 'curl' => [ - CURLOPT_SSL_VERIFYHOST => false, - CURLOPT_SSL_VERIFYPEER => false, + 'curl' => [ + CURLOPT_SSL_VERIFYHOST => true, + CURLOPT_SSL_VERIFYPEER => true, ] ] ], ]; - //region Init Client + #region Init Client $guzzleClient = new Client($options); $client = new MaibClient($guzzleClient); @@ -587,7 +639,7 @@ protected function init_maib_client() { $subscriber = new LogSubscriber($log, Formatter::SHORT); $client->getHttpClient()->getEmitter()->attach($subscriber); } - //endregion + #endregion return $client; } @@ -597,21 +649,7 @@ public function process_payment($order_id) { $message = sprintf(__('%1$s is not properly configured.', self::MOD_TEXT_DOMAIN), $this->method_title); wc_add_notice($message, 'error'); - - if(current_user_can('manage_woocommerce')) - wc_add_notice($this->get_settings_admin_notice(), 'error'); - - return array( - 'result' => 'failure', - 'messages' => $message - ); - } - - if(!$order = wc_get_order($order_id)) { - $message = sprintf(__('Order #%1$s not found.', self::MOD_TEXT_DOMAIN), $order_id); - $this->log($message, WC_Log_Levels::ERROR); - - wc_add_notice($message, 'error'); + $this->settings_admin_notice(); return array( 'result' => 'failure', @@ -619,6 +657,7 @@ public function process_payment($order_id) { ); } + $order = wc_get_order($order_id); $order_total = $this->price_format($order->get_total()); $order_currency_numcode = $this->get_currency_numcode($order->get_currency()); $order_description = $this->get_order_description($order); @@ -657,26 +696,23 @@ public function process_payment($order_id) { $this->log($ex, WC_Log_Levels::ERROR); } - //region Validate response - $trans_id = NULL; - if(!empty($client_result)) { - if(isset($client_result[self::MAIB_TRANSACTION_ID])) { - $trans_id = $client_result[self::MAIB_TRANSACTION_ID]; - } - } - //endregion + #region Validate response + $trans_id = null; + if(!empty($client_result)) + $trans_id = $client_result[self::MAIB_TRANSACTION_ID] ?? null; + #endregion - if(!empty($trans_id)) { - //region Update order payment transaction metadata + if(!self::string_empty($trans_id)) { + #region Update order payment transaction metadata add_post_meta($order_id, self::MOD_TRANSACTION_TYPE, $this->transaction_type); add_post_meta($order_id, self::MOD_TRANSACTION_ID, $trans_id); - //endregion + #endregion - //region Log transaction initiation + #region Log transaction initiation $message = sprintf(__('Payment initiated via %1$s: %2$s', self::MOD_TEXT_DOMAIN), $this->method_title, http_build_query($client_result)); $this->log($message, WC_Log_Levels::INFO); $order->add_order_note($message); - //endregion + #endregion $redirect = add_query_arg(self::MAIB_TRANS_ID, urlencode($trans_id), $this->skip_receipt_page ? $this->client_handler_url @@ -693,9 +729,7 @@ public function process_payment($order_id) { $this->log(self::print_var($client_result), WC_Log_Levels::ERROR); wc_add_notice($message, 'error'); - - if(current_user_can('manage_woocommerce')) - wc_add_notice($this->get_settings_admin_notice(), 'error'); + $this->settings_admin_notice(); return array( 'result' => 'failure', @@ -705,7 +739,7 @@ public function process_payment($order_id) { #region Order status public function order_status_completed($order_id) { - $this->log(sprintf('%1$s: Order ID: %2$s', __FUNCTION__, $order_id)); + $this->log(sprintf('%1$s: OrderID=%2$s', __FUNCTION__, $order_id)); if(!$this->transaction_auto) return; @@ -724,7 +758,7 @@ public function order_status_completed($order_id) { } public function order_status_cancelled($order_id) { - $this->log(sprintf('%1$s: Order ID: %2$s', __FUNCTION__, $order_id)); + $this->log(sprintf('%1$s: OrderID=%2$s', __FUNCTION__, $order_id)); if(!$this->transaction_auto) return; @@ -743,7 +777,7 @@ public function order_status_cancelled($order_id) { } public function order_status_refunded($order_id) { - $this->log(sprintf('%1$s: Order ID: %2$s', __FUNCTION__, $order_id)); + $this->log(sprintf('%1$s: OrderID=%2$s', __FUNCTION__, $order_id)); $order = wc_get_order($order_id); @@ -756,9 +790,9 @@ public function order_status_refunded($order_id) { #endregion public function complete_transaction($order_id, $order) { - $this->log(sprintf('%1$s: Order ID: %2$s', __FUNCTION__, $order_id)); + $this->log(sprintf('%1$s: OrderID=%2$s', __FUNCTION__, $order_id)); - $trans_id = get_post_meta($order_id, self::MAIB_TRANS_ID, true); + $trans_id = get_post_meta($order_id, self::MOD_TRANSACTION_ID, true); $order_total = $this->price_format($this->get_order_net_total($order)); $order_currency_numcode = $this->get_currency_numcode($order->get_currency()); $order_description = $this->get_order_description($order); @@ -780,6 +814,11 @@ public function complete_transaction($order_id, $order) { $this->log(self::print_var($completion_result)); } catch(Exception $ex) { $this->log($ex, WC_Log_Levels::ERROR); + + $message = sprintf(__('Payment completion failed via %1$s: %2$s', self::MOD_TEXT_DOMAIN), $this->method_title, $ex->getMessage()); + $order->add_order_note($message); + + return false; } if(!empty($completion_result)) { @@ -800,14 +839,14 @@ public function complete_transaction($order_id, $order) { } public function refund_transaction($order_id, $order, $amount = null) { - $this->log(sprintf('%1$s: Order ID: %2$s Amount: %3$s', __FUNCTION__, $order_id, $amount)); + $this->log(sprintf('%1$s: OrderID=%2$s Amount=%3$s', __FUNCTION__, $order_id, $amount)); if(!isset($amount)) { //Refund entirely if no amount is specified $amount = $order->get_total(); } - $trans_id = get_post_meta($order_id, self::MAIB_TRANS_ID, true); + $trans_id = get_post_meta($order_id, self::MOD_TRANSACTION_ID, true); $order_currency = $order->get_currency(); try { @@ -817,6 +856,11 @@ public function refund_transaction($order_id, $order, $amount = null) { $this->log(self::print_var($reversal_result)); } catch(Exception $ex) { $this->log($ex, WC_Log_Levels::ERROR); + + $message = sprintf(__('Refund of %1$s %2$s via %3$s failed: %4$s', self::MOD_TEXT_DOMAIN), $amount, $order_currency, $this->method_title, $ex->getMessage()); + $order->add_order_note($message); + + return new WP_Error('error', $message); } if(!empty($reversal_result)) { @@ -852,9 +896,8 @@ protected function check_transaction($trans_id) { $rrn = $client_result[self::MAIB_RESULT_RRN]; $approval_code = $client_result[self::MAIB_RESULT_APPROVAL_CODE]; - if(!empty($rrn) && !empty($approval_code)) { + if(!self::string_empty($rrn) && !self::string_empty($approval_code)) return $client_result; - } } } @@ -867,23 +910,21 @@ public function check_response() { wc_add_notice($message, 'notice'); - wp_redirect(wc_get_cart_url()); + wp_safe_redirect(wc_get_cart_url()); return false; } $trans_id = $_POST[self::MAIB_TRANS_ID]; - $trans_id = sanitize_text_field($trans_id); + $trans_id = wc_clean($trans_id); - if(empty($trans_id)) { + if(self::string_empty($trans_id)) { $message = sprintf(__('Payment verification failed: Transaction ID not received from %1$s.', self::MOD_TEXT_DOMAIN), $this->method_title); $this->log($message, WC_Log_Levels::ERROR); wc_add_notice($message, 'error'); + $this->settings_admin_notice(); - if(current_user_can('manage_woocommerce')) - wc_add_notice($this->get_settings_admin_notice(), 'error'); - - wp_redirect(wc_get_cart_url()); + wp_safe_redirect(wc_get_cart_url()); return false; } @@ -893,8 +934,9 @@ public function check_response() { $this->log($message, WC_Log_Levels::ERROR); wc_add_notice($message, 'error'); + $this->settings_admin_notice(); - wp_redirect(wc_get_cart_url()); + wp_safe_redirect(wc_get_cart_url()); return false; } @@ -907,11 +949,10 @@ public function check_response() { } if(!empty($client_result)) { - //region Update order payment metadata - foreach($client_result as $key => $value) { + #region Update order payment metadata + foreach($client_result as $key => $value) add_post_meta($order_id, strtolower(self::MOD_PREFIX . $key), $value); - } - //endregion + #endregion $message = sprintf(__('Payment authorized via %1$s: %2$s', self::MOD_TEXT_DOMAIN), $this->method_title, http_build_query($client_result)); $this->log($message, WC_Log_Levels::INFO); @@ -922,20 +963,21 @@ public function check_response() { $message = sprintf(__('Order #%1$s paid successfully via %2$s.', self::MOD_TEXT_DOMAIN), $order_id, $this->method_title); $this->log($message, WC_Log_Levels::INFO); + wc_add_notice($message, 'success'); - wp_redirect($this->get_return_url($order)); + wp_safe_redirect($this->get_return_url($order)); return true; } else { $message = sprintf(__('Order #%1$s payment failed via %2$s.', self::MOD_TEXT_DOMAIN), $order_id, $this->method_title); - wc_add_notice($message, 'error'); - - $message = sprintf(__('%1$s payment transaction check failed. Transaction ID: %2$s Order ID: %3$s', self::MOD_TEXT_DOMAIN), $this->method_title, $trans_id, $order_id); $this->log($message, WC_Log_Levels::ERROR); + $order->add_order_note($message); + wc_add_notice($message, 'error'); + $this->settings_admin_notice(); - wp_redirect($order->get_checkout_payment_url()); + wp_safe_redirect($order->get_checkout_payment_url()); //wc_get_checkout_url() return false; } } @@ -947,7 +989,7 @@ protected function mark_order_paid($order, $trans_id) { } protected function mark_order_refunded($order) { - $order_note = sprintf(__('Order fully refunded via %1$s', self::MOD_TEXT_DOMAIN), $this->method_title); + $order_note = sprintf(__('Order fully refunded via %1$s.', self::MOD_TEXT_DOMAIN), $this->method_title); //Mark order as refunded if not already set if(!$order->has_status('refunded')) { @@ -973,8 +1015,9 @@ protected function generate_form($trans_id) { public function receipt_page($order_id) { //$trans_id = get_post_meta($order_id, self::MOD_TRANSACTION_ID, true); $trans_id = $_GET[self::MAIB_TRANS_ID]; + $trans_id = wc_clean($trans_id); - if(empty($trans_id)) { + if(self::string_empty($trans_id)) { $message = sprintf(__('Transaction ID not found for order #%1$s', self::MOD_TEXT_DOMAIN), $order_id); $this->log($message, WC_Log_Levels::ERROR); @@ -989,7 +1032,7 @@ public function receipt_page($order_id) { echo $this->generate_form($trans_id); } - public function process_refund($order_id, $amount = NULL, $reason = '') { + public function process_refund($order_id, $amount = null, $reason = '') { $order = wc_get_order($order_id); return $this->refund_transaction($order_id, $order, $amount); } @@ -1145,10 +1188,6 @@ static function get_settings_url() { ); } - static function is_secure_url($url) { - return 'https' === substr($url, 0, 5); - } - //https://woocommerce.wordpress.com/2017/01/26/improved-logging-in-woocommerce-2-7/ //https://stackoverflow.com/questions/1423157/print-php-call-stack protected function log($message, $level = WC_Log_Levels::DEBUG) { @@ -1161,22 +1200,10 @@ static function print_var($var) { } protected static function string_empty($string) { - //trim($string) return strlen($string) === 0; } - protected static function get_current_timezone() { - //https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ - $timezone = get_option('timezone_string'); - - if(!self::string_empty($timezone)) - return $timezone; - - //Fallback to system timezone - return date_default_timezone_get(); - } - - //region Admin + #region Admin static function plugin_links($links) { $plugin_links = array( sprintf('%2$s', esc_url(self::get_settings_url()), __('Settings', self::MOD_TEXT_DOMAIN)) @@ -1191,7 +1218,7 @@ static function order_actions($actions) { return $actions; } - $transaction_type = get_post_meta($order_id, self::MOD_TRANSACTION_TYPE, true); + $transaction_type = get_post_meta($theorder->get_id(), self::MOD_TRANSACTION_TYPE, true); if($transaction_type !== self::TRANSACTION_TYPE_AUTHORIZATION) { return $actions; } @@ -1216,6 +1243,16 @@ static function action_reverse_transaction($order) { } static function action_close_day() { + /*$closeday_start = 23; + $closeday_end = 1; + $current_hour = intval(current_time('H')); + if($current_hour >= $closeday_start || $current_hour <= $closeday_end) { + //close_day(); + } else { + sprintf(__('Close day allowed between %1$s and %2$s', self::MOD_TEXT_DOMAIN), $closeday_start, $closeday_end); + $result = ''; + }*/ + $plugin = new self(); $result = $plugin->close_day(); @@ -1226,7 +1263,7 @@ static function action_close_day() { } public static function register_scheduled_actions() { - $timezoneId = self::get_current_timezone(); + $timezoneId = wc_timezone_string(); $timestamp = as_get_datetime_object('midnight tomorrow', $timezoneId); $timestamp->setTimezone(new DateTimeZone('UTC')); @@ -1242,7 +1279,7 @@ static function find_scheduled_action($status = null) { $action_id = ActionScheduler::store()->find_action(self::MOD_CLOSEDAY_ACTION, $params); return $action_id; } - //endregion + #endregion static function add_gateway($methods) { $methods[] = self::class; @@ -1262,7 +1299,7 @@ public static function is_wc_active() { //Add gateway to WooCommerce add_filter('woocommerce_payment_gateways', array(WC_MoldovaAgroindbank::class, 'add_gateway')); - //region Admin init + #region Admin init if(is_admin()) { add_filter('plugin_action_links_' . plugin_basename(__FILE__), array(WC_MoldovaAgroindbank::class, 'plugin_links')); @@ -1271,18 +1308,18 @@ public static function is_wc_active() { add_action('woocommerce_order_action_moldovaagroindbank_complete_transaction', array(WC_MoldovaAgroindbank::class, 'action_complete_transaction')); //add_action('woocommerce_order_action_moldovaagroindbank_reverse_transaction', array(WC_MoldovaAgroindbank::class, 'action_reverse_transaction')); } - //endregion + #endregion //Add scheduled actions add_action(WC_MoldovaAgroindbank::MOD_CLOSEDAY_ACTION, array(WC_MoldovaAgroindbank::class, 'action_close_day')); } #region Register activation hooks -function activation_register_scheduled_actions() { +function woocommerce_moldovaagroindbank_activation() { woocommerce_moldovaagroindbank_init(); WC_MoldovaAgroindbank::register_scheduled_actions(); } -register_activation_hook(__FILE__, 'activation_register_scheduled_actions'); +register_activation_hook(__FILE__, 'woocommerce_moldovaagroindbank_activation'); register_deactivation_hook(__FILE__, array(WC_MoldovaAgroindbank::class, 'unregister_scheduled_actions')); #endregion