├── .gitignore ├── Paid_Membership_Pro ├── README.md ├── pmp-fondy-payment │ ├── README.txt │ ├── assets │ │ └── js │ │ │ └── fondy.js │ ├── classes │ │ ├── class.pmprogateway_fondy.php │ │ └── fondy.lib.php │ ├── languages │ │ ├── pmp-fondy-payment-ru_RU.mo │ │ ├── pmp-fondy-payment-ru_RU.po │ │ └── pmp-fondy-payment.pot │ ├── pmpro-fondy-gateway.php │ ├── services │ │ ├── fondy-ins.php │ │ └── services.php │ └── views │ │ ├── payment-option-fields.php │ │ └── submit-button.php └── settings.png ├── README.md ├── Restrict_Content_Pro ├── README.md └── fondy-restrict-gateway │ ├── fondy │ ├── fondy-admin.php │ ├── fondy.inc.php │ └── fondy.php │ └── index.php ├── easy-digital-downloads-fondy ├── README.md ├── assets │ └── images │ │ └── fondy_logo.png ├── edd-fondy-payment.php ├── languages │ ├── edd_fondy-ru_RU.mo │ ├── edd_fondy-ru_RU.po │ └── edd_fondy.pot └── settings1.png ├── fondy-gravityforms-payment ├── README.md ├── class-gf-fondy.php ├── fondy.php ├── images │ ├── active0.png │ ├── active1.png │ ├── add.png │ ├── loading.gif │ ├── remove.png │ ├── tick.png │ └── tooltip_tip.png ├── languages │ └── gravityformsfondy.pot └── settings1.png └── woocommerce ├── README.md ├── fondy-woocommerce-payment-gateway ├── README.txt ├── assets │ ├── css │ │ ├── fondy_embedded.css │ │ ├── fondy_seamless.css │ │ └── fondy_seamless_old.css │ ├── img │ │ ├── fondy_logo_cards.svg │ │ ├── icon-128x128.png │ │ ├── logo.png │ │ ├── master_visa_fondy.svg │ │ ├── mc-logo.svg │ │ └── visa-logo.svg │ └── js │ │ ├── fondy_embedded.js │ │ ├── fondy_seamless.js │ │ └── payform.min.js ├── fondy-woocommerce-payment-gateway.php ├── includes │ ├── abstract-wc-fondy-payment-gateway.php │ ├── class-wc-fondy-api.php │ ├── compat │ │ ├── class-wc-fondy-pre-orders-compat.php │ │ └── class-wc-fondy-subscriptions-compat.php │ ├── integration-types │ │ ├── Fondy_Embedded.php │ │ ├── Fondy_Hosted.php │ │ └── Fondy_Seamless.php │ └── payment-methods │ │ ├── class-wc-gateway-fondy-bank.php │ │ ├── class-wc-gateway-fondy-card.php │ │ └── class-wc-gateway-fondy-localmethods.php ├── languages │ ├── fondy-woocommerce-payment-gateway-ru_RU.mo │ ├── fondy-woocommerce-payment-gateway-ru_RU.po │ └── fondy-woocommerce-payment-gateway.pot └── uninstall.php └── settings1.png /.gitignore: -------------------------------------------------------------------------------- 1 | /woocommerce/fondy-woocommerce-payment-gateway/*.po~ 2 | /.idea 3 | -------------------------------------------------------------------------------- /Paid_Membership_Pro/README.md: -------------------------------------------------------------------------------- 1 | wordpress 2 | ========= 3 | 4 | # EN 5 | 6 | == Installation == 7 | 8 | 1. Ensure you have latest version of plugin installed (Paid memberships Pro) 9 | 2. Upload the plugin files to the `/wp-content/plugins/`(or upload the plugin zip file using wp-admin.) 10 | 3. Activate the plugin through the 'Plugins' menu. 11 | 12 | == Configuration == 13 | 14 | 1. Go to "Memberships > Payment Gateway & SSL Settings". 15 | 2. Choose method "Fondy". If it doesn't exist - activate the plugin. 16 | 4. Fill out the fields `Merchant ID:` and `Secret Key:`. 17 | 6. Save settings. 18 | 19 | --------- 20 | 21 | # RU 22 | 23 | == Установка == 24 | 25 | 1. Убедитесь что у вас установлена последняя версия плагина. (Paid memberships Pro) 26 | 2. Распакуйте этот плагин в директорию `/wp-content/plugins/`(либо установите вложенный архив через панель администратора) 27 | 3. Активируйте плагин в меню "Плагины" 28 | 29 | 30 | == Конфигурация == 31 | 32 | 1. Зайдите в "Memberships > Payment Gateway & SSL Settings" 33 | 2. Выберите метод "Fondy". Если его нет - активируйте плагин. 34 | 3. Заполните поля `Merchant ID:` и `Secret Key:` данными полученными от fondy.eu 35 | 4. Сохраните настройки 36 | 37 | 38 | ![Скриншот][1] 39 | ---- 40 | 41 | [1]: https://raw.githubusercontent.com/cloudipsp/wordpress/master/Paid_Membership_Pro/settings.png -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/README.txt: -------------------------------------------------------------------------------- 1 | === FONDY — Paid memberships Pro Payment Gateway === 2 | Contributors: fondyeu 3 | Tags: payments, payment gateway, paid memberships pro, online payment, merchant 4 | Requires at least: 3.5 5 | Tested up to: 5.7 6 | Requires PHP: 5.6 7 | Stable tag: 1.0.9 8 | License: GPLv2 or later 9 | License URI: http://www.gnu.org/licenses/gpl-2.0.html 10 | 11 | FONDY payment gateway integration for Paid memberships Pro. 12 | 13 | == Description == 14 | [This Paid memberships Pro payment plugin](https://fondy.eu/en/cms/wordpress/wordpress-paid-membership-pro/?utm_source=wordpress.org&utm_medium=cms) adds FONDY as payment gateway to plugin Paid memberships Pro. FONDY can accept VISA and MasterCard securely, quickly and easily on your store in minutes. Recurring payments, simple, straightforward pricing, top notch fraud intelligence, and 24/7 support. 15 | 16 | = Start with FONDY = 17 | [Create Free FONDY Account](https://portal.fondy.eu/mportal/#/account/registration?utm_source=wordpress.org&utm_medium=cms) 18 | 19 | == Features == 20 | * Customize your checkout window ([Some styles](http://jsfiddle.net/8h65h91t/)) 21 | * Easy configuration - only Merchant ID and Secret Key! 22 | 23 | == Allowed currencies == 24 | With us your customers can make purchases in many currencies. FONDY support EUR, USD, GBP, RUB, UAH and some other. 25 | 26 | == Tariffs == 27 | Only commission with payment. It is possible to adjust payment of the commission on itself, or to impose on the client. 28 | 29 | [See current tariffs on the FONDY website](https://fondy.eu/en/tariffs-fondy/) 30 | 31 | 32 | == Frequently Asked Questions == 33 | Some answers you can find here [FAQ](https://fondy.eu/faq/?utm_source=wordpress.org&utm_medium=cms) 34 | 35 | == Installation == 36 | 1. Ensure you have latest version of plugin installed (Paid memberships Pro) 37 | 2. Upload the plugin files to the `/wp-content/plugins/`(or upload the plugin zip file using wp-admin.) 38 | 3. Activate the plugin through the 'Plugins' menu. 39 | 40 | == Screenshots == 41 | 1. FONDY options 42 | 2. Checkout page 43 | 44 | == Changelog == 45 | = 1.0.9 = 46 | fix deprecation method calls for PHP 8 47 | = 1.0.8 = 48 | changed order_id generation logic 49 | = 1.0.7 = 50 | fix response_url redirect 51 | = 1.0.6 = 52 | add trial period support 53 | sandbox mode fix 54 | = 1.0.5 = 55 | add localization 56 | fix displaying currency and tax setting 57 | = 1.0.4 = 58 | fix duplicate orders 59 | = 1.0.0 = 60 | * First release -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/assets/js/fondy.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | document.addEventListener("DOMContentLoaded", () => { 4 | /** 5 | * add membershiplevel trial settings description 6 | * 7 | * @see paid-memberships-pro/adminpages/membershiplevels.php:522 8 | * @since 1.0.6 9 | */ 10 | // 11 | if (pagenow.includes('pmpro-membershiplevels') && fondy_param !== "undefined") { 12 | let trialDescriptionBlock = document.createElement('p'), 13 | trialDescriptionText = document.createElement('strong'); 14 | 15 | trialDescriptionBlock.classList.add('description'); 16 | trialDescriptionText.innerText = fondy_param.trialDescriptionText; 17 | trialDescriptionBlock.appendChild(trialDescriptionText); 18 | document.querySelector('.trial_info.recurring_info td').appendChild(trialDescriptionBlock); 19 | } 20 | 21 | /** 22 | * reinit gateway currency and tax settings 23 | * 24 | * @see paid-memberships-pro/paymentsettings.php:190 25 | * @since 1.0.5 26 | */ 27 | if (pagenow.includes('pmpro-paymentsettings')) { 28 | let gatewaySelect = document.getElementById('gateway'); 29 | 30 | if (gatewaySelect != null && gatewaySelect.value === 'fondy' && typeof pmpro_changeGateway === "function") { 31 | pmpro_changeGateway('fondy'); 32 | } 33 | } 34 | }); -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/classes/class.pmprogateway_fondy.php: -------------------------------------------------------------------------------- 1 | isTestEnv = pmpro_getOption( "gateway_environment" ) === 'sandbox'; 23 | 24 | parent::__construct($gateway); 25 | } 26 | 27 | public static function install() 28 | { 29 | global $wpdb; 30 | 31 | $wpdb->query("ALTER TABLE $wpdb->pmpro_membership_orders ADD fondy_token TEXT"); 32 | } 33 | 34 | public static function uninstall() 35 | { 36 | global $wpdb; 37 | 38 | $wpdb->query("ALTER TABLE $wpdb->pmpro_membership_orders DROP COLUMN fondy_token"); 39 | } 40 | 41 | /** 42 | * Run on WP init 43 | * 44 | * @since 1.8 45 | */ 46 | public static function init() 47 | { 48 | //make sure fondy is a gateway option 49 | add_filter('pmpro_gateways', array('PMProGateway_fondy', 'pmpro_gateways')); 50 | 51 | //localization 52 | load_plugin_textdomain( 'pmp-fondy-payment', false, basename(PMPRO_FONDY_DIR).'/languages/' ); 53 | 54 | //add plugin setting button 55 | add_filter('plugin_action_links_' . plugin_basename(PMPRO_FONDY_BASE_FILE), 56 | array('PMProGateway_fondy', 'plugin_action_links') 57 | ); 58 | 59 | //add plugin doc button 60 | add_filter( 'plugin_row_meta', array('PMProGateway_fondy', 'plugin_row_meta'), 10, 2); 61 | 62 | //add fields to payment settings 63 | add_filter('pmpro_payment_options', array('PMProGateway_fondy', 'pmpro_payment_options')); 64 | add_filter('pmpro_payment_option_fields', array('PMProGateway_fondy', 'pmpro_payment_option_fields'), 10, 2); 65 | 66 | //code to add at checkout if fondy is the current gateway 67 | if (pmpro_getGateway() == "fondy") { 68 | //add_filter('pmpro_include_billing_address_fields', '__return_false'); 69 | add_filter('pmpro_include_payment_information_fields', '__return_false'); 70 | add_filter('pmpro_required_billing_fields', array('PMProGateway_fondy', 'pmpro_required_billing_fields')); 71 | add_filter('pmpro_checkout_default_submit_button', array( 72 | 'PMProGateway_fondy', 73 | 'pmpro_checkout_default_submit_button' 74 | )); 75 | add_filter('pmpro_checkout_before_change_membership_level', array( 76 | 'PMProGateway_fondy', 77 | 'pmpro_checkout_before_change_membership_level' 78 | ), 10, 2); 79 | 80 | // add js to some admin pmp pages 81 | add_filter('pmpro_payment_option_fields', array('PMProGateway_fondy', 'addFondyAdminPageJS'), 11, 2); 82 | add_filter('pmpro_membership_level_after_other_settings', array('PMProGateway_fondy', 'addFondyAdminPageJS')); 83 | } 84 | } 85 | 86 | /** 87 | * Make sure fondy is in the gateways list 88 | * 89 | * @since 1.8 90 | */ 91 | public static function pmpro_gateways($gateways) 92 | { 93 | if (empty($gateways['fondy'])) { 94 | $gateways['fondy'] = __('Fondy', 'pmp-fondy-payment'); 95 | } 96 | 97 | return $gateways; 98 | } 99 | 100 | public static function pmpro_required_billing_fields($fields) 101 | { 102 | //unset($fields['bfirstname']); 103 | //unset($fields['blastname']); 104 | unset($fields['baddress1']); 105 | unset($fields['bcity']); 106 | unset($fields['bstate']); 107 | unset($fields['bzipcode']); 108 | //unset($fields['bphone']); 109 | unset($fields['bemail']); 110 | unset($fields['bcountry']); 111 | unset($fields['CardType']); 112 | unset($fields['AccountNumber']); 113 | unset($fields['ExpirationMonth']); 114 | unset($fields['ExpirationYear']); 115 | unset($fields['CVV']); 116 | 117 | return $fields; 118 | } 119 | 120 | /** 121 | * Get a list of payment options that the fondy gateway needs/supports. 122 | * 123 | * @since 1.8 124 | */ 125 | public static function getGatewayOptions() 126 | { 127 | $options = array( 128 | 'sslseal', 129 | 'nuclear_HTTPS', 130 | 'gateway_environment', 131 | 'fondy_merchantid', 132 | 'fondy_securitykey', 133 | 'currency', 134 | 'use_ssl', 135 | 'tax_state', 136 | 'tax_rate', 137 | 'accepted_credit_cards' 138 | ); 139 | 140 | return $options; 141 | } 142 | 143 | /** 144 | * Set payment options for payment settings page. 145 | * 146 | * @since 1.8 147 | */ 148 | public static function pmpro_payment_options($options) 149 | { 150 | //get fondy options 151 | $fondy_options = PMProGateway_fondy::getGatewayOptions(); 152 | 153 | //merge with others. 154 | $options = array_merge($fondy_options, $options); 155 | 156 | return $options; 157 | } 158 | 159 | /** 160 | * Display fields for fondy options. 161 | * 162 | * @param $values 163 | * @param $gateway 164 | */ 165 | public static function pmpro_payment_option_fields($values, $gateway) 166 | { 167 | include( PMPRO_FONDY_DIR .'/views/payment-option-fields.php' ); 168 | } 169 | 170 | /** 171 | * Swap in our submit buttons. 172 | * 173 | * @since 1.8 174 | */ 175 | public static function pmpro_checkout_default_submit_button($show) 176 | { 177 | $text_domain = 'pmpro'; 178 | 179 | if (version_compare('1.8.13.6', PMPRO_VERSION, '<=')) { 180 | $text_domain = 'paid-memberships-pro'; 181 | } 182 | 183 | include( PMPRO_FONDY_DIR .'/views/submit-button.php' ); 184 | 185 | //don't show the default 186 | return false; 187 | } 188 | 189 | /** 190 | * @param $user_id 191 | * @param $morder 192 | */ 193 | public static function pmpro_checkout_before_change_membership_level($user_id, $morder) 194 | { 195 | global $discount_code_id, $wpdb; 196 | 197 | //if no order, no need to pay 198 | if (empty($morder)) { 199 | return; 200 | } 201 | 202 | $morder->user_id = $user_id; 203 | $morder->saveOrder(); 204 | 205 | //save discount code use 206 | if (!empty($discount_code_id)) { 207 | $wpdb->query("INSERT INTO $wpdb->pmpro_discount_codes_uses (code_id, user_id, order_id, timestamp) VALUES('" . $discount_code_id . "', '" . $user_id . "', '" . $morder->id . "', now())"); 208 | } 209 | 210 | do_action("pmpro_before_send_to_fondy", $user_id, $morder); 211 | 212 | $morder->Gateway->sendToFondy($morder); 213 | } 214 | 215 | 216 | /** 217 | * add plugin setting button 218 | * 219 | * @param $links 220 | * @return mixed 221 | */ 222 | public static function plugin_action_links($links) 223 | { 224 | $settings_link = ''. __("Settings") .''; 225 | array_unshift( $links, $settings_link ); 226 | 227 | return $links; 228 | } 229 | 230 | /** 231 | * add plugin row buttons 232 | * 233 | * @param $links 234 | * @param $file 235 | * @return array 236 | */ 237 | public static function plugin_row_meta($links, $file) 238 | { 239 | if(strpos($file, basename(PMPRO_FONDY_BASE_FILE)) !== false) { 240 | $row_links = array( 241 | '' . __('Docs', 'pmp-fondy-payment') . '', 242 | ); 243 | $links = array_merge( $links, $row_links ); 244 | } 245 | 246 | return $links; 247 | } 248 | 249 | /** 250 | * add js to admin page 251 | * 252 | * @since 1.0.6 253 | */ 254 | public static function addFondyAdminPageJS() 255 | { 256 | wp_enqueue_script( 257 | 'fondy-pmp', 258 | plugins_url('assets/js/fondy.js', plugin_basename(PMPRO_FONDY_BASE_FILE)), 259 | [], 260 | PMPRO_FONDY_VERSION, 261 | true 262 | ); 263 | 264 | if (sanitize_text_field($_REQUEST['page']) === 'pmpro-membershiplevels') { 265 | wp_localize_script('fondy-pmp', 'fondy_param', [ 266 | 'trialDescriptionText' => 'Fondy integration currently does not support trial amounts greater than 0.', //todo l10n 267 | ]); 268 | } 269 | } 270 | 271 | /** 272 | * @param $order 273 | * @return bool 274 | */ 275 | public function process(&$order) 276 | { 277 | if (empty($order->code)) { 278 | $order->code = $order->getRandomCode(); 279 | } 280 | 281 | //clean up a couple values 282 | $order->payment_type = "Fondy"; 283 | $order->CardType = ""; 284 | $order->cardtype = ""; 285 | 286 | 287 | $order->status = "review"; 288 | $order->saveOrder(); 289 | 290 | return true; 291 | } 292 | 293 | /** 294 | * @param MemberOrder $order 295 | */ 296 | public function sendToFondy(&$order) 297 | { 298 | global $pmpro_currency; 299 | 300 | //taxes on initial amount 301 | $initial_payment = $order->InitialPayment; 302 | $initial_payment_tax = $order->getTaxForPrice($initial_payment); 303 | $initial_payment = round((float)$initial_payment + (float)$initial_payment_tax, 2); 304 | 305 | if (empty($order->code)) 306 | $order->code = $order->getRandomCode(); 307 | 308 | $fondy_args = array( 309 | 'merchant_data' => json_encode(array( 310 | 'name' => $order->billing->name, 311 | 'phone' => $order->billing->phone 312 | )), 313 | 'product_id' => $order->membership_id, 314 | 'order_id' => $order->code, 315 | 'merchant_id' => $this->isTestEnv ? FondyForm::TEST_MERCHANT_ID : pmpro_getOption("fondy_merchantid"), 316 | 'order_desc' => substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), 317 | 'amount' => round($initial_payment * 100), 318 | 'currency' => $pmpro_currency, 319 | 'response_url' => admin_url("admin-ajax.php") . "?action=fondy-ins", 320 | 'server_callback_url' => admin_url("admin-ajax.php") . "?action=fondy-ins", 321 | 'sender_email' => $order->Email, 322 | 'verification' => $order->InitialPayment === 0.0 ? 'Y' : 'N', 323 | ); 324 | 325 | if (pmpro_isLevelRecurring($order->membership_level)) { 326 | $fondy_args['required_rectoken'] = 'Y'; 327 | $fondy_args['recurring_data'] = $this->getRecurringData($order); 328 | $fondy_args['subscription'] = 'Y'; 329 | $fondy_args['subscription_callback_url'] = admin_url("admin-ajax.php") . "?action=fondy-ins"; 330 | 331 | //filter order before subscription. use with care. 332 | $order = apply_filters("pmpro_subscribe_order", $order, $this); 333 | $order->subscription_transaction_id = $order->code; 334 | } 335 | 336 | $order->status = "pending"; 337 | $order->payment_transaction_id = $order->code; 338 | //update order 339 | $order->saveOrder(); 340 | 341 | $response = $this->sendRequest($fondy_args); 342 | $body = wp_remote_retrieve_body($response); 343 | $code = wp_remote_retrieve_response_code($response); 344 | $message = wp_remote_retrieve_response_message($response); 345 | $out = json_decode($body, true); 346 | 347 | if ($code === 200 && $message === 'OK') { 348 | if (is_string($out)) { 349 | wp_parse_str($out, $out); 350 | } 351 | 352 | if (isset($out['response']['error_message'])) { 353 | $error = '

' . __('Error message: ', 'pmp-fondy-payment') . ' ' . $out['response']['error_message'] . '

'; 354 | $error .= '

' . __('Error code: ', 'pmp-fondy-payment') . ' ' . $out['response']['error_code'] . '

'; 355 | 356 | wp_die($error, __('Error'), array('response' => '401')); 357 | } else { 358 | $url = json_decode(base64_decode($out['response']['data']), true)['order']['checkout_url']; 359 | wp_redirect($url); 360 | exit; 361 | } 362 | } 363 | 364 | exit; //mb add error handler 365 | } 366 | 367 | /** 368 | * @param MemberOrder $order 369 | * @return array 370 | */ 371 | private function getRecurringData($order) 372 | { 373 | $every = intval($order->BillingFrequency); 374 | $period = strtolower($order->BillingPeriod); 375 | $startTS = strtotime('+ ' . $every . ' ' . $period); 376 | 377 | if ($order->BillingPeriod === 'Year'){ // fondy doesn't have 'year' period 378 | $every *= 12; 379 | $period = 'month'; 380 | $startTS = strtotime('+ 1 month'); 381 | } 382 | 383 | $recurringData = array( 384 | 'start_time' => date('Y-m-d', $startTS), 385 | 'amount' => round($order->PaymentAmount * 100), 386 | 'every' => $every, 387 | 'period' => $period, 388 | 'state' => 'shown_readonly', 389 | 'readonly' => 'Y' 390 | ); 391 | 392 | if (!empty($order->TotalBillingCycles)){ 393 | $recurringData["quantity"] = intval($order->TotalBillingCycles); 394 | } 395 | 396 | if (pmpro_isLevelTrial($order->membership_level)){ 397 | $trialPeriod = strtolower($order->TrialBillingPeriod); 398 | $trialQuantity = intval($order->TrialBillingCycles); 399 | 400 | if ($order->TrialBillingPeriod === 'Year'){ 401 | $trialPeriod = 'month'; 402 | $trialQuantity *= 12; 403 | } 404 | 405 | //$recurringData["trial_amount"] = $order->TrialAmount; // w8 api realisation 406 | $recurringData["trial_period"] = $trialPeriod; 407 | $recurringData["trial_quantity"] = $trialQuantity; 408 | } 409 | 410 | return $recurringData; 411 | } 412 | 413 | /** 414 | * @param array $args 415 | * @return array|WP_Error 416 | */ 417 | private function sendRequest($args) 418 | { 419 | $secretKey = $this->isTestEnv ? FondyForm::TEST_MERCHANT_KEY : pmpro_getOption("fondy_securitykey"); 420 | 421 | $fields = [ 422 | "version" => "2.0", 423 | "data" => base64_encode(json_encode(array('order' => $args))), 424 | "signature" => FondyForm::getSignature($args, $secretKey) 425 | ]; 426 | 427 | $response = wp_remote_post(FondyForm::API_CHECKOUT_URL, array( 428 | 'headers' => array('Content-Type' => 'application/json'), 429 | 'timeout' => 45, 430 | 'method' => 'POST', 431 | 'sslverify' => true, 432 | 'httpversion' => '1.1', 433 | 'body' => json_encode(array('request' => $fields)) 434 | ) 435 | ); 436 | 437 | if (is_wp_error($response)) { 438 | $error = '

' . __('An unidentified error occurred.', 'pmp-fondy-payment') . '

'; 439 | $error .= '

' . $response->get_error_message() . '

'; 440 | 441 | wp_die($error, __('Error'), array('response' => '401')); 442 | } 443 | 444 | return $response; 445 | } 446 | } 447 | -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/classes/fondy.lib.php: -------------------------------------------------------------------------------- 1 | $data)))); 17 | } 18 | 19 | public static function isPaymentValid($fondySettings, $response , $base64_data, $sign) 20 | { 21 | if ($fondySettings['merchant_id'] != $response['merchant_id']) { 22 | 23 | return 'An error has occurred during payment. Merchant data is incorrect.'; 24 | } 25 | if (isset($response['response_signature_string'])){ 26 | unset($response['response_signature_string']); 27 | } 28 | if (isset($response['signature'])){ 29 | unset($response['signature']); 30 | } 31 | if ($sign != sha1($fondySettings['secret_key'] . FondyForm::SIGNATURE_SEPARATOR . $base64_data)) { 32 | return 'An error has occurred during payment. Signature is not valid.'; 33 | } 34 | return true; 35 | } 36 | } -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/languages/pmp-fondy-payment-ru_RU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/Paid_Membership_Pro/pmp-fondy-payment/languages/pmp-fondy-payment-ru_RU.mo -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/languages/pmp-fondy-payment-ru_RU.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 PmP Fondy Payment 2 | # This file is distributed under the same license as the PmP Fondy Payment package. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: PmP Fondy Payment 1.0.4\n" 6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pmp-fondy-payment\n" 7 | "POT-Creation-Date: 2020-10-12 15:41:15+00:00\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "PO-Revision-Date: 2020-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: FULL NAME \n" 13 | "Language-Team: LANGUAGE \n" 14 | 15 | #: classes/class.pmprogateway_fondy.php:84 16 | msgid "Fondy" 17 | msgstr "Fondy" 18 | 19 | #: classes/class.pmprogateway_fondy.php:137 20 | msgid "Settings" 21 | msgstr "Настройки" 22 | 23 | #: classes/class.pmprogateway_fondy.php:154 24 | msgid "View Documentation" 25 | msgstr "Просмотр документации" 26 | 27 | #: classes/class.pmprogateway_fondy.php:154 28 | msgid "Docs" 29 | msgstr "Документация" 30 | 31 | #: classes/class.pmprogateway_fondy.php:173 32 | msgid "Fondy Settings" 33 | msgstr "Настройки Fondy" 34 | 35 | #: classes/class.pmprogateway_fondy.php:178 36 | msgid "Merchant ID" 37 | msgstr "ID мерчанта" 38 | 39 | #: classes/class.pmprogateway_fondy.php:187 40 | msgid "Payment key" 41 | msgstr "Ключ платежа" 42 | 43 | #: classes/class.pmprogateway_fondy.php:422 44 | msgid "An unidentified error occurred." 45 | msgstr "Произошла неопознанная ошибка." 46 | 47 | #: classes/class.pmprogateway_fondy.php:434 48 | msgid "Error message: " 49 | msgstr "Сообщение об ошибке: " 50 | 51 | #: classes/class.pmprogateway_fondy.php:435 52 | msgid "Error code: " 53 | msgstr "Код ошибки: " 54 | #. Plugin Name of the plugin/theme 55 | msgid "PmP Fondy Payment" 56 | msgstr "PmP Fondy Payment" 57 | 58 | #. Plugin URI of the plugin/theme 59 | msgid "https://fondy.eu" 60 | msgstr "https://fondy.ru" 61 | 62 | #. Description of the plugin/theme 63 | msgid "Fondy Gateway for Paid Memberships Pro" 64 | msgstr "Fondy Gateway для Paid Memberships Pro" 65 | 66 | #. Author of the plugin/theme 67 | msgid "FONDY - Unified Payment Platform" 68 | msgstr "FONDY - Unified Payment Platform" 69 | 70 | #. Author URI of the plugin/theme 71 | msgid "https://fondy.eu/" 72 | msgstr "https://fondy.ru/" 73 | -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/languages/pmp-fondy-payment.pot: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 PmP Fondy Payment 2 | # This file is distributed under the same license as the PmP Fondy Payment package. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: PmP Fondy Payment 1.0.4\n" 6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pmp-fondy-payment\n" 7 | "POT-Creation-Date: 2020-10-12 15:41:15+00:00\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "PO-Revision-Date: 2020-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: FULL NAME \n" 13 | "Language-Team: LANGUAGE \n" 14 | 15 | #: classes/class.pmprogateway_fondy.php:84 16 | msgid "Fondy" 17 | msgstr "" 18 | 19 | #: classes/class.pmprogateway_fondy.php:137 20 | msgid "Settings" 21 | msgstr "" 22 | 23 | #: classes/class.pmprogateway_fondy.php:154 24 | msgid "View Documentation" 25 | msgstr "" 26 | 27 | #: classes/class.pmprogateway_fondy.php:154 28 | msgid "Docs" 29 | msgstr "" 30 | 31 | #: classes/class.pmprogateway_fondy.php:173 32 | msgid "Fondy Settings" 33 | msgstr "" 34 | 35 | #: classes/class.pmprogateway_fondy.php:178 36 | msgid "Merchant ID" 37 | msgstr "" 38 | 39 | #: classes/class.pmprogateway_fondy.php:187 40 | msgid "Payment key" 41 | msgstr "" 42 | 43 | #: classes/class.pmprogateway_fondy.php:422 44 | msgid "An unidentified error occurred." 45 | msgstr "" 46 | 47 | #: classes/class.pmprogateway_fondy.php:434 48 | msgid "Error message: " 49 | msgstr "" 50 | 51 | #: classes/class.pmprogateway_fondy.php:435 52 | msgid "Error code: " 53 | msgstr "" 54 | #. Plugin Name of the plugin/theme 55 | msgid "PmP Fondy Payment" 56 | msgstr "" 57 | 58 | #. Plugin URI of the plugin/theme 59 | msgid "https://fondy.eu" 60 | msgstr "" 61 | 62 | #. Description of the plugin/theme 63 | msgid "Fondy Gateway for Paid Memberships Pro" 64 | msgstr "" 65 | 66 | #. Author of the plugin/theme 67 | msgid "FONDY - Unified Payment Platform" 68 | msgstr "" 69 | 70 | #. Author URI of the plugin/theme 71 | msgid "https://fondy.eu/" 72 | msgstr "" 73 | -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/pmpro-fondy-gateway.php: -------------------------------------------------------------------------------- 1 | $val) { 24 | $_POST[esc_sql($key)] = esc_sql($val); 25 | } 26 | } 27 | 28 | if (isset($_POST['version'])){ 29 | $base64_data = esc_sql($_POST['data']); 30 | $signature = esc_sql((string)$_POST['signature']); 31 | $response = json_decode(base64_decode(esc_sql($_POST['data'])), true)['order']; 32 | 33 | /** 34 | * Validate Fondy answer 35 | */ 36 | if (pmpro_fondy_validate_sign($base64_data, $signature, $response, $gateway_environment === 'sandbox') !== true) { 37 | pmpro_fondy_fnlog("Signature Invalid."); 38 | pmpro_fondy_exit(); 39 | } 40 | } elseif (!empty($_POST['order_id']) && !empty($_POST['merchant_id'])) { // todo remove this elseif after checkout2 response_url fix 41 | $merchantID = $gateway_environment === 'sandbox' ? FondyForm::TEST_MERCHANT_ID : pmpro_getOption("fondy_merchantid"); 42 | if ($merchantID === $_POST['merchant_id']){ 43 | $response = esc_sql($_POST); 44 | } 45 | } 46 | 47 | if (empty($response)) { 48 | pmpro_fondy_fnlog("Empty response."); 49 | pmpro_fondy_exit(); 50 | } 51 | 52 | //assign posted variables to local variables 53 | $amount = (int)$response['amount']; 54 | $actual_amount = (int)$response['actual_amount']; 55 | $subscr_id = (int)$response['product_id']; 56 | $rectoken = esc_sql((string)$response['rectoken']); 57 | $order_id = esc_sql((string)$response['order_id']); 58 | $customer_email = esc_sql((string)$response['sender_email']); 59 | $system_payment_id = (int)$response['payment_id']; 60 | $order_status = esc_sql((string)$response['order_status']); 61 | 62 | if ($order_status == FondyForm::ORDER_APPROVED) { 63 | 64 | $morder = new MemberOrder($order_id); 65 | $morder->getMembershipLevel(); 66 | 67 | $morder->getUser(); 68 | 69 | if (isset($rectoken) and !empty($rectoken)) { 70 | $id = $morder->id; 71 | $rec = $wpdb->query($wpdb->prepare(" 72 | UPDATE `$wpdb->pmpro_membership_orders` 73 | SET `fondy_token` = %s 74 | WHERE id = %d", 75 | array($rectoken, $id) 76 | )); 77 | } 78 | 79 | pmpro_fondy_fnlog("ORDER_CREATED: ORDER: " . var_export($morder, true) . "\n---\n"); 80 | 81 | if (!empty($morder) && !empty($morder->status) && $morder->status == 'success') { 82 | $last_subscr_order = new MemberOrder(); 83 | $last_subscr_order->getLastMemberOrderBySubscriptionTransactionID($system_payment_id); 84 | if (!empty($response['parent_order_id'])) { 85 | $order_old_id = esc_sql((string)$response['parent_order_id']); 86 | } else { 87 | $order_old_id = $order_id; 88 | } 89 | $order_info = array( 90 | 'amount' => $amount, 91 | 'actual_amount' => $actual_amount, 92 | 'order_id' => $order_id, 93 | 'payment_id' => $system_payment_id, 94 | ); 95 | pmpro_fondy_insSaveOrder($order_old_id, $last_subscr_order, $order_info); 96 | pmpro_fondy_fnlog("Checkout was already processed (" . $morder->code . "). Reccuring this request."); 97 | 98 | } elseif (pmpro_fondy_insChangeMembershipLevel($order_id, $morder, $system_payment_id, $rectoken)) { 99 | pmpro_fondy_fnlog("Checkout processed (" . $morder->code . ") success!"); 100 | } else { 101 | pmpro_fondy_fnlog("ERROR: Couldn't change level for order (" . $morder->code . ")."); 102 | } 103 | 104 | if (isset($callback)) // return 200 to callback 105 | wp_die(); 106 | 107 | pmpro_fondy_exit(pmpro_url("confirmation", "?level=" . $morder->membership_level->id)); 108 | } else { 109 | pmpro_fondy_fnlog("ERROR: (" . $order_status . ")."); 110 | } 111 | 112 | 113 | function pmpro_fondy_fnlog($s) 114 | { 115 | global $fondy_logstr; 116 | $fondy_logstr .= "\t" . $s . "\n"; 117 | } 118 | 119 | function pmpro_fondy_exit($redirect = false) 120 | { 121 | global $fondy_logstr; 122 | 123 | $fondy_logstr = var_export($_REQUEST, true) . "Logged On: " . date("m/d/Y H:i:s") . "\n" . $fondy_logstr . "\n-------------\n"; 124 | 125 | //log in file or email? 126 | if (defined('FONDY_PMPRO_DEBUG') && FONDY_PMPRO_DEBUG === "log") { 127 | //file 128 | $loghandle = fopen(dirname(__FILE__) . "/../logs/fondy.txt", "a+"); 129 | fwrite($loghandle, $fondy_logstr); 130 | fclose($loghandle); 131 | } elseif (defined('FONDY_PMPRO_DEBUG')) { 132 | //email 133 | if (strpos(FONDY_PMPRO_DEBUG, "@")) { 134 | $log_email = FONDY_PMPRO_DEBUG; 135 | } //constant defines a specific email address 136 | else { 137 | $log_email = get_option("admin_email"); 138 | } 139 | 140 | wp_mail($log_email, get_option("blogname") . " Fondy log", nl2br($fondy_logstr)); 141 | } 142 | 143 | if (!empty($redirect)) { 144 | wp_redirect($redirect); 145 | } 146 | 147 | exit; 148 | } 149 | 150 | function pmpro_fondy_validate_sign($base64_data, $sign, $response = array(), $isTestEnv = false) 151 | { 152 | $settings = array( 153 | 'merchant_id' => $isTestEnv ? FondyForm::TEST_MERCHANT_ID : pmpro_getOption("fondy_merchantid"), 154 | 'secret_key' => $isTestEnv ? FondyForm::TEST_MERCHANT_KEY : pmpro_getOption("fondy_securitykey"), 155 | ); 156 | 157 | return FondyForm::isPaymentValid($settings, $response, $base64_data, $sign); 158 | } 159 | 160 | function pmpro_fondy_insChangeMembershipLevel($txn_id, &$morder, $payment_id, $rectoken) 161 | { 162 | $recurring = $rectoken; 163 | //filter for level 164 | $morder->membership_level = apply_filters("pmpro_inshandler_level", $morder->membership_level, $morder->user_id); 165 | 166 | //set the start date to current_time('mysql') but allow filters (documented in preheaders/checkout.php) 167 | $startdate = apply_filters("pmpro_checkout_start_date", "'" . current_time('mysql') . "'", $morder->user_id, $morder->membership_level); 168 | 169 | //fix expiration date 170 | if (!empty($morder->membership_level->expiration_number)) { 171 | $enddate = "'" . date("Y-m-d", strtotime("+ " . $morder->membership_level->expiration_number . " " . $morder->membership_level->expiration_period, current_time("timestamp"))) . "'"; 172 | } else { 173 | $enddate = "NULL"; 174 | } 175 | 176 | //filter the enddate (documented in preheaders/checkout.php) 177 | $enddate = apply_filters("pmpro_checkout_end_date", $enddate, $morder->user_id, $morder->membership_level, $startdate); 178 | 179 | //get discount code 180 | $morder->getDiscountCode(); 181 | if (!empty($morder->discount_code)) { 182 | //update membership level 183 | $morder->getMembershipLevel(true); 184 | $discount_code_id = $morder->discount_code->id; 185 | } else { 186 | $discount_code_id = ""; 187 | } 188 | 189 | 190 | //custom level to change user to 191 | $custom_level = array( 192 | 'user_id' => $morder->user_id, 193 | 'membership_id' => $morder->membership_level->id, 194 | 'code_id' => $discount_code_id, 195 | 'initial_payment' => $morder->membership_level->initial_payment, 196 | 'billing_amount' => $morder->membership_level->billing_amount, 197 | 'cycle_number' => $morder->membership_level->cycle_number, 198 | 'cycle_period' => $morder->membership_level->cycle_period, 199 | 'billing_limit' => $morder->membership_level->billing_limit, 200 | 'trial_amount' => $morder->membership_level->trial_amount, 201 | 'trial_limit' => $morder->membership_level->trial_limit, 202 | 'startdate' => $startdate, 203 | 'enddate' => $enddate 204 | ); 205 | 206 | global $pmpro_error, $wpdb; 207 | if (!empty($pmpro_error)) { 208 | pmpro_fondy_fnlog($pmpro_error); 209 | } 210 | 211 | if (pmpro_changeMembershipLevel($custom_level, $morder->user_id) !== false) { 212 | //update order status and transaction ids 213 | $morder->status = "success"; 214 | $morder->payment_transaction_id = $txn_id; 215 | if ($recurring) { 216 | $morder->subscription_transaction_id = $payment_id; 217 | } else { 218 | $morder->subscription_transaction_id = ''; 219 | } 220 | $morder->saveOrder(); 221 | 222 | //add discount code use 223 | if (!empty($discount_code) && !empty($use_discount_code)) { 224 | $wpdb->query("INSERT INTO $wpdb->pmpro_discount_codes_uses (code_id, user_id, order_id, timestamp) VALUES('" . esc_sql($discount_code_id) . "', '" . esc_sql($morder->user_id) . "', '" . esc_sql($morder->id) . "', '" . current_time('mysql') . "')"); 225 | } 226 | 227 | 228 | //hook 229 | do_action("pmpro_after_checkout", $morder->user_id, $morder); 230 | 231 | //setup some values for the emails 232 | if (!empty($morder)) { 233 | $invoice = new MemberOrder($morder->id); 234 | } else { 235 | $invoice = null; 236 | } 237 | 238 | pmpro_fondy_fnlog("CHANGEMEMBERSHIPLEVEL: ORDER: " . var_export($morder, true) . "\n---\n"); 239 | 240 | $user = get_userdata($morder->user_id); 241 | 242 | if (empty($user)) { 243 | return false; 244 | } 245 | 246 | $user->membership_level = $morder->membership_level; //make sure they have the right level info 247 | 248 | //send email to member 249 | $pmproemail = new PMProEmail(); 250 | $pmproemail->sendCheckoutEmail($user, $invoice); 251 | 252 | //send email to admin 253 | $pmproemail->sendCheckoutAdminEmail($user, $invoice); 254 | 255 | return true; 256 | } else { 257 | return false; 258 | } 259 | } 260 | 261 | function pmpro_fondy_insSaveOrder($txn_id, $last_order, $order_info = array()) 262 | { 263 | global $wpdb; 264 | 265 | //check that txn_id has not been previously processed 266 | $old_txn = $wpdb->get_var("SELECT payment_transaction_id FROM $wpdb->pmpro_membership_orders WHERE payment_transaction_id = '" . $txn_id . "' LIMIT 1"); 267 | 268 | if (empty($old_txn)) { 269 | 270 | //save order 271 | $user_id = $last_order->user_id; 272 | $user = get_userdata($user_id); 273 | $user->membership_level = pmpro_getMembershipLevelForUser($user_id); 274 | $morder = new MemberOrder(); 275 | $morder->user_id = $last_order->user_id; 276 | $morder->membership_id = $last_order->membership_id; 277 | 278 | if (isset($order_info['amount'])) { 279 | $morder->subtotal = $order_info['amount'] / 100; 280 | } elseif (isset($order_info['actual_amount'])) { 281 | $morder->total = (!empty($order_info['amount']) ? $order_info['amount'] / 100 : 0); 282 | } 283 | 284 | $morder->payment_transaction_id = $order_info['order_id']; 285 | $morder->subscription_transaction_id = $order_info['payment_id']; 286 | 287 | $morder->gateway = $last_order->gateway; 288 | $morder->gateway_environment = $last_order->gateway_environment; 289 | $morder->billing = new stdClass(); 290 | 291 | $morder->billing->street = $last_order->billing->street; 292 | $morder->billing->city = $last_order->billing->city; 293 | $morder->billing->state = $last_order->billing->state; 294 | $morder->billing->zip = $last_order->billing->zip; 295 | $morder->billing->country = $last_order->billing->country; 296 | $morder->billing->phone = $last_order->billing->phone; 297 | $morder->status = "success"; 298 | $morder->payment_type = "Fondy"; 299 | //save 300 | $morder->saveOrder(); 301 | $morder->getMemberOrderByID($morder->id); 302 | 303 | //email the user their invoice 304 | $pmproemail = new PMProEmail(); 305 | $pmproemail->sendInvoiceEmail(get_userdata($last_order->user_id), $morder); 306 | 307 | pmpro_fondy_fnlog("New order (" . $morder->code . ") created."); 308 | do_action('pmpro_subscription_payment_completed', $morder); 309 | 310 | return $morder->code; 311 | } else { 312 | pmpro_fondy_fnlog("Duplicate Transaction ID: " . $txn_id); 313 | return false; 314 | } 315 | } -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/services/services.php: -------------------------------------------------------------------------------- 1 | 5 | style="display: none;"> 7 | 8 | 9 | 10 | 11 | style="display: none;"> 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | style="display: none;"> 21 | 22 | 23 | 24 | 25 | 27 | 28 | -------------------------------------------------------------------------------- /Paid_Membership_Pro/pmp-fondy-payment/views/submit-button.php: -------------------------------------------------------------------------------- 1 | 5 | "> 7 | 8 | 10 | -------------------------------------------------------------------------------- /Paid_Membership_Pro/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/Paid_Membership_Pro/settings.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fondy WordPress payment integration 2 | ### Choose plugin and unzip from folder 3 | 4 | 1. For **Easy Digital Downloads** plugin — ```easy-digital-downloads-fondy``` folder 5 | 2. For **Paid Membership Pro** plugin — ```Paid_Membership_Pro``` folder 6 | 3. For **Restrict Content Pro** plugin — ```Restrict_Content_Pro``` folder 7 | 4. For **WooCommerce + Subscription** plugin — ```woocommerce_subscription``` folder 8 | 5. For **WooCommerce** plugin — ```woocommerce``` folder 9 | -------------------------------------------------------------------------------- /Restrict_Content_Pro/README.md: -------------------------------------------------------------------------------- 1 | 2 | **Wordpress + (Restrict Content Pro)** 3 | 4 | # RU 5 | 6 | *Установка* 7 | 8 | 1. Убедитесь что у вас установлена последняя версия плагина Restrict Content Pro 9 | 2. Распакуйте этот плагин в директорию `/wp-content/plugins/`(либо установите вложенный архив через панель администратора) 10 | 3. Активируйте плагин в меню "Плагины" 11 | 12 | *Конфигурация* 13 | 14 | 1. Зайдите в "Ограничения > Настройки > Платежи" найдите Fondy и активируйте 15 | 2. Введите во вкладке ```Fondy RCP payment``` параметры Fondy Secret Key, Fondy MID. 16 | 3. Сохраните настройки. 17 | -------------------------------------------------------------------------------- /Restrict_Content_Pro/fondy-restrict-gateway/fondy/fondy-admin.php: -------------------------------------------------------------------------------- 1 | (int)$data['fondy_merchant_id'], 45 | 'fondy_secret' => (string)$data['fondy_secret'], 46 | 'fondy_reccuring' => (bool)$data['fondy_reccuring'] 47 | ); 48 | return $return; 49 | } 50 | 51 | function rcp_fondy_admin_page() 52 | { 53 | global $rcp_fondy_options; 54 | ?> 55 | 56 | 57 |
58 | 59 |
60 | 61 | 62 | 65 | 66 | 67 | 68 | 72 | 80 | 81 | 82 | 86 | 94 | 95 | 96 | 100 | 107 | 108 | 109 |
63 |

64 |
69 | 71 | 73 | 78 |

79 |
83 | 85 | 87 | 92 |

93 |
97 | 99 | 101 | /> 105 |

106 |
110 |
111 |

112 | 113 |

114 |
115 | $v) { 19 | $str .= self::SIGNATURE_SEPARATOR . $v; 20 | } 21 | if ($encoded) { 22 | return sha1($str); 23 | } else { 24 | return $str; 25 | } 26 | } 27 | 28 | public static function isPaymentValid($fondySettings, $response, $base64_data, $sign) 29 | { 30 | if ($fondySettings['mid'] != $response['merchant_id']) { 31 | return 'An error has occurred during payment. Merchant data is incorrect.'; 32 | } 33 | if (isset($response['response_signature_string'])) { 34 | unset($response['response_signature_string']); 35 | } 36 | if (isset($response['signature'])) { 37 | unset($response['signature']); 38 | } 39 | if (isset($response['merchant_data'])) { 40 | $response['merchant_data'] = stripslashes($response['merchant_data']); 41 | } 42 | if (!empty($base64_data)) { 43 | if ($sign != sha1($fondySettings['secret_key'] . '|' . $base64_data)) { 44 | return 'An error has occurred during payment. Signature is not valid.'; 45 | } 46 | } elseif ($sign != self::getSignature($response, $fondySettings['secret_key'])) { 47 | return 'An error has occurred during payment. Signature is not valid.'; 48 | } 49 | 50 | return true; 51 | } 52 | } -------------------------------------------------------------------------------- /Restrict_Content_Pro/fondy-restrict-gateway/fondy/fondy.php: -------------------------------------------------------------------------------- 1 | supports[] = 'one-time'; 19 | $this->supports[] = 'recurring'; 20 | $this->supports[] = 'fees'; 21 | $this->supports[] = 'trial'; 22 | $this->api_endpoint = 'https://api.fondy.eu/api/checkout/url/'; 23 | 24 | if (!class_exists('Fondy_API')) { 25 | require_once RCP_FONDY_DIR . '/fondy/fondy.inc.php'; 26 | } 27 | } 28 | 29 | /** 30 | * Process registration 31 | * 32 | * @since 2.1 33 | */ 34 | public function process_signup() 35 | { 36 | global $rcp_options; 37 | global $rcp_fondy_options; 38 | global $rcp_payments_db; 39 | 40 | if ($this->auto_renew) { 41 | $amount = $this->initial_amount; 42 | } else { 43 | $amount = $this->initial_amount; 44 | } 45 | 46 | $member = new RCP_Member($this->user_id); 47 | 48 | if ($this->is_trial()) { 49 | $amount = 1; 50 | } 51 | /** 52 | * Cancel existing subscription if the member just upgraded to another one. 53 | */ 54 | if ($member->just_upgraded() && $member->can_cancel()) { 55 | $cancelled = $member->cancel_payment_profile(false); 56 | } 57 | 58 | if ($amount == 0) { 59 | if ($this->payment->fees != 0) { 60 | $amount = $this->payment->fees; 61 | } else { 62 | $error = '

' . __('Ошибка, для смены тарифа свяжитесь с администратором', 'fondy_rcp') . '

'; 63 | wp_die($error, __('Error', 'fondy_rcp'), array('response' => '401')); 64 | } 65 | } 66 | 67 | $return = add_query_arg(array('rcp-confirm' => 'fondy', 'membership_id' => $this->membership->get_id()), get_permalink($rcp_options['registration_page'])); 68 | if (isset($this->return_url)) { 69 | $return = $this->return_url; 70 | } 71 | 72 | $fondy_args = array( 73 | 'order_id' => $this->payment->id . '#' . $member->ID . '#' . time(), 74 | 'merchant_id' => $rcp_fondy_options['fondy_merchant_id'], 75 | 'order_desc' => $this->subscription_name, 76 | 'amount' => round($amount * 100), 77 | 'merchant_data' => json_encode(array( 78 | 'subtotal' => $this->amount, 79 | 'discount_amount' => $this->payment->discount_amount, 80 | 'subscription_key' => $this->payment->subscription_key, 81 | 'signup_fee' => $this->signup_fee 82 | )), 83 | 'currency' => $this->currency, 84 | 'server_callback_url' => add_query_arg('listener', 'fondy', home_url('index.php')), 85 | 'response_url' => $return, 86 | 'sender_email' => $member->user_email, 87 | 'verification' => $this->is_trial() ? 'y' : 'n' 88 | ); 89 | 90 | if ($rcp_fondy_options['fondy_reccuring'] == true and ($this->auto_renew || $this->is_trial())) { 91 | $fondy_args['recurring_data'] = array( 92 | 'start_time' => date('Y-m-d', strtotime($this->is_trial() ? $this->subscription_start_date : '+ ' . $this->subscription_data['length'] . ' ' . $this->subscription_data['length_unit'])), 93 | 'amount' => round($this->subscription_data['recurring_price'] * 100), 94 | 'every' => intval($this->subscription_data['length']), 95 | 'period' => $this->subscription_data['length_unit'], 96 | 'state' => 'y', 97 | 'readonly' => 'y' 98 | ); 99 | if ($this->subscription_data['length_unit'] == 'year') { 100 | $fondy_args['recurring_data']['start_time'] = date('Y-m-d', strtotime('+ ' . (intval($this->subscription_data['length']) * 12) . ' ' . 'month')); 101 | $fondy_args['recurring_data']['every'] = intval($this->subscription_data['length']) * 12; 102 | $fondy_args['recurring_data']['period'] = 'month'; 103 | } 104 | $fondy_args['subscription'] = 'Y'; 105 | $fondy_args['subscription_callback_url'] = add_query_arg('listener', 'fondy', home_url('index.php')); 106 | } else { 107 | $fondy_args['subscription'] = 'N'; 108 | } 109 | 110 | $fields = [ 111 | "version" => "2.0", 112 | "data" => base64_encode(json_encode(array('order' => $fondy_args))), 113 | "signature" => sha1($rcp_fondy_options['fondy_secret'] . '|' . base64_encode(json_encode(array('order' => $fondy_args)))) 114 | ]; 115 | 116 | $request = wp_remote_post($this->api_endpoint, array( 117 | 'headers' => array('Content-Type' => 'application/json'), 118 | 'timeout' => 45, 119 | 'method' => 'POST', 120 | 'sslverify' => true, 121 | 'httpversion' => '1.1', 122 | 'body' => json_encode(array('request' => $fields)) 123 | ) 124 | ); 125 | $body = wp_remote_retrieve_body($request); 126 | $code = wp_remote_retrieve_response_code($request); 127 | $message = wp_remote_retrieve_response_message($request); 128 | $out = json_decode($body, true); 129 | 130 | 131 | if (is_wp_error($request)) { 132 | 133 | $error = '

' . __('An unidentified error occurred.', 'fondy_rcp') . '

'; 134 | $error .= '

' . $request->get_error_message() . '

'; 135 | 136 | wp_die($error, __('Error', 'fondy_rcp'), array('response' => '401')); 137 | 138 | } elseif (200 == $code && 'OK' == $message) { 139 | 140 | if (is_string($out)) { 141 | wp_parse_str($out, $out); 142 | } 143 | if (isset($out['response']['error_message'])) { 144 | 145 | $error = '

' . __('Error message: ', 'fondy_rcp') . ' ' . $out['response']['error_message'] . '

'; 146 | $error .= '

' . __('Error code: ', 'fondy_rcp') . ' ' . $out['response']['error_message'] . '

'; 147 | 148 | wp_die($error, __('Error', 'fondy_rcp'), array('response' => '401')); 149 | 150 | } else { 151 | $url = json_decode(base64_decode($out['response']['data']), true)['order']['checkout_url']; 152 | wp_redirect($url); 153 | exit; 154 | 155 | } 156 | } 157 | } 158 | 159 | /** 160 | * Add credit card form 161 | * 162 | * @return string 163 | * @since 2.1 164 | */ 165 | public function fields() 166 | { 167 | $currency = get_option('rcp_settings')['currency'] ?? 'USD'; 168 | 169 | return ($_POST['level_has_trial']) === 'true' ? sprintf(__('Вы будете перенаправлены на страницу оплаты для привязки карты
При этом будет удержана сумма 1 %s с последующим возвращением', 'fondy_rcp'), $currency) : __('Вы будете перенаправлены на страницу оплаты', 'fondy_rcp'); 170 | } 171 | 172 | /** 173 | * Validate additional fields during registration submission 174 | * 175 | * @since 2.1 176 | */ 177 | public function validate_fields() 178 | { 179 | return true; 180 | } 181 | 182 | /** 183 | * Process webhooks 184 | * 185 | * @since 2.1 186 | */ 187 | public function process_webhooks() 188 | { 189 | if (!isset($_GET['listener']) || $_GET['listener'] != 'fondy') { 190 | return; 191 | } 192 | 193 | global $rcp_fondy_options; 194 | 195 | rcp_log('Starting to process Fondy webhook.'); 196 | 197 | if (empty($_POST)) { 198 | $callback = json_decode(file_get_contents("php://input")); 199 | 200 | if (empty($callback)) { 201 | die('go away!'); 202 | } 203 | 204 | $_POST = []; 205 | 206 | foreach ($callback as $key => $val) { 207 | $_POST[esc_sql($key)] = esc_sql($val); 208 | } 209 | } 210 | 211 | $posted = apply_filters('rcp_ipn_post', $_POST); 212 | $sign = $posted['signature']; 213 | 214 | if (isset($posted['data'])) { // new protocol 215 | $base64_data = $posted['data']; 216 | $posted = json_decode(base64_decode($posted['data']), true)['order']; 217 | } 218 | 219 | $fondySettings = array( 220 | 'mid' => $rcp_fondy_options['fondy_merchant_id'], 221 | 'secret_key' => $rcp_fondy_options['fondy_secret'] 222 | ); 223 | $paymentInfo = Fondy_API::isPaymentValid($fondySettings, $posted, $base64_data ?? '', $sign); 224 | 225 | if ($paymentInfo === true) { 226 | $exploded = explode('#', $posted['parent_order_id'] ?: $posted['order_id']); 227 | $user_id = $exploded[1]; 228 | 229 | if (empty($user_id) && !empty($posted['sender_email'])) { 230 | $user = get_user_by('email', $posted['sender_email']); 231 | $user_id = $user ? $user->ID : false; 232 | } 233 | 234 | $member = new RCP_Member($user_id); 235 | 236 | if (!$member || !$member->ID > 0) { 237 | rcp_log('Fondy - member ID not found.'); 238 | 239 | die('no member found'); 240 | } 241 | 242 | $subscription_id = $member->get_pending_subscription_id(); 243 | 244 | if (empty($subscription_id)) { 245 | $subscription_id = $member->get_subscription_id(); 246 | } 247 | if (!$subscription_id) { 248 | rcp_log('Fondy - no subscription ID for member.'); 249 | die('no subscription for member found'); 250 | } 251 | 252 | if (!$subscription_level = rcp_get_subscription_details($subscription_id)) { 253 | rcp_log('Fondy - no subscription level found.'); 254 | die('no subscription level found'); 255 | } 256 | $data = (json_decode(stripslashes($posted['merchant_data']), true)); 257 | $amount = $posted['amount'] / 100; 258 | if ($data['signup_fee']) { 259 | $fee = $data['signup_fee']; 260 | } else { 261 | $fee = 0; 262 | } 263 | if ($data['discount_amount']) { 264 | $discount = $data['discount_amount']; 265 | } else { 266 | $discount = 0; 267 | } 268 | if ($data['subtotal']) { 269 | $subtotal = $data['subtotal']; 270 | } else { 271 | $subtotal = 0; 272 | } 273 | 274 | $payment_data = array( 275 | 'date' => date('Y-m-d H:i:s', strtotime($posted['order_time'])), 276 | 'subscription' => $subscription_level->name, 277 | 'payment_type' => 'Fondy Credit Card', 278 | 'subscription_key' => $member->get_subscription_key(), 279 | 'amount' => $member->is_trialing() ? 0 : $amount, 280 | 'fees' => $amount, 281 | 'subtotal' => $subtotal, 282 | 'discount_amount' => $discount, 283 | 'user_id' => $user_id, 284 | 'gateway' => 'Fondy', 285 | 'transaction_id' => $posted['payment_id'] ?? '', 286 | 'status' => 'complete' 287 | ); 288 | $rcp_payments = new RCP_Payments(); 289 | 290 | rcp_log(sprintf('Processing Fondy. Payment status: %s', $posted['order_status'])); 291 | 292 | switch (strtolower($posted['order_status'])) : 293 | case 'approved': 294 | if ($member->just_upgraded() && $member->can_cancel()) { 295 | $cancelled = $member->cancel_payment_profile(false); 296 | 297 | if ($cancelled) { 298 | $member->set_payment_profile_id(''); 299 | } 300 | } 301 | 302 | if ($pending_id = $member->get_pending_payment_id()) { // has pending payment, just update 303 | $rcp_payments->update($pending_id, $payment_data); 304 | 305 | do_action('rcp_gateway_payment_processed', $member, $pending_id, $this); 306 | } elseif (isset($posted['parent_order_id']) && !$rcp_payments->payment_exists($payment_data['transaction_id'])) { // recurring and payment already exists 307 | $payment_data['transaction_type'] = 'renewal'; 308 | $payment_id = $rcp_payments->insert($payment_data); 309 | 310 | $member->renew(true); 311 | 312 | do_action('rcp_webhook_recurring_payment_processed', $member, $payment_id, $this); 313 | do_action('rcp_gateway_payment_processed', $member, $payment_id, $this); 314 | } 315 | 316 | break; 317 | case 'declined' : 318 | rcp_log('Processing Fondy declined webhook.'); 319 | $member->cancel(); 320 | die('payment declined'); 321 | case 'expired' : 322 | rcp_log('Processing Fondy expired webhook.'); 323 | 324 | $member->set_status('expired'); 325 | 326 | $member->set_expiration_date(date('Y-m-d H:i:s', strtotime($posted['order_time']))); 327 | 328 | $member->add_note(__('Subscription expired in Fondy', 'fondy_rcp')); 329 | 330 | die('member expired'); 331 | break; 332 | endswitch; 333 | 334 | } else { 335 | rcp_log('Error: ' . $paymentInfo); 336 | die; 337 | } 338 | die; 339 | } 340 | } -------------------------------------------------------------------------------- /Restrict_Content_Pro/fondy-restrict-gateway/index.php: -------------------------------------------------------------------------------- 1 | 'Fondy', 23 | 'admin_label' => 'Fondy', 24 | 'class' => 'RCP_Payment_Gateway_Fondy' 25 | ); 26 | return $gateways; 27 | } 28 | 29 | function pw_rcp_register_fondy_mainClass() 30 | { 31 | global $rcp_fondy_options; 32 | $rcp_fondy_options = get_option('rcp_fondy_settings'); 33 | require_once(RCP_FONDY_DIR . "/fondy/fondy.php"); 34 | require_once(RCP_FONDY_DIR . "/fondy/fondy-admin.php"); 35 | } 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /easy-digital-downloads-fondy/README.md: -------------------------------------------------------------------------------- 1 | # Fondy payment plugin for WP + Easy digital downloads 2 | ---- 3 | ## Installation 4 | Navigate to your WordPress "Plugins" page: 5 | 1. Unzip plugin to your plugin directory ```(wp-content/plugins/)``` 6 | 2. Login to your WordPress dashboard. 7 | 3. Navigate to **Plugins** and activate **"EDD Fondy Payment"** plugin. 8 | 4. Copy and paste your merchant id and secret key to **Downloads > Settings > Gateways**. 9 | 10 | 11 | ![Settings][1] 12 | ---- 13 | 14 | [1]: https://raw.githubusercontent.com/cloudipsp/wordpress/master/easy-digital-downloads-fondy/settings1.png -------------------------------------------------------------------------------- /easy-digital-downloads-fondy/assets/images/fondy_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/easy-digital-downloads-fondy/assets/images/fondy_logo.png -------------------------------------------------------------------------------- /easy-digital-downloads-fondy/languages/edd_fondy-ru_RU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/easy-digital-downloads-fondy/languages/edd_fondy-ru_RU.mo -------------------------------------------------------------------------------- /easy-digital-downloads-fondy/languages/edd_fondy-ru_RU.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: EDD Fondy Payment\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2018-03-12 12:46+0000\n" 6 | "PO-Revision-Date: 2018-03-12 12:58+0000\n" 7 | "Last-Translator: dm \n" 8 | "Language-Team: Russian\n" 9 | "Language: ru_RU\n" 10 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && " 11 | "n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2);\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "X-Generator: Loco https://localise.biz/" 16 | 17 | #: edd-fondy-payment.php:185 18 | msgid "Choose language, leave empty if you want for brower language." 19 | msgstr "Выберите язык, оставте пустым для выбора языка по браузеру." 20 | 21 | #: edd-fondy-payment.php:165 22 | msgid "Configure the gateway settings" 23 | msgstr "Настройки платежного шлюза Fondy" 24 | 25 | #. Author of the plugin 26 | msgid "Dmitriy Miroshnikov" 27 | msgstr "" 28 | 29 | #. Name of the plugin 30 | msgid "EDD Fondy Payment" 31 | msgstr "EDD Fondy Payment" 32 | 33 | #: edd-fondy-payment.php:171 34 | msgid "" 35 | "Enter your Merchant ID, you can find it here." 37 | msgstr "" 38 | "Введите Идентификатор мерчанта, получить можно в личном кабинете." 40 | 41 | #: edd-fondy-payment.php:178 42 | msgid "" 43 | "Enter your Secret Key, you can find it here." 45 | msgstr "" 46 | "Введите ключ платежа, получить можно в личном кабинете." 48 | 49 | #: edd-fondy-payment.php:147 50 | msgid "Fondy" 51 | msgstr "Fondy" 52 | 53 | #: edd-fondy-payment.php:164 54 | msgid "Fondy Payment Gateway Settings" 55 | msgstr "Настройки платежного шлюза Fondy" 56 | 57 | #. Description of the plugin 58 | msgid "Fondy Payment integration for EDD plugin" 59 | msgstr "Интеграция Fondy с плагином EDD" 60 | 61 | #: edd-fondy-payment.php:147 62 | msgid "Fondy Payments" 63 | msgstr "Fondy" 64 | 65 | #: edd-fondy-payment.php:184 66 | msgid "Language" 67 | msgstr "Язык" 68 | 69 | #: edd-fondy-payment.php:170 70 | msgid "Merchant ID" 71 | msgstr "Идентификатор мерчанта" 72 | 73 | #: edd-fondy-payment.php:235 74 | #, php-format 75 | msgid "Order №: %s" 76 | msgstr "Заказ №: %s" 77 | 78 | #: edd-fondy-payment.php:227 79 | #, php-format 80 | msgid "Payment creation failed. Payment data: %s" 81 | msgstr "Создание платежа завершилось провалом. Данные: %s" 82 | 83 | #: edd-fondy-payment.php:227 edd-fondy-payment.php:261 84 | msgid "Payment Error" 85 | msgstr "Ошибка оплаты" 86 | 87 | #: edd-fondy-payment.php:261 88 | #, php-format 89 | msgid "Payment failed. Payment data: %s" 90 | msgstr "Оплата завершилось провалом. Данные: %s" 91 | 92 | #: edd-fondy-payment.php:443 93 | msgid "" 94 | "Please upgrade WordPress to the latest version to allow WordPress and this " 95 | "plugin to work properly." 96 | msgstr "" 97 | 98 | #: edd-fondy-payment.php:177 99 | msgid "Secret Key" 100 | msgstr "Ключ платежа:" 101 | -------------------------------------------------------------------------------- /easy-digital-downloads-fondy/languages/edd_fondy.pot: -------------------------------------------------------------------------------- 1 | #, fuzzy 2 | msgid "" 3 | msgstr "" 4 | "Project-Id-Version: EDD Fondy Payment\n" 5 | "Report-Msgid-Bugs-To: \n" 6 | "POT-Creation-Date: 2018-03-12 12:46+0000\n" 7 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 8 | "Last-Translator: FULL NAME \n" 9 | "Language-Team: \n" 10 | "Language: \n" 11 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "X-Generator: Loco https://localise.biz/" 16 | 17 | #: edd-fondy-payment.php:185 18 | msgid "Choose language, leave empty if you want for brower language." 19 | msgstr "" 20 | 21 | #: edd-fondy-payment.php:165 22 | msgid "Configure the gateway settings" 23 | msgstr "" 24 | 25 | #. Author of the plugin 26 | msgid "Dmitriy Miroshnikov" 27 | msgstr "" 28 | 29 | #. Name of the plugin 30 | msgid "EDD Fondy Payment" 31 | msgstr "" 32 | 33 | #: edd-fondy-payment.php:171 34 | msgid "" 35 | "Enter your Merchant ID, you can find it here." 37 | msgstr "" 38 | 39 | #: edd-fondy-payment.php:178 40 | msgid "" 41 | "Enter your Secret Key, you can find it here." 43 | msgstr "" 44 | 45 | #: edd-fondy-payment.php:147 46 | msgid "Fondy" 47 | msgstr "" 48 | 49 | #: edd-fondy-payment.php:164 50 | msgid "Fondy Payment Gateway Settings" 51 | msgstr "" 52 | 53 | #. Description of the plugin 54 | msgid "Fondy Payment integration for EDD plugin" 55 | msgstr "" 56 | 57 | #: edd-fondy-payment.php:147 58 | msgid "Fondy Payments" 59 | msgstr "" 60 | 61 | #: edd-fondy-payment.php:184 62 | msgid "Language" 63 | msgstr "" 64 | 65 | #: edd-fondy-payment.php:170 66 | msgid "Merchant ID" 67 | msgstr "" 68 | 69 | #: edd-fondy-payment.php:235 70 | #, php-format 71 | msgid "Order №: %s" 72 | msgstr "" 73 | 74 | #: edd-fondy-payment.php:227 75 | #, php-format 76 | msgid "Payment creation failed. Payment data: %s" 77 | msgstr "" 78 | 79 | #: edd-fondy-payment.php:227 edd-fondy-payment.php:261 80 | msgid "Payment Error" 81 | msgstr "" 82 | 83 | #: edd-fondy-payment.php:261 84 | #, php-format 85 | msgid "Payment failed. Payment data: %s" 86 | msgstr "" 87 | 88 | #: edd-fondy-payment.php:443 89 | msgid "" 90 | "Please upgrade WordPress to the latest version to allow WordPress and this " 91 | "plugin to work properly." 92 | msgstr "" 93 | 94 | #: edd-fondy-payment.php:177 95 | msgid "Secret Key" 96 | msgstr "" 97 | -------------------------------------------------------------------------------- /easy-digital-downloads-fondy/settings1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/easy-digital-downloads-fondy/settings1.png -------------------------------------------------------------------------------- /fondy-gravityforms-payment/README.md: -------------------------------------------------------------------------------- 1 | Wordpress + gravityforms 2 | --------- 3 | 4 | # EN 5 | 6 | ## Installation 7 | 8 | 1. Ensure you have latest version gravityforms plugin installed. 9 | 2. Upload the plug-in folder to the `/wp-content/plugins/` 10 | 3. Activate the plug-in through the 'Plugins' menu. 11 | 12 | ## Configuration 13 | 14 | 1. Go to Forms -> Settings -> Fondy and create Feed. 15 | 2. Fill out the fields `Merchant Key` and `Merchant secret`. 16 | 3. Fill `Return URL` or leave empty to use default where users will be returned after payment. 17 | 4. Save settings. 18 | 19 | --------- 20 | 21 | 22 | ![Скриншот][1] 23 | ---- 24 | 25 | [1]: https://raw.githubusercontent.com/cloudipsp/wordpress/master/fondy-gravityforms-payment/settings1.png -------------------------------------------------------------------------------- /fondy-gravityforms-payment/fondy.php: -------------------------------------------------------------------------------- 1 | \n" 9 | "Language-Team: \n" 10 | "Language: \n" 11 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "X-Generator: Loco https://localise.biz/" 16 | 17 | #: class-gf-fondy.php:1319 18 | msgid "" 19 | "A reversal has occurred on this transaction because you have given the " 20 | "customer a refund." 21 | msgstr "" 22 | 23 | #: class-gf-fondy.php:1317 24 | msgid "" 25 | "A reversal has occurred on this transaction due to your customer triggering " 26 | "a money-back guarantee." 27 | msgstr "" 28 | 29 | #: class-gf-fondy.php:197 30 | msgid "Change post status when subscription is canceled." 31 | msgstr "" 32 | 33 | #: class-gf-fondy.php:79 34 | msgid "Confirm that you have configured your Fondy account in Merchant portal." 35 | msgstr "" 36 | 37 | #: class-gf-fondy.php:191 38 | msgid "Create post only when payment is received." 39 | msgstr "" 40 | 41 | #: class-gf-fondy.php:65 42 | #, php-format 43 | msgid "Create you free %sFondy account.%s" 44 | msgstr "" 45 | 46 | #: class-gf-fondy.php:259 47 | msgid "day(s)" 48 | msgstr "" 49 | 50 | #: class-gf-fondy.php:415 51 | msgid "Delete Post" 52 | msgstr "" 53 | 54 | #. Author of the plugin 55 | msgid "DM" 56 | msgstr "" 57 | 58 | #: class-gf-fondy.php:155 59 | msgid "Donations" 60 | msgstr "" 61 | 62 | #: class-gf-fondy.php:189 63 | msgid "" 64 | "Enable this option if you would like to only create the post after payment " 65 | "has been received." 66 | msgstr "" 67 | 68 | #: class-gf-fondy.php:178 69 | msgid "" 70 | "Enable this option if you would like to only send out this form's " 71 | "notifications for the 'Form is submitted' event after payment has been " 72 | "received. Leaving this option disabled will send these notifications " 73 | "immediately after the form is submitted. Notifications which are configured " 74 | "for other events will not be affected by this option." 75 | msgstr "" 76 | 77 | #: class-gf-fondy.php:169 78 | msgid "Enter the URL the user should be retuned if not set use defaults." 79 | msgstr "" 80 | 81 | #: class-gf-fondy.php:237 82 | msgid "First Name" 83 | msgstr "" 84 | 85 | #: class-gf-fondy.php:1426 86 | msgid "Fondy Add-On v1.0" 87 | msgstr "" 88 | 89 | #: class-gf-fondy.php:1433 90 | msgid "" 91 | "Fondy Feeds are now accessed via the Fondy sub-menu within the Form Settings " 92 | "for the Form you would like to integrate Fondy with." 93 | msgstr "" 94 | 95 | #: class-gf-fondy.php:270 96 | msgid "Fondy Field" 97 | msgstr "" 98 | 99 | #: class-gf-fondy.php:110 100 | msgid "Fondy Merchant ID" 101 | msgstr "" 102 | 103 | #. Name of the plugin 104 | msgid "Fondy Payment Gravity Forms Add-on" 105 | msgstr "" 106 | 107 | #: class-gf-fondy.php:118 108 | msgid "Fondy secret key " 109 | msgstr "" 110 | 111 | #: class-gf-fondy.php:122 112 | msgid "Fondy secret key from portal" 113 | msgstr "" 114 | 115 | #: class-gf-fondy.php:77 116 | msgid "Fondy setting" 117 | msgstr "" 118 | 119 | #: class-gf-fondy.php:66 120 | #, php-format 121 | msgid "Go to settings end enter Callback URL: %s" 122 | msgstr "" 123 | 124 | #: class-gf-fondy.php:62 125 | msgid "" 126 | "Gravity Forms requires to be create and enabled your Fondy account. Follow " 127 | "the following steps to confirm it is enabled." 128 | msgstr "" 129 | 130 | #. Author URI of the plugin 131 | msgid "https://fondy.eu" 132 | msgstr "" 133 | 134 | #. URI of the plugin 135 | msgid "https://www.gravityforms.com" 136 | msgstr "" 137 | 138 | #: class-gf-fondy.php:1444 139 | msgid "I understand, dismiss this message!" 140 | msgstr "" 141 | 142 | #. Description of the plugin 143 | msgid "Integrates Gravity Forms with Fondy." 144 | msgstr "" 145 | 146 | #: class-gf-fondy.php:234 147 | msgid "Last Name" 148 | msgstr "" 149 | 150 | #: class-gf-fondy.php:414 151 | msgid "Mark Post as Draft" 152 | msgstr "" 153 | 154 | #: class-gf-fondy.php:114 155 | msgid "Merchant ID from portal" 156 | msgstr "" 157 | 158 | #: class-gf-fondy.php:126 class-gf-fondy.php:136 159 | msgid "Mode" 160 | msgstr "" 161 | 162 | #: class-gf-fondy.php:261 163 | msgid "month(s)" 164 | msgstr "" 165 | 166 | #: class-gf-fondy.php:176 class-gf-fondy.php:178 167 | msgid "Notifications" 168 | msgstr "" 169 | 170 | #: class-gf-fondy.php:1315 171 | msgid "" 172 | "Order completed successfully, funds are hold on the payer’s account and soon " 173 | "will be credited of the merchant; merchant can provide the service or ship " 174 | "goods." 175 | msgstr "" 176 | 177 | #: class-gf-fondy.php:1309 178 | msgid "" 179 | "Order has been created, but the customer has not entered payment details yet;" 180 | " merchant must continue to request the status of the order" 181 | msgstr "" 182 | 183 | #: class-gf-fondy.php:1313 184 | msgid "" 185 | "Order is declined by FONDY payment gateway or by bank or by external payment " 186 | "system" 187 | msgstr "" 188 | 189 | #: class-gf-fondy.php:1311 190 | msgid "" 191 | "Order is still in processing by payment gateway; merchant must continue to " 192 | "request the status of the order" 193 | msgstr "" 194 | 195 | #: class-gf-fondy.php:1193 196 | #, php-format 197 | msgid "" 198 | "Payment amount (%s) does not match product price. Entry will not be marked " 199 | "as Approved. Transaction ID: %s" 200 | msgstr "" 201 | 202 | #: class-gf-fondy.php:1376 203 | msgid "Payment Completed" 204 | msgstr "" 205 | 206 | #: class-gf-fondy.php:1150 207 | #, php-format 208 | msgid "Payment created. Amount: %s. Transaction ID: %s. Reason: %s" 209 | msgstr "" 210 | 211 | #: class-gf-fondy.php:1378 212 | msgid "Payment Failed" 213 | msgstr "" 214 | 215 | #: class-gf-fondy.php:1177 216 | #, php-format 217 | msgid "Payment has been declined. Transaction ID: %s. Reason: %s" 218 | msgstr "" 219 | 220 | #: class-gf-fondy.php:1232 221 | #, php-format 222 | msgid "Payment has been expired. Transaction ID: %s. Reason: %s" 223 | msgstr "" 224 | 225 | #: class-gf-fondy.php:1216 226 | #, php-format 227 | msgid "Payment has been reversed. Transaction ID: %s. Reason: %s" 228 | msgstr "" 229 | 230 | #: class-gf-fondy.php:1576 231 | #, php-format 232 | msgid "" 233 | "Payment information was manually updated. Status: %s. Amount: %s. " 234 | "Transaction ID: %s. Date: %s" 235 | msgstr "" 236 | 237 | #: class-gf-fondy.php:1161 238 | #, php-format 239 | msgid "Payment is pending. Amount: %s. Transaction ID: %s. Reason: %s" 240 | msgstr "" 241 | 242 | #: class-gf-fondy.php:1379 243 | msgid "Payment Pending" 244 | msgstr "" 245 | 246 | #: class-gf-fondy.php:1377 247 | msgid "Payment Refunded" 248 | msgstr "" 249 | 250 | #: class-gf-fondy.php:1446 251 | msgid "Please wait..." 252 | msgstr "" 253 | 254 | #: class-gf-fondy.php:187 class-gf-fondy.php:189 255 | msgid "Posts" 256 | msgstr "" 257 | 258 | #: class-gf-fondy.php:129 259 | msgid "Production" 260 | msgstr "" 261 | 262 | #: class-gf-fondy.php:1321 263 | msgid "" 264 | "Reason has not been specified. For more information, contact Fondy Customer " 265 | "Service." 266 | msgstr "" 267 | 268 | #: class-gf-fondy.php:165 class-gf-fondy.php:169 269 | msgid "Return URL" 270 | msgstr "" 271 | 272 | #: class-gf-fondy.php:136 273 | msgid "" 274 | "Select Production to receive live payments. Select Test for testing purposes " 275 | "when using the Fondy development sandbox." 276 | msgstr "" 277 | 278 | #: class-gf-fondy.php:327 279 | msgid "" 280 | "Send notifications for the 'Form is submitted' event only when payment is " 281 | "received." 282 | msgstr "" 283 | 284 | #: class-gf-fondy.php:84 285 | msgid "Settings have been updated." 286 | msgstr "" 287 | 288 | #: class-gf-fondy.php:1381 289 | msgid "Subscription Canceled" 290 | msgstr "" 291 | 292 | #: class-gf-fondy.php:1380 293 | msgid "Subscription Created" 294 | msgstr "" 295 | 296 | #: class-gf-fondy.php:1382 297 | msgid "Subscription Expired" 298 | msgstr "" 299 | 300 | #: class-gf-fondy.php:1383 301 | msgid "Subscription Payment Added" 302 | msgstr "" 303 | 304 | #: class-gf-fondy.php:1384 305 | msgid "Subscription Payment Failed" 306 | msgstr "" 307 | 308 | #: class-gf-fondy.php:130 309 | msgid "Test" 310 | msgstr "" 311 | 312 | #: class-gf-fondy.php:1428 313 | msgid "Thank you! Fondy simple integration." 314 | msgstr "" 315 | 316 | #: class-gf-fondy.php:96 317 | #, php-format 318 | msgid "To get started, please configure your %sFondy Settings%s!" 319 | msgstr "" 320 | 321 | #: class-gf-fondy.php:260 322 | msgid "week(s)" 323 | msgstr "" 324 | 325 | #: class-gf-fondy.php:262 326 | msgid "year(s)" 327 | msgstr "" 328 | -------------------------------------------------------------------------------- /fondy-gravityforms-payment/settings1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/fondy-gravityforms-payment/settings1.png -------------------------------------------------------------------------------- /woocommerce/README.md: -------------------------------------------------------------------------------- 1 | WooCommerce Fondy Plugin 2 | ========= 3 | 4 | #EN 5 | 6 | == Installation == 7 | 8 | 1. Ensure you have latest version of WooCommerce plugin installed (WooCommerce 3.0+) 9 | 2. Upload the plugin files to the `/wp-content/plugins/`(or upload the plugin zip file using wp-admin.) 10 | 3. Activate the plugin through the 'Plugins' menu. 11 | 12 | == Configuration == 13 | 14 | 1. Go to Woocommerce -> Settings -> Payment. 15 | 2. Go to tab "Fondy". If it doesn't exist - activate the plugin. 16 | 3. Allow this payment method (Enable). Name it "Online Payments". 17 | 4. Fill out the fields `Merchant ID` and `Secret Key`. You can get them on the [Fondy](https://fondy.io "official site Fondy") website. 18 | 5. Customize other plugin settings if it`s necessary. 19 | 6. Save settings. 20 | 21 | --------- 22 | 23 | #RU 24 | 25 | == Установка == 26 | 27 | 1. Убедитесь что у вас установлена последняя версия плагина WooCommerce (WooCommerce 3.0+) 28 | 2. Распакуйте этот плагин в директорию `/wp-content/plugins/`(либо установите вложенный архив через панель администратора) 29 | 3. Активируйте плагин в меню "Плагины" 30 | 31 | 32 | == Конфигурация == 33 | 34 | 1. Зайдите в "WooCommerce > Настройки > Оплата" 35 | 2. Зайдите на таб "Fondy". Если его нет - активируйте плагин. 36 | 3. Включите этот способ оплаты (Enable). Назовите его "Online Payments". 37 | 4. Заполните поля `Merchant ID` и `Secret Key` данными полученными от fondy.io. 38 | 5. При необходимости настройте другие параметры плагина. 39 | 6. Сохраните настройки. 40 | 41 | 42 | ![Скриншот][1] 43 | ---- 44 | 45 | [1]: https://raw.githubusercontent.com/cloudipsp/wordpress/master/woocommerce/settings1.png 46 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/README.txt: -------------------------------------------------------------------------------- 1 | === Fondy — WooCommerce Payment Gateway === 2 | Contributors: fondyeu 3 | Tags: payments, payment gateway, woocommerce, online payment, merchant, credit card, fondy, apple pay, payment request, google pay 4 | Requires at least: 3.5 5 | Tested up to: 6.0.1 6 | Requires PHP: 5.6 7 | Stable tag: 3.0.3 8 | License: GPLv2 or later 9 | License URI: http://www.gnu.org/licenses/gpl-2.0.html 10 | 11 | == Description == 12 | The plugin for WooCommerce allows you to integrate the online payment form on the Checkout page of your online store. 13 | 14 | Fondy’s [WooCommerce Payment Gateway plugin](https://fondy.io/gb/plugins/woocommerce/) for online stores, based on CMS Wordpress provides businesses with a single platform for quick and secure accepting payments on the site, and its customers with convenient ways to pay for goods and services of their interest. After connecting the system, your customers will be able to pay for purchases using bank cards, online banking, mobile payments. 15 | 16 | The ability to pay in a convenient way increases customer loyalty, increases the frequency of purchases and helps entrepreneurs earn more. The Fondy platform has already been connected to more than 8000 entrepreneurs around the world — from small start-ups and niche stores to international companies with millions of turnover. 17 | 18 | We already work in [33 countries](https://docs.fondy.eu/docs/page/supported-countries/), accept payments from any country, and support more than [100 currencies](https://docs.fondy.eu/docs/page/27/), cooperate with banks of the European Union, UK, Eastern Europe, Ukraine and constantly expand our presence around the world. 19 | 20 | 21 | == Reasons to choose Fondy == 22 | * We accept payments in all the countries in 100 currencies 23 | * A wide range of payment methods: credit cards, local means of payment, Internet banks 24 | * Support for recurring payments — regular debit from the client card for subscription services 25 | * Holding system — freezing money on the client’s card for up to 25 days with the possibility of debit or refund in 1 click 26 | * Tokenization — automatic filling in the details of the client card upon re-entry 27 | * Roles system — the ability to create users with different access rights to the personal account 28 | * Maximum security level: three levels of anti-fraud protection, SSL/TLS encryption, 3D Secure technology 29 | * [Detailed analytics](https://fondy.io/en/products/personal-cabinet/) on payments and invoices, the formation of customized reports in the user's personal account 30 | 31 | 32 | == Supported payment methods == 33 | 34 | = Bank cards = 35 | * Visa, MasterCard, Maestro, American Express, Discover, JCB ([full list](https://docs.fondy.eu/docs/page/payment_methods/)) 36 | 37 | = Alternative payment methods = 38 | * Trustpay, Alipay, WeChat Pay, Safetypay, iDEAL, SEPA, Skrill ([full list](https://docs.fondy.eu/docs/page/payment_methods/)) 39 | 40 | = Internet banking = 41 | * Banks in 26 countries ([full list](https://docs.fondy.eu/docs/page/supported-countries/)) 42 | 43 | 44 | == Platform features and benefits == 45 | 46 | = Easy to get started = 47 | Fast and friendly onboarding is one of the key advantages of Fondy. You just need to register in the personal account of the platform, enter payment information, sign an electronic agreement and undergo an express audit of the site by our specialists. 48 | 49 | The procedure takes from 1 hour to 2 days. After that you can accept payments from the customers, create online invoices in your account and engage in business development. 50 | 51 | = Payment security = 52 | To ensure a high level of security and availability of the platform we placed it in a cloud service that meets the top ten security standards, has protection against DDoS attacks and ensures that there is no physical access by unauthorized persons and organizations to the data and equipment. 53 | 54 | Every year we pass PCI DSS certification. We also developed and constantly update our own anti-fraud system consisting of three levels: barrier, analytical, post-operator. This means that the fraudsters have no chance. 55 | 56 | = Customer care = 57 | When they first pay, the clients enter the card data and selects their favourite method of payment, the platform will save them in encrypted form. All the following payments will be made for your customers in 1 click, without having to enter any data and fill in the fields. Such care removes unnecessary barriers to purchase, the customers do not have to look for a card or recall the CVV code. 58 | 59 | For those who regularly buy goods or purchase subscription services in Fondy, you can set up periodic debiting of money from the card (account) once a week/month/year using the payment calendar. The client will not have to bother with repeated payments, and you will always receive money on time. 60 | 61 | = Flexible payment options = 62 | It so happens that the client paid the order and the goods were not in stock. The seller gets into an awkward situation. For such cases Fondy offers a holding mechanism — freezing money in a client’s account for a while. If there is no product, you can return the money back to the client in 1 click. 63 | 64 | There are many cases when you need to check the client’s solvency or freeze a certain amount on his account. Often holding is used by car rental services, hotels, delivery services, taxi services. 65 | 66 | = Mobile payments = 67 | Fondy is fully optimized for use on smartphones, tablets, laptops, desktops, TVs. Your customers will be comfortable to make purchases from any device. 68 | 69 | We also took care of the sellers, they can access the personal account via the web interface or a convenient mobile application for [Android](https://play.google.com/store/apps/details?id=com.cloudipsp.fondyportal&hl=en) and [iOS](https://itunes.apple.com/ua/app/fondy-merchant-portal/id1273277350?l=en). From the application you can view the statistics, generate invoices, work with payments. 70 | 71 | = Smart analytics = 72 | We help the sellers get to better know their customers. The built-in analytics system allows real-time tracking of the status of all the payments, to see at what stage of the purchase each customer is. 73 | 74 | The system also provides analytics on customers, showing in which ways payment is most often made, from which devices, countries and in what currency. The received data can be viewed in your Fondy account or converted into reports and saved to a computer. 75 | 76 | 77 | == Screenshots == 78 | 1. Plugin settings 79 | 2. Plugin settings 80 | 3. Plugin switching-on 81 | 4. Order status 82 | 5. Payment window in your account on the site 83 | 6. Payment page as part of the site design 84 | 7. Separate payment page on the side of Fondy 85 | 8. Failed payment 86 | 9. Successful payment 87 | 88 | 89 | == Tariffs == 90 | Only commission with payment. It is possible to adjust payment of the commission on itself, or to impose on the client. 91 | 92 | [See current tariffs on the Fondy website](https://fondy.io/gb/pricing/) 93 | 94 | 95 | == FAQ == 96 | Some answers you can find here [FAQ](https://fondy.io/en/faq/) 97 | 98 | 99 | == Installation instructions for the plugin == 100 | 101 | = 1. Module installation = 102 | 103 | There are two ways to install the plugin: 104 | 105 | 1. Download Fondy payment acceptance plugin for WooCommerce from the WordPress add-ons directory. Unpack this plugin into the /wp-content/plugins/ directory. After that activate it in the “Plugins” menu. 106 | 2. Use the installation on the link replacing “site.com” with the address of your site: [site.com/wp-admin/plugin-install.php?tab=plugin-information&plugin=fondy-woocommerce-payment-gateway](http://site.com/wp-admin/plugin-install.php?tab=plugin-information&plugin=fondy-woocommerce-payment-gateway) 107 | 108 | 109 | = 2. Module activation = 110 | 111 | Go to the Wordpress control panel, find the Fondy payment module in the “Plugins” menu. Click on the “Activate”. 112 | 113 | = 3. Settings = 114 | 115 | To set up the payment acceptance plugin, do the following: 116 | 117 | 1. Go to “WooCommerce” > Settings > Payments. 118 | 2. Go to the management of “Fondy” → Management. Let the plugin use this payment method: click “Enable”. 119 | 3. Enter the data you received from Fondy company. (can be found in your merchant's technical settings) You need to fill in two fields — Merchant ID and Merchant secretkey. 120 | 4. Choose how the payment will be displayed: 121 | a. Payment page within the site design 122 | b. Payment page in the personal account on the site 123 | c. Separate payment page on the side of Fondy 124 | 5. Select the Answer page — the page to which the user will be redirected after making the payment, the so-called “Thank you page”. 125 | 6. Set what order status should be returned after successful/unsuccessful payment. 126 | 7. Save the settings. 127 | 128 | Done, now you can accept payments from the customers! 129 | 130 | 131 | == Changelog == 132 | = 1.0.0 = 133 | * First release 134 | = 1.0.1 = 135 | add default success page 136 | = 2.0 = 137 | change to host-to-host 138 | = 2.2 = 139 | stability update 140 | = 2.2.3 = 141 | change payment complete status 142 | = 2.3.0 = 143 | some fix, duplicate update 144 | = 2.4.0 = 145 | Added v2 js Api 146 | = 2.4.1 = 147 | Added js Mask CCard 148 | = 2.4.2 = 149 | some fix php tags 150 | = 2.4.3 = 151 | Added Refund function 152 | = 2.4.4 = 153 | Fixed checkout card 154 | = 2.4.5 = 155 | Fix for php 5.3 < 156 | = 2.5.2 = 157 | Added instant redirect 158 | = 2.5.3 = 159 | Styles moved to merchant portal 160 | = 2.5.6 = 161 | Added order statuses to settings page 162 | = 2.5.8 = 163 | New logo and testing mode 164 | = 2.6.3 = 165 | Fixed default options 166 | = 2.6.5 = 167 | Added pre-orders 168 | = 2.6.7 = 169 | Added subscription 170 | = 2.6.8 = 171 | Refund fix 172 | = 2.6.9 = 173 | Added some API request error handler 174 | = 3.0.0 = 175 | Add Bank and Local payment methods 176 | Add support checkout 2.0 177 | Add some hooks and filters 178 | Add MP transaction link 179 | Add send reservation data (anti-fraud, ОФД, etc.) 180 | Add better order status matching 181 | Remove old unused settings 182 | Fix callback url 183 | Fix PHP 8 compatibility 184 | = 3.0.1 = 185 | Fix relative server_callback_url 186 | = 3.0.2 = 187 | Add send email renewal order payment info 188 | Add more informative WP remote_post errors 189 | = 3.0.3 = 190 | Fixed handle POST form callback 191 | 192 | == Upgrade Notice == 193 | 194 | = 1.0.0 = 195 | Add pop-up mode 196 | = 1.0.1 = 197 | add default success page 198 | = 2.0 = 199 | change to host-to-host 200 | = 2.2 = 201 | stability update 202 | = 2.2.2 = 203 | add expired callback 204 | = 2.2.3 = 205 | change payment complete status 206 | = 2.3.0 = 207 | some fix, duplicate update 208 | = 2.4.0 = 209 | Added v2 js Api 210 | = 2.4.1 = 211 | Added js Mask CCard 212 | = 2.4.2 = 213 | some fix php tags 214 | = 2.4.3 = 215 | Added Refund function 216 | = 2.4.4 = 217 | Fixed checkout card 218 | = 2.4.6 = 219 | Order notify update 220 | = 2.4.7 = 221 | Unification css containers 222 | = 2.4.8 = 223 | Stability update 224 | = 2.4.9 = 225 | Added multi currencies support(WMPL) 226 | = 2.5.0 = 227 | Added token caching 228 | = 2.5.2 = 229 | Added instant redirect 230 | = 2.5.3 = 231 | Styles moved to merchant portal 232 | = 3.0.0 = 233 | Up WooCommerce required minimum version to 3.0. 234 | Add support checkout 2.0. -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/css/fondy_embedded.css: -------------------------------------------------------------------------------- 1 | #fondy-checkout-container button::after{ 2 | display: block !important; 3 | } 4 | /*todo forget for what this part*/ 5 | #payment .payment_methods li .payment_box.payment_method_fondy_card{ 6 | padding: 1.41575em !important; 7 | } 8 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/css/fondy_seamless.css: -------------------------------------------------------------------------------- 1 | #payment .payment_methods li .payment_box.payment_method_fondy_card{ 2 | padding: 0; 3 | } 4 | 5 | #payment .payment_methods li .payment_box.payment_method_fondy_wallet{ 6 | padding: 1rem 0; 7 | } 8 | 9 | html #f.f-embed .f-wrapper{ 10 | min-height: 0; 11 | } 12 | 13 | #checkout-card-container .f-payment-method-card-inner .f-info { 14 | display: none; 15 | } 16 | 17 | #checkout-card-container .f-payment-method-card-inner .f-icons{ 18 | margin-top: 1rem; 19 | } -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/css/fondy_seamless_old.css: -------------------------------------------------------------------------------- 1 | #checkout_wrapper{min-height:800px;text-align:left;position:relative;background:#fff;padding-left:15px;padding-right:15px;padding-bottom:30px;margin:9px auto}#checkout_fondy_form input{line-height:36px}#checkout_fondy_form input::-webkit-input-placeholder{opacity:.4;color:#000;font-size:.75rem;transform:translate3d(0,-1px,0)}#checkout_fondy_form input:-moz-placeholder{opacity:.4;color:#000;font-size:.75rem;transform:translate3d(0,-1px,0)}#checkout_fondy_form input::-moz-placeholder{opacity:.4;color:#000;font-size:.75rem;transform:translate3d(0,-1px,0)}#checkout_fondy_form input:-ms-input-placeholder{opacity:.4;color:#000;font-size:.75rem;transform:translate3d(0,-1px,0)}#checkout_fondy_form input::-ms-input-placeholder{opacity:.4;color:#000;font-size:.75rem;transform:translate3d(0,-1px,0)}#checkout_fondy_form input::placeholder{opacity:.4;color:#000;font-size:.75rem;transform:translate3d(0,-1px,0)}#checkout_fondy_form .f-container{width:100%}#checkout_fondy_form{max-width:350px;margin:0 auto 0 0}#checkout_fondy_form .error-wrapper{padding:.15rem .15rem 1rem;display:none;color:red;font-size:1rem}#checkout_fondy_form .error-wrapper.show{display:block}#checkout_fondy_form button.button{cursor:pointer}#checkout_fondy_form button.button,#checkout_fondy_form input.input{min-height:36px;padding:0;border:1px solid #ccc;border-radius:5px;display:block;width:100%;box-sizing:border-box;outline:0;text-align:center}#checkout_fondy_form button.button:focus,#checkout_fondy_form input.input:focus{box-shadow:inset 0 0 1px 1px #d3d3d3;border-color:gray;position:relative;z-index:2}#checkout_fondy_form .input-wrapper{margin:0 0 .85rem}#checkout_fondy_form .input-wrapper:last-child{margin-bottom:0}#checkout_fondy_form .input-label{font-size:.85rem;color:gray}#checkout_fondy_form .input-field,#checkout_fondy_form .input-label{box-sizing:border-box;padding:.15rem;float:left}#checkout_fondy_form .input-wrapper:after{clear:both;content:'';display:block}#checkout_fondy_form .w-1{display:inline-block;width:100%;position:relative}#checkout_fondy_form .w-2{display:inline-block;width:50%}#checkout_fondy_form .w-3{display:inline-block;width:33.33333%}#checkout_fondy_form .w-3-2{display:inline-block;width:66.66666%}#checkout_fondy_form .w-4{display:inline-block;width:25%}#checkout_fondy_form .w-rigth{float:right!important}#checkout_fondy_form #f_card_sep{width:30px;height:25px;border-radius:5px;background:#ccc;position:absolute;right:5px;top:23%}@media (max-width:1024px) and (min-width:767px){#checkout_fondy_form #f_card_sep{display:none}}#checkout_fondy_form #f_card_sep.mastercard{background:url(../img/mc-logo.svg) center no-repeat;background-size:contain}#checkout_fondy_form #f_card_sep.visa{background:url(../img/visa-logo.svg) center no-repeat;background-size:contain}#checkout_fondy_form #f_card_sep:after{content:" ";display:block;width:70%;height:60%;border-top-right-radius:5px;border-bottom-right-radius:5px;background:#d9d9d9;position:absolute;top:20%}#checkout_fondy_form #f_card_sep.mastercard:after,#checkout_fondy_form #f_card_sep.visa:after{display:none} -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/img/fondy_logo_cards.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 40 | 42 | 43 | 45 | image/svg+xml 46 | 48 | 49 | 50 | 51 | 52 | 57 | 60 | 65 | 70 | 75 | 80 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/img/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/woocommerce/fondy-woocommerce-payment-gateway/assets/img/icon-128x128.png -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/woocommerce/fondy-woocommerce-payment-gateway/assets/img/logo.png -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/img/mc-logo.svg: -------------------------------------------------------------------------------- 1 | mc_vrt_rgb_pos -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/img/visa-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 54 | 76 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/js/fondy_embedded.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded", () => fondy("#fondy-checkout-container", FondyPaymentArguments)); -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/assets/js/fondy_seamless.js: -------------------------------------------------------------------------------- 1 | function f_block(e) { 2 | f_is_blocked(e) || e.addClass("processing").block({message: null, overlayCSS: {background: "#fff", opacity: .6}}) 3 | } 4 | function f_is_blocked(e) { 5 | return e.is(".processing") || e.parents(".processing").length 6 | } 7 | function f_unblock(e) { 8 | e.removeClass("processing").unblock() 9 | } 10 | function nextInput(e, r) { 11 | clearTimeout(e.keydownIdle), e.keydownIdle = setTimeout(function (t, o, n, a, c) { 12 | n = (o = Array.prototype.slice.call(e.form.elements)).indexOf(e), 0 === (c = Number(e.value.length)) && 8 === r.keyCode ? t = o[--n] : c === Number(e.getAttribute("maxlength")) && (t = o[++n]), t && (t.focus(), "setSelectionRange" in t && t === document.activeElement && t.setSelectionRange(0, t.value.length)) 13 | }) 14 | } 15 | function fondy_submit_order(e) { 16 | if (jQuery("#payment_method_fondy").is(":checked")) { 17 | (e || window.event).preventDefault(); 18 | var r = jQuery("form[name=checkout]"); 19 | !r.length && jQuery(".checkout.woocommerce-checkout").length ? r = jQuery(".checkout.woocommerce-checkout") : jQuery("#checkout_fondy_form").find(".error-wrapper").html("Invalid checkout form, please disable on checkout method and try another."), f_clean_error(); 20 | var t = jQuery("#fondy_ccard"), o = jQuery("#fondy_expiry_month"), n = jQuery("#fondy_expiry_year"), a = jQuery("#fondy_cvv2"); 21 | if (console.log(payform.parseCardType(t.val())), console.log(f_valid_credit_card(t.val())), !f_valid_credit_card(t.val()))return fondy_error(t); 22 | if (!f_valid_month(o.val()))return fondy_error(o); 23 | if (!f_valid_year(n.val()))return fondy_error(n); 24 | if (!f_valid_cvv2(a.val()))return fondy_error(a); 25 | jQuery("#checkout_fondy_form").find(".error-wrapper").hide(); 26 | var c = r.serialize() + "&" + jQuery.param({ 27 | action: "generate_ajax_order_fondy_info", 28 | nonce_code: fondy_info.nonce 29 | }); 30 | f_block(jQuery("#checkout_fondy_form")), f_block(jQuery("#place_order")), jQuery.post(fondy_info.url, c, function (e) { 31 | if ("success" === e.result) { 32 | jQuery("input[name='token']").length || jQuery("#checkout_fondy_form").append('9&&(e-=9),l+=e;return l%10==0},s=function(t){var e;return!(null==("undefined"!=typeof document&&null!==document&&null!=(e=document.selection)?e.createRange:void 0)||!document.selection.createRange().text)||null!=t.selectionStart&&t.selectionStart!==t.selectionEnd},C=function(t){var e,n,r,a,u,l,i,o;for(null==t&&(t=""),r="0123456789",a="0123456789",o="",u=0,i=(n=t.split("")).length;u-1&&(e=a[l]),o+=e;return o},m=function(t){var e;if(e=n(t.target),t.target.value=v.formatCardNumber(t.target.value),null!=e&&"change"!==t.type)return t.target.setSelectionRange(e,e)},g=function(t){var e,r,u,l,i,o,c;if(u=String.fromCharCode(t.which),/^\d+$/.test(u)&&(c=t.target.value,e=a(c+u),l=(c.replace(/\D/g,"")+u).length,o=16,e&&(o=e.length[e.length.length-1]),!(l>=o||(r=n(t.target))&&r!==c.length)))return(i=e&&"amex"===e.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/).test(c)?(t.preventDefault(),setTimeout(function(){return t.target.value=c+" "+u})):i.test(c+u)?(t.preventDefault(),setTimeout(function(){return t.target.value=c+u+" "})):void 0},i=function(t){var e,r;if(r=t.target.value,8===t.which&&(!(e=n(t.target))||e===r.length))return/\d\s$/.test(r)?(t.preventDefault(),setTimeout(function(){return t.target.value=r.replace(/\d\s$/,"")})):/\s\d?$/.test(r)?(t.preventDefault(),setTimeout(function(){return t.target.value=r.replace(/\d$/,"")})):void 0},y=function(t){var e;if(e=n(t.target),t.target.value=v.formatCardExpiry(t.target.value),null!=e&&"change"!==t.type)return t.target.setSelectionRange(e,e)},c=function(t){var e,n;if(e=String.fromCharCode(t.which),/^\d+$/.test(e))return n=t.target.value+e,/^\d$/.test(n)&&"0"!==n&&"1"!==n?(t.preventDefault(),setTimeout(function(){return t.target.value="0"+n+" / "})):/^\d\d$/.test(n)?(t.preventDefault(),setTimeout(function(){return t.target.value=n+" / "})):void 0},h=function(t){var e,n;if(e=String.fromCharCode(t.which),/^\d+$/.test(e))return n=t.target.value,/^\d\d$/.test(n)?t.target.value=n+" / ":void 0},f=function(t){var e,n;if("/"===(n=String.fromCharCode(t.which))||" "===n)return e=t.target.value,/^\d$/.test(e)&&"0"!==e?t.target.value="0"+e+" / ":void 0},o=function(t){var e,r;if(r=t.target.value,8===t.which&&(!(e=n(t.target))||e===r.length))return/\d\s\/\s$/.test(r)?(t.preventDefault(),setTimeout(function(){return t.target.value=r.replace(/\d\s\/\s$/,"")})):void 0},p=function(t){var e;if(e=n(t.target),t.target.value=C(t.target.value).replace(/\D/g,"").slice(0,4),null!=e&&"change"!==t.type)return t.target.setSelectionRange(e,e)},S=function(t){var e;if(!(t.metaKey||t.ctrlKey||0===t.which||t.which<33))return e=String.fromCharCode(t.which),/^\d+$/.test(e)?void 0:t.preventDefault()},$=function(t){var e,n,r;if(n=String.fromCharCode(t.which),/^\d+$/.test(n)&&!s(t.target))return r=(t.target.value+n).replace(/\D/g,""),(e=a(r))&&r.length>e.length[e.length.length-1]?t.preventDefault():r.length>16?t.preventDefault():void 0},w=function(t){var e;if(e=String.fromCharCode(t.which),/^\d+$/.test(e)&&!s(t.target))return(t.target.value+e).replace(/\D/g,"").length>6?t.preventDefault():void 0},D=function(t){var e;if(e=String.fromCharCode(t.which),/^\d+$/.test(e)&&!s(t.target))return(t.target.value+e).length>4?t.preventDefault():void 0},v.cvcInput=function(t){return r(t,"keypress",S),r(t,"keypress",D),r(t,"paste",p),r(t,"change",p),r(t,"input",p)},v.expiryInput=function(t){return r(t,"keypress",S),r(t,"keypress",w),r(t,"keypress",c),r(t,"keypress",f),r(t,"keypress",h),r(t,"keydown",o),r(t,"change",y),r(t,"input",y)},v.cardNumberInput=function(t){return r(t,"keypress",S),r(t,"keypress",$),r(t,"keypress",g),r(t,"keydown",i),r(t,"paste",m),r(t,"change",m),r(t,"input",m)},v.numericInput=function(t){return r(t,"keypress",S),r(t,"paste",S),r(t,"change",S),r(t,"input",S)},v.parseCardExpiry=function(t){var e,n,r;return e=(n=(t=t.replace(/\s/g,"")).split("/",2))[0],2===(null!=(r=n[1])?r.length:void 0)&&/^\d+$/.test(r)&&(r=(new Date).getFullYear().toString().slice(0,2)+r),{month:e=parseInt(e,10),year:r=parseInt(r,10)}},v.validateCardNumber=function(e){var n,r;return e=(e+"").replace(/\s+|-/g,""),!!/^\d+$/.test(e)&&(!!(n=a(e))&&(r=e.length,t.call(n.length,r)>=0&&(!1===n.luhn||d(e))))},v.validateCardExpiry=function(t,e){var n,r,a;return"object"==typeof t&&"month"in t&&(t=(a=t).month,e=a.year),!(!t||!e)&&(t=String(t).trim(),e=String(e).trim(),!!/^\d+$/.test(t)&&(!!/^\d+$/.test(e)&&(1<=t&&t<=12&&(2===e.length&&(e=e<70?"20"+e:"19"+e),4===e.length&&(r=new Date(e,t),n=new Date,r.setMonth(r.getMonth()-1),r.setMonth(r.getMonth()+1,1),r>n)))))},v.validateCardCVC=function(e,n){var r,a;return e=String(e).trim(),!!/^\d+$/.test(e)&&(null!=(r=u(n))?(a=e.length,t.call(r.cvcLength,a)>=0):e.length>=3&&e.length<=4)},v.parseCardType=function(t){var e;return t&&(null!=(e=a(t))?e.type:void 0)||null},v.formatCardNumber=function(t){var e,n,r,u;return t=(t=C(t)).replace(/\D/g,""),(e=a(t))?(u=e.length[e.length.length-1],t=t.slice(0,u),e.format.global?null!=(r=t.match(e.format))?r.join(" "):void 0:null!=(n=e.format.exec(t))?(n.shift(),(n=n.filter(Boolean)).join(" ")):void 0):t},v.formatCardExpiry=function(t){var e,n,r,a;return(n=(t=C(t)).match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(e=n[1]||"",r=n[2]||"",(a=n[3]||"").length>0?r=" / ":" /"===r?(e=e.substring(0,1),r=""):2===e.length||r.length>0?r=" / ":1===e.length&&"0"!==e&&"1"!==e&&(e="0"+e,r=" / "),e+r+a):""},v})}).call(this); -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/fondy-woocommerce-payment-gateway.php: -------------------------------------------------------------------------------- 1 | isAcceptableEnv()) 54 | return; 55 | 56 | require_once dirname(__FILE__) . '/includes/class-wc-fondy-api.php'; 57 | 58 | require_once dirname(__FILE__) . '/includes/integration-types/Fondy_Embedded.php'; 59 | require_once dirname(__FILE__) . '/includes/integration-types/Fondy_Hosted.php'; 60 | require_once dirname(__FILE__) . '/includes/integration-types/Fondy_Seamless.php'; 61 | 62 | require_once dirname(__FILE__) . '/includes/abstract-wc-fondy-payment-gateway.php'; 63 | require_once dirname(__FILE__) . '/includes/payment-methods/class-wc-gateway-fondy-card.php'; 64 | require_once dirname(__FILE__) . '/includes/payment-methods/class-wc-gateway-fondy-bank.php'; 65 | require_once dirname(__FILE__) . '/includes/payment-methods/class-wc-gateway-fondy-localmethods.php'; 66 | 67 | require_once dirname(__FILE__) . '/includes/compat/class-wc-fondy-pre-orders-compat.php'; 68 | require_once dirname(__FILE__) . '/includes/compat/class-wc-fondy-subscriptions-compat.php'; 69 | 70 | // This action hook registers our PHP class as a WooCommerce payment gateway 71 | add_filter('woocommerce_payment_gateways', [$this, 'add_gateways']); 72 | // localization 73 | load_plugin_textdomain('fondy-woocommerce-payment-gateway', false, basename(WC_FONDY_DIR) . '/languages/'); 74 | // add plugin setting button 75 | add_filter('plugin_action_links_' . plugin_basename(__FILE__), [$this, 'plugin_action_links']); 76 | 77 | $this->updateSettings(); 78 | } 79 | 80 | public function add_gateways($gateways) 81 | { 82 | $gateways[] = 'WC_Gateway_Fondy_Card'; 83 | $gateways[] = 'WC_Gateway_Fondy_Bank'; 84 | $gateways[] = 'WC_Gateway_Fondy_LocalMethods'; 85 | return $gateways; 86 | } 87 | 88 | /** 89 | * render setting button in wp plugins list 90 | * 91 | * @param $links 92 | * @return array|string[] 93 | */ 94 | public function plugin_action_links($links) 95 | { 96 | $plugin_links = [ 97 | sprintf( 98 | '%2$s', 99 | admin_url('admin.php?page=wc-settings&tab=checkout§ion=fondy'), 100 | __('Settings', 'fondy-woocommerce-payment-gateway') 101 | ), 102 | ]; 103 | 104 | return array_merge($plugin_links, $links); 105 | } 106 | 107 | /** 108 | * migrate old settings 109 | */ 110 | public function updateSettings() 111 | { 112 | if (version_compare(get_option('fondy_woocommerce_version'), WC_FONDY_VERSION, '<')) { 113 | update_option('fondy_woocommerce_version', WC_FONDY_VERSION); 114 | $settings = maybe_unserialize(get_option('woocommerce_fondy_settings', [])); 115 | 116 | if (isset($settings['salt'])) { 117 | $settings['secret_key'] = $settings['salt']; 118 | unset($settings['salt']); 119 | } 120 | 121 | if (isset($settings['default_order_status'])){ 122 | $settings['completed_order_status'] = $settings['default_order_status']; 123 | unset($settings['default_order_status']); 124 | } 125 | 126 | if (isset($settings['payment_type'])) { 127 | switch ($settings['payment_type']) { 128 | case 'page_mode': 129 | $settings['integration_type'] = 'embedded'; 130 | break; 131 | case 'on_checkout_page': 132 | $settings['integration_type'] = 'seamless'; 133 | break; 134 | default: 135 | $settings['integration_type'] = 'hosted'; 136 | } 137 | unset($settings['payment_type']); 138 | } 139 | 140 | unset($settings['calendar']); 141 | unset($settings['page_mode_instant']); 142 | unset($settings['on_checkout_page']); 143 | unset($settings['force_lang']); 144 | 145 | update_option('woocommerce_fondy_settings', $settings); 146 | } 147 | } 148 | 149 | /** 150 | * check env 151 | * 152 | * @return bool 153 | */ 154 | public function isAcceptableEnv() 155 | { 156 | if (version_compare(WC_VERSION, WC_FONDY_MIN_WC_VER, '<')) { 157 | add_action('admin_notices', [$this, 'woocommerce_fondy_wc_not_supported_notice']); 158 | return false; 159 | } 160 | 161 | if (version_compare(phpversion(), WC_FONDY_MIN_PHP_VER, '<')) { 162 | add_action('admin_notices', [$this, 'woocommerce_fondy_php_not_supported_notice']); 163 | 164 | return false; 165 | } 166 | 167 | return true; 168 | } 169 | 170 | public function woocommerce_fondy_wc_not_supported_notice() 171 | { 172 | /* translators: 1) required WC version 2) current WC version */ 173 | $message = sprintf(__('Payment Gateway Fondy requires WooCommerce %1$s or greater to be installed and active. WooCommerce %2$s is no longer supported.', 'fondy-woocommerce-payment-gateway'), WC_FONDY_MIN_WC_VER, WC_VERSION); 174 | echo '

' . $message . '

'; 175 | } 176 | 177 | public function woocommerce_fondy_php_not_supported_notice() 178 | { 179 | /* translators: 1) required PHP version 2) current PHP version */ 180 | $message = sprintf(__('The minimum PHP version required for Fondy Payment Gateway is %1$s. You are running %2$s.', 'fondy-woocommerce-payment-gateway'), WC_FONDY_MIN_PHP_VER, phpversion()); 181 | echo '

' . $message . '

'; 182 | } 183 | 184 | /** 185 | * prevent from being unserialized (which would create a second instance of it) 186 | */ 187 | public function __wakeup() 188 | { 189 | throw new Exception("Cannot unserialize singleton"); 190 | } 191 | } 192 | } 193 | 194 | function woocommerce_gateway_fondy() { 195 | return WC_Fondy::getInstance(); 196 | } 197 | 198 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/abstract-wc-fondy-payment-gateway.php: -------------------------------------------------------------------------------- 1 | test_mode) { 29 | $this->merchant_id = WC_Fondy_API::TEST_MERCHANT_ID; 30 | $this->secret_key = WC_Fondy_API::TEST_MERCHANT_SECRET_KEY; 31 | } 32 | 33 | WC_Fondy_API::setMerchantID($this->merchant_id); 34 | WC_Fondy_API::setSecretKey($this->secret_key); 35 | 36 | // callback handler 37 | add_action('woocommerce_api_' . strtolower(get_class($this)), [$this, 'callbackHandler']); 38 | 39 | // todo mb thankyoupage change order status or clear cart 40 | // add_action('woocommerce_before_thankyou', [$this, '']); 41 | 42 | // This action hook saves the settings 43 | add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options']); 44 | 45 | if ($this->integration_type === 'embedded') { 46 | add_action('wp_enqueue_scripts', [$this, 'includeEmbeddedAssets']); 47 | add_action('woocommerce_receipt_' . $this->id, [$this, 'receipt_page']); 48 | } 49 | 50 | if ($this->integration_type === 'seamless') { 51 | add_action('wp_enqueue_scripts', [$this, 'includeSeamlessAssets']); 52 | add_filter('woocommerce_order_button_html', [$this, 'custom_order_button_html']); 53 | add_action('wp_ajax_nopriv_generate_ajax_order_fondy_info', [$this, 'generate_ajax_order_fondy_info'], 99); 54 | add_action('wp_ajax_generate_ajax_order_fondy_info', [$this, 'generate_ajax_order_fondy_info'], 99); 55 | } 56 | } 57 | 58 | /** 59 | * Process Payment. 60 | * Run after submit order button. 61 | * 62 | * @param int $order_id 63 | * @return array 64 | */ 65 | public function process_payment($order_id) 66 | { 67 | $order = wc_get_order($order_id); 68 | $processResult = ['result' => 'success', 'redirect' => '']; 69 | 70 | try { 71 | if ($this->integration_type === 'embedded') { 72 | $processResult['redirect'] = $order->get_checkout_payment_url(true); 73 | } elseif ($this->integration_type === 'seamless') { 74 | $processResult['token'] = $this->getCheckoutToken($order); 75 | } else { 76 | $paymentParams = $this->getPaymentParams($order); 77 | $processResult['redirect'] = WC_Fondy_API::getCheckoutUrl($paymentParams); 78 | } 79 | } catch (Exception $e) { 80 | wc_add_notice($e->getMessage(), 'error'); 81 | $processResult['result'] = 'fail'; 82 | } 83 | 84 | // in prev version we are use session to save redirect_url 85 | return apply_filters('wc_gateway_fondy_process_payment_complete', $processResult, $order); 86 | } 87 | 88 | /** 89 | * Fondy payment parameters 90 | * 91 | * @param WC_Order $order 92 | * @return mixed|void 93 | * @since 3.0.0 94 | */ 95 | public function getPaymentParams($order) 96 | { 97 | $params = [ 98 | 'order_id' => $this->createFondyOrderID($order), 99 | 'order_desc' => __('Order №: ', 'fondy-woocommerce-payment-gateway') . $order->get_id(), 100 | 'amount' => (int)round($order->get_total() * 100), 101 | 'currency' => get_woocommerce_currency(), 102 | 'lang' => $this->getLanguage(), 103 | 'sender_email' => $this->getEmail($order), 104 | 'response_url' => $this->getResponseUrl($order), 105 | 'server_callback_url' => $this->getCallbackUrl(), 106 | 'reservation_data' => $this->getReservationData($order), 107 | ]; 108 | 109 | return apply_filters('wc_gateway_fondy_payment_params', $params, $order); 110 | } 111 | 112 | /** 113 | * Generate unique fondy order id 114 | * and save it to order meta. 115 | * 116 | * @param $order 117 | * @return string 118 | * @since 3.0.0 119 | */ 120 | public function createFondyOrderID($order) 121 | { 122 | $fondyOrderID = $order->get_id() . self::ORDER_SEPARATOR . time(); 123 | $order->update_meta_data(self::META_NAME_FONDY_ORDER_ID, $fondyOrderID); 124 | $order->save(); 125 | 126 | return $fondyOrderID; 127 | } 128 | 129 | /** 130 | * Extracts fondy order if from order meta 131 | * 132 | * @param WC_Order $order 133 | * @return mixed 134 | * @since 3.0.0 135 | */ 136 | public function getFondyOrderID($order) 137 | { 138 | return $order->get_meta(self::META_NAME_FONDY_ORDER_ID); 139 | } 140 | 141 | /** 142 | * Return custom or default order thank-you page url 143 | * 144 | * @param WC_Order $order 145 | * @return false|string|WP_Error 146 | * @since 3.0.0 147 | */ 148 | public function getResponseUrl($order) 149 | { 150 | return $this->redirect_page_id ? get_permalink($this->redirect_page_id) : $this->get_return_url($order); 151 | } 152 | 153 | /** 154 | * Gets the transaction URL linked to Fondy merchant portal dashboard. 155 | * 156 | * @param WC_Order $order 157 | * @return string 158 | * @since 3.0.0 159 | */ 160 | public function get_transaction_url($order) 161 | { 162 | $this->view_transaction_url = 'https://portal.fondy.eu/mportal/#/payments/order/%s'; 163 | return parent::get_transaction_url($order); 164 | } 165 | 166 | /** 167 | * get checkout token 168 | * cache it to session 169 | * 170 | * @param $order 171 | * @return array|string 172 | * @throws Exception 173 | */ 174 | public function getCheckoutToken($order) 175 | { 176 | $orderID = $order->get_id(); 177 | $amount = (int)round($order->get_total() * 100); 178 | $currency = get_woocommerce_currency(); 179 | $sessionTokenKey = 'session_token_' . md5($this->merchant_id . '_' . $orderID . '_' . $amount . '_' . $currency); 180 | $checkoutToken = WC()->session->get($sessionTokenKey); 181 | 182 | if (empty($checkoutToken)) { 183 | $paymentParams = $this->getPaymentParams($order); 184 | $checkoutToken = WC_Fondy_API::getCheckoutToken($paymentParams); 185 | WC()->session->set($sessionTokenKey, $checkoutToken); 186 | } 187 | 188 | return $checkoutToken; 189 | } 190 | 191 | /** 192 | * remove checkoutToken cache from session 193 | * 194 | * @param $paymentParams 195 | * @param $orderID 196 | */ 197 | public function clearCache($paymentParams, $orderID) 198 | { 199 | WC()->session->__unset('session_token_' . md5($this->merchant_id . '_' . $orderID . '_' . $paymentParams['amount'] . '_' . $paymentParams['currency'])); 200 | } 201 | 202 | /** 203 | * Fondy widget options 204 | * 205 | * @return array 206 | * @since 3.0.0 207 | */ 208 | public function getPaymentOptions() 209 | { 210 | return [ 211 | 'full_screen' => false, 212 | 'button' => true, 213 | 'email' => true, 214 | 'show_menu_first' => false, 215 | ]; 216 | } 217 | 218 | /** 219 | * Site lang cropped 220 | * 221 | * @return string 222 | */ 223 | public function getLanguage() 224 | { 225 | return substr(get_bloginfo('language'), 0, 2); 226 | } 227 | 228 | /** 229 | * Order Email 230 | * 231 | * @param WC_Order $order 232 | * @return string 233 | */ 234 | public function getEmail($order) 235 | { 236 | $current_user = wp_get_current_user(); 237 | $email = $current_user->user_email; 238 | 239 | if (empty($email)) { 240 | $order_data = $order->get_data(); 241 | $email = $order_data['billing']['email']; 242 | } 243 | 244 | return $email; 245 | } 246 | 247 | public function getCallbackUrl() 248 | { 249 | return wc_get_endpoint_url('wc-api', strtolower(get_class($this)), get_site_url()); 250 | } 251 | 252 | /** 253 | * Fondy antifraud parameters 254 | * 255 | * @param WC_Order $order 256 | * @return string 257 | * @since 3.0.0 258 | */ 259 | public function getReservationData($order) 260 | { 261 | $orderData = $order->get_data(); 262 | $orderDataBilling = $orderData['billing']; 263 | 264 | $reservationData = [ 265 | 'customer_zip' => $orderDataBilling['postcode'], 266 | 'customer_name' => $orderDataBilling['first_name'] . ' ' . $orderDataBilling['last_name'], 267 | 'customer_address' => $orderDataBilling['address_1'] . ' ' . $orderDataBilling['city'], 268 | 'customer_state' => $orderDataBilling['state'], 269 | 'customer_country' => $orderDataBilling['country'], 270 | 'phonemobile' => $orderDataBilling['phone'], 271 | 'account' => $orderDataBilling['email'], 272 | 'cms_name' => 'Wordpress', 273 | 'cms_version' => get_bloginfo('version'), 274 | 'cms_plugin_version' => WC_FONDY_VERSION . ' (Woocommerce ' . WC_VERSION . ')', 275 | 'shop_domain' => get_site_url(), 276 | 'path' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '', 277 | 'products' => $this->getReservationDataProducts($order->get_items()) 278 | ]; 279 | 280 | return base64_encode(json_encode($reservationData)); 281 | } 282 | 283 | /** 284 | * data to create fiscal check 285 | * 286 | * @param $orderItemsProducts 287 | * @return array 288 | */ 289 | public function getReservationDataProducts($orderItemsProducts) 290 | { 291 | $reservationDataProducts = []; 292 | 293 | try { 294 | /** @var WC_Order_Item_Product $orderProduct */ 295 | foreach ($orderItemsProducts as $orderProduct) { 296 | $reservationDataProducts[] = [ 297 | 'id' => $orderProduct->get_product_id(), 298 | 'name' => $orderProduct->get_name(), 299 | 'price' => $orderProduct->get_product()->get_price(), 300 | 'total_amount' => $orderProduct->get_total(), 301 | 'quantity' => $orderProduct->get_quantity(), 302 | ]; 303 | } 304 | } catch (Exception $e) { 305 | $reservationDataProducts['error'] = $e->getMessage(); 306 | } 307 | 308 | return $reservationDataProducts; 309 | } 310 | 311 | 312 | /** 313 | * @return array 314 | */ 315 | public function getIntegrationTypes() 316 | { 317 | $integration_types = []; 318 | 319 | if (isset($this->embedded)) { 320 | $integration_types['embedded'] = __('Embedded', 'fondy-woocommerce-payment-gateway'); 321 | } 322 | 323 | if (isset($this->hosted)) { 324 | $integration_types['hosted'] = __('Hosted', 'fondy-woocommerce-payment-gateway'); 325 | } 326 | 327 | if (isset($this->seamless)) { 328 | $integration_types['seamless'] = __('Seamless', 'fondy-woocommerce-payment-gateway'); 329 | } 330 | 331 | return $integration_types; 332 | } 333 | 334 | /** 335 | * @param bool $title 336 | * @param bool $indent 337 | * @return array 338 | */ 339 | public function fondy_get_pages($title = false, $indent = true) 340 | { 341 | $wp_pages = get_pages('sort_column=menu_order'); 342 | $page_list = array(); 343 | if ($title) { 344 | $page_list[] = $title; 345 | } 346 | foreach ($wp_pages as $page) { 347 | $prefix = ''; 348 | // show indented child pages? 349 | if ($indent) { 350 | $has_parent = $page->post_parent; 351 | while ($has_parent) { 352 | $prefix .= ' - '; 353 | $next_page = get_post($has_parent); 354 | $has_parent = $next_page->post_parent; 355 | } 356 | } 357 | // add to page list array array 358 | $page_list[$page->ID] = $prefix . $page->post_title; 359 | } 360 | 361 | return $page_list; 362 | } 363 | 364 | /** 365 | * Getting all available woocommerce order statuses 366 | * 367 | * @return array 368 | */ 369 | public function getPaymentOrderStatuses() 370 | { 371 | $order_statuses = function_exists('wc_get_order_statuses') ? wc_get_order_statuses() : []; 372 | $statuses = [ 373 | 'default' => __('Default status', 'fondy-woocommerce-payment-gateway') 374 | ]; 375 | if ($order_statuses) { 376 | foreach ($order_statuses as $k => $v) { 377 | $statuses[str_replace('wc-', '', $k)] = $v; 378 | } 379 | } 380 | return $statuses; 381 | } 382 | 383 | /** 384 | * Fondy callback handler 385 | * 386 | * @since 3.0.0 387 | */ 388 | public function callbackHandler() 389 | { 390 | try { 391 | $requestBody = !empty($_POST) ? $_POST : json_decode(file_get_contents('php://input'), true); 392 | WC_Fondy_API::validateRequest($requestBody); 393 | 394 | if (!empty($requestBody['reversal_amount']) || $requestBody['tran_type'] === 'reverse') // todo MB add refund complete note 395 | exit; // just ignore reverse callback 396 | 397 | // order switch status process 398 | $orderID = strstr($requestBody['order_id'], self::ORDER_SEPARATOR, true); 399 | $order = wc_get_order($orderID); 400 | $this->clearCache($requestBody, $orderID); // remove checkoutToken if exist 401 | 402 | do_action('wc_gateway_fondy_receive_valid_callback', $requestBody, $order); 403 | 404 | switch ($requestBody['order_status']) { 405 | case self::ORDER_APPROVED: //we recive with this status in 3 type transaction callback - purchase, capture and partial reverse 406 | $this->fondyPaymentComplete($order, $requestBody['payment_id']); 407 | break; 408 | case self::ORDER_CREATED: 409 | case self::ORDER_PROCESSING: 410 | // we can receive processing status when Issuer bank declined payment. Mb add note. 411 | // in default WC set pending status to order 412 | break; 413 | case self::ORDER_DECLINED: 414 | $newOrderStatus = $this->declined_order_status != 'default' ? $this->declined_order_status : 'failed'; 415 | /* translators: 1) fondy order status 2) fondy order id */ 416 | $orderNote = sprintf(__('Transaction ERROR: order %1$s
Fondy ID: %2$s', 'fondy-woocommerce-payment-gateway'), $requestBody['order_status'], $requestBody['payment_id']); 417 | $order->update_status($newOrderStatus, $orderNote); 418 | break; 419 | case self::ORDER_EXPIRED: 420 | $newOrderStatus = $this->expired_order_status != 'default' ? $this->expired_order_status : 'cancelled'; 421 | $orderNote = sprintf(__('Transaction ERROR: order %1$s
Fondy ID: %2$s', 'fondy-woocommerce-payment-gateway'), $requestBody['order_status'], $requestBody['payment_id']); 422 | $order->update_status($newOrderStatus, $orderNote); 423 | break; 424 | default: 425 | throw new Exception (__('Unhandled fondy order status', 'fondy-woocommerce-payment-gateway')); 426 | } 427 | } catch (Exception $e) { 428 | if (!empty($order)) 429 | $order->update_status('failed', $e->getMessage()); 430 | wp_send_json(['error' => $e->getMessage()], 400); 431 | } 432 | 433 | status_header(200); 434 | exit; 435 | } 436 | 437 | /** 438 | * Fondy payment complete process 439 | * 440 | * @param WC_Order $order 441 | * @param $transactionID 442 | * @since 3.0.0 443 | */ 444 | public function fondyPaymentComplete($order, $transactionID) 445 | { 446 | if (!$order->is_paid()) { 447 | $order->payment_complete($transactionID); 448 | /* translators: fondy order id */ 449 | $orderNote = sprintf(__('Fondy payment successful.
Fondy ID: %1$s
', 'fondy-woocommerce-payment-gateway'), $transactionID); 450 | 451 | if ($this->completed_order_status != 'default') { 452 | WC()->cart->empty_cart(); 453 | $order->update_status($this->completed_order_status, $orderNote); 454 | } else $order->add_order_note($orderNote); 455 | } 456 | } 457 | } 458 | 459 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/class-wc-fondy-api.php: -------------------------------------------------------------------------------- 1 | checkout_url; 72 | } 73 | 74 | /** 75 | * @throws Exception 76 | */ 77 | public static function getCheckoutToken($requestData) 78 | { 79 | $response = self::sendToAPI('checkout/token', $requestData); 80 | 81 | return $response->token; 82 | } 83 | 84 | /** 85 | * @throws Exception 86 | */ 87 | public static function reverse($requestData) 88 | { 89 | return self::sendToAPI('reverse/order_id', $requestData); 90 | } 91 | 92 | /** 93 | * @throws Exception 94 | */ 95 | public static function capture($requestData) 96 | { 97 | return self::sendToAPI('capture/order_id', $requestData); 98 | } 99 | 100 | /** 101 | * @throws Exception 102 | */ 103 | public static function recurring($requestData) 104 | { 105 | return self::sendToAPI('recurring', $requestData); 106 | } 107 | 108 | /** 109 | * @param $endpoint 110 | * @param $requestData 111 | * @return mixed 112 | * @throws Exception 113 | */ 114 | public static function sendToAPI($endpoint, $requestData) 115 | { 116 | $requestData['merchant_id'] = self::getMerchantID(); 117 | $requestData['signature'] = self::getSignature($requestData, self::getSecretKey()); 118 | 119 | $response = wp_safe_remote_post( 120 | self::$ApiUrl . $endpoint, 121 | [ 122 | 'headers' => ["Content-type" => "application/json;charset=UTF-8"], 123 | 'body' => json_encode(['request' => $requestData]), 124 | 'timeout' => 70, 125 | ] 126 | ); 127 | 128 | if (is_wp_error($response)) 129 | throw new Exception($response->get_error_message()); 130 | 131 | $response_code = wp_remote_retrieve_response_code($response); 132 | if ($response_code != 200) 133 | throw new Exception("Fondy API Return code is $response_code. Please try again later."); 134 | 135 | $result = json_decode($response['body']); 136 | 137 | if (empty($result->response) && empty($result->response->response_status)) 138 | throw new Exception('Unknown Fondy API answer.'); 139 | 140 | if ($result->response->response_status != 'success') 141 | throw new Exception($result->response->error_message); 142 | 143 | return $result->response; 144 | } 145 | 146 | /** 147 | * @param $data 148 | * @param $password 149 | * @param bool $encoded 150 | * @return mixed|string 151 | */ 152 | public static function getSignature($data, $password, $encoded = true) 153 | { 154 | $data = array_filter($data, function ($var) { 155 | return $var !== '' && $var !== null; 156 | }); 157 | ksort($data); 158 | 159 | $str = $password; 160 | foreach ($data as $k => $v) { 161 | $str .= '|' . $v; 162 | } 163 | 164 | return $encoded ? sha1($str) : $str; 165 | } 166 | 167 | /** 168 | * Callback validation process 169 | * 170 | * @param $requestBody 171 | * @throws Exception 172 | */ 173 | public static function validateRequest($requestBody) 174 | { 175 | if (empty($requestBody)) 176 | throw new Exception('Empty request body.'); 177 | 178 | if (self::$merchantID != $requestBody['merchant_id']) 179 | throw new Exception ('Merchant data is incorrect.'); 180 | 181 | $requestSignature = $requestBody['signature']; 182 | unset($requestBody['response_signature_string']); 183 | unset($requestBody['signature']); 184 | if ($requestSignature !== self::getSignature($requestBody, self::$secretKey)) 185 | throw new Exception ('Signature is not valid'); 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/compat/class-wc-fondy-pre-orders-compat.php: -------------------------------------------------------------------------------- 1 | paymentGateway = $gateway; 18 | add_action('wc_pre_orders_process_pre_order_completion_payment_' . $this->paymentGateway->id, [$this, 'process_pre_order_payments']); 19 | add_action('wc_gateway_fondy_admin_options', [$this, 'getPreOrdersNotice']); 20 | add_filter('wc_gateway_fondy_payment_params', [$this, 'getPreOrdersPaymentParams'], 10, 2); 21 | } 22 | 23 | /** 24 | * Process a pre-order payment when the pre-order is released. 25 | * 26 | * @param WC_Order $order 27 | * 28 | * @return void 29 | */ 30 | public function process_pre_order_payments($order) 31 | { 32 | try { 33 | $capture = WC_Fondy_API::capture([ 34 | 'order_id' => $order->get_meta(WC_Fondy_Payment_Gateway::META_NAME_FONDY_ORDER_ID), 35 | 'currency' => esc_attr(get_woocommerce_currency()), 36 | 'amount' => (int)round($order->get_total() * 100), 37 | ]); 38 | 39 | if ($capture->capture_status === 'captured') { 40 | $order->add_order_note(__('Fondy capture successful.', 'fondy-woocommerce-payment-gateway')); 41 | $order->payment_complete(); 42 | } else { 43 | throw new Exception('Transaction: ' . $capture->response_status . '
' . $capture->error_message . '
Request_id: ' . $capture->request_id); 44 | } 45 | } catch (Exception $e) { 46 | /* translators: error message */ 47 | $order->update_status('failed', sprintf(__('Pre-order payment for order failed. Reason: %s', 'fondy-woocommerce-payment-gateway'), $e->getMessage())); 48 | } 49 | } 50 | 51 | public function getPreOrdersPaymentParams($params, $order) 52 | { 53 | if (WC_Pre_Orders_Order::order_contains_pre_order($order)) 54 | $params['preauth'] = 'Y'; 55 | 56 | return $params; 57 | } 58 | 59 | public function getPreOrdersNotice() 60 | { 61 | $message = __('Note: transactions by using Pre-Orders must be finished in 7 days term or it will be auto-captured.', 'fondy-woocommerce-payment-gateway'); 62 | echo '

' . $message . '

'; 63 | } 64 | } 65 | 66 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/compat/class-wc-fondy-subscriptions-compat.php: -------------------------------------------------------------------------------- 1 | paymentGateway = $paymentGateway; 21 | add_filter('wc_gateway_fondy_payment_params', [$this, 'subscriptionsPaymentParams'], 10, 2); 22 | add_filter('wc_gateway_fondy_process_payment_complete', [$this, 'subscriptionsProcessPaymentComplete'], 10, 2); 23 | add_action('woocommerce_scheduled_subscription_payment_' . $this->paymentGateway->id, [$this, 'scheduled_subscription_payment'], 10, 2); 24 | add_action('wc_gateway_fondy_receive_valid_callback', [$this, 'saveToken'], 10, 2); 25 | } 26 | 27 | public function subscriptionsPaymentParams($params, $order) 28 | { 29 | if ($this->has_subscription($order)) { 30 | $params['required_rectoken'] = 'Y'; 31 | if ((int)$order->get_total() === 0) { 32 | $order->add_order_note(__('Payment free trial verification', 'fondy-woocommerce-payment-gateway')); 33 | $params['verification'] = 'Y'; 34 | $params['amount'] = 1; 35 | } 36 | } 37 | 38 | return $params; 39 | } 40 | 41 | public function subscriptionsProcessPaymentComplete($resultData, $order) 42 | { 43 | global $woocommerce; 44 | 45 | if ($this->has_subscription($order)) { 46 | if (get_current_user_id() === 0) { 47 | wc_add_notice(__('You must be logged in.', 'fondy-woocommerce-payment-gateway'), 'error'); 48 | return [ 49 | 'result' => 'fail', 50 | 'redirect' => $woocommerce->cart->get_checkout_url() 51 | ]; 52 | } 53 | } 54 | 55 | return $resultData; 56 | } 57 | 58 | /** 59 | * Is $order a subscription? 60 | * @param WC_Order $order 61 | * @return boolean 62 | */ 63 | public function has_subscription($order) 64 | { 65 | return (function_exists('wcs_order_contains_subscription') && (wcs_order_contains_subscription($order) || wcs_is_subscription($order) || wcs_order_contains_renewal($order))); 66 | } 67 | 68 | /** 69 | * @param $requestBody 70 | * @param $order 71 | */ 72 | public function saveToken($requestBody, $order) 73 | { 74 | if (!empty($requestBody['rectoken']) && $this->has_subscription($order)) { 75 | $userID = $order->get_user_id(); 76 | 77 | $metaValue = [ 78 | 'token' => $requestBody['rectoken'], 79 | 'payment_id' => $this->paymentGateway->id 80 | ]; 81 | 82 | if ($this->isTokenAlreadySaved($requestBody['rectoken'], $userID)) { 83 | update_user_meta($userID, self::META_NAME_FONDY_RECTOKEN, $metaValue); 84 | } else add_user_meta($userID, self::META_NAME_FONDY_RECTOKEN, $metaValue); 85 | } 86 | } 87 | 88 | /** 89 | * @param $token 90 | * @param $userID 91 | * @return bool 92 | */ 93 | private function isTokenAlreadySaved($token, $userID) 94 | { 95 | $userTokens = get_user_meta($userID, self::META_NAME_FONDY_RECTOKEN); 96 | 97 | return array_search($token, array_column($userTokens, 'token'), true); 98 | } 99 | 100 | 101 | /** 102 | * scheduled_subscription_payment function. 103 | * 104 | * @param $amount_to_charge float The amount to charge. 105 | * @param $renewal_order WC_Order A WC_Order object created to record the renewal payment. 106 | */ 107 | public function scheduled_subscription_payment($amount_to_charge, $renewal_order) 108 | { 109 | if ($amount_to_charge === 0) { 110 | $renewal_order->payment_complete(); 111 | } 112 | 113 | try { 114 | $amount = (int)round($amount_to_charge * 100); 115 | $customerId = $renewal_order->get_customer_id(); 116 | 117 | if (!$customerId) 118 | throw new Exception(__('Customer not found.', 'woocommerce')); 119 | 120 | $token = get_user_meta($customerId, self::META_NAME_FONDY_RECTOKEN); 121 | 122 | if (is_null($token)) 123 | throw new Exception("Token not found."); 124 | 125 | if ($token[0]['payment_id'] !== $this->paymentGateway->id) //checkToken 126 | throw new Exception("Token expired, or token not found."); 127 | 128 | // $renewal_order->add_order_note('Order amount is: ' . $amount_to_charge); 129 | $subscriptionPayment = WC_Fondy_API::recurring([ 130 | 'order_id' => $this->paymentGateway->createFondyOrderID($renewal_order), 131 | 'amount' => $amount, 132 | 'rectoken' => $token[0]['token'], 133 | 'sender_email' => $renewal_order->get_billing_email(), 134 | 'currency' => get_woocommerce_currency(), 135 | 'order_desc' => sprintf( 136 | __('Recurring payment for: %s', 'fondy-woocommerce-payment-gateway'), 137 | $renewal_order->get_order_number() 138 | ), 139 | ]); 140 | 141 | if ($subscriptionPayment->order_status === 'approved') { 142 | $renewal_order->update_status('completed'); 143 | $renewal_order->payment_complete($subscriptionPayment->payment_id); 144 | $renewal_order->add_order_note("Fondy subscription payment successful.
Fondy ID: $subscriptionPayment->payment_id"); 145 | } else { 146 | throw new Exception("Transaction ERROR: order $subscriptionPayment->order_status
Fondy ID: $subscriptionPayment->payment_id"); 147 | } 148 | } catch (Exception $e) { 149 | /* translators: error message */ 150 | $renewal_order->update_status('failed', sprintf( 151 | __('Subscription payment failed. Reason: %s', 'fondy-woocommerce-payment-gateway'), 152 | $e->getMessage() 153 | )); 154 | } 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/integration-types/Fondy_Embedded.php: -------------------------------------------------------------------------------- 1 | enabled || (!is_cart() && !is_checkout_pay_page())) { 12 | return; 13 | } 14 | 15 | wp_enqueue_style('fondy-vue-css', 'https://pay.fondy.eu/latest/checkout-vue/checkout.css', null, WC_FONDY_VERSION); 16 | wp_enqueue_script('fondy-vue-js', 'https://pay.fondy.eu/latest/checkout-vue/checkout.js', null, WC_FONDY_VERSION); 17 | 18 | wp_register_script('fondy-init', plugins_url('assets/js/fondy_embedded.js', WC_FONDY_BASE_FILE), ['fondy-vue-js'], WC_FONDY_VERSION); 19 | wp_enqueue_style('fondy-embedded', plugins_url('assets/css/fondy_embedded.css', WC_FONDY_BASE_FILE), ['storefront-woocommerce-style', 'fondy-vue-css'], WC_FONDY_VERSION); 20 | } 21 | 22 | public function receipt_page($order_id) 23 | { 24 | $order = wc_get_order($order_id); 25 | 26 | try { 27 | $paymentArguments = [ 28 | 'options' => $this->getPaymentOptions(), 29 | 'params' => ['token' => $this->getCheckoutToken($order)], 30 | ]; 31 | } catch (Exception $e) { 32 | // wc_add_notice( $e->getMessage(), 'error' ); wc_print_notices(); 33 | wp_die($e->getMessage()); 34 | } 35 | 36 | wp_enqueue_script('fondy-init'); 37 | wp_localize_script('fondy-init', 'FondyPaymentArguments', $paymentArguments); 38 | 39 | echo '
'; 40 | } 41 | } -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/integration-types/Fondy_Hosted.php: -------------------------------------------------------------------------------- 1 | enabled || (!is_cart() && !is_checkout())) { 12 | return; 13 | } 14 | 15 | wp_enqueue_style('fondy-checkout', plugins_url('assets/css/fondy_seamless_old.css', WC_FONDY_BASE_FILE)); 16 | wp_enqueue_script('fondy_pay_v2', 'https://unpkg.com/ipsp-js-sdk@latest/dist/checkout.min.js', ['jquery'], WC_FONDY_VERSION, true); 17 | wp_enqueue_script('fondy_pay_v2_woocom', plugins_url('assets/js/fondy_seamless.js', WC_FONDY_BASE_FILE), ['fondy_pay_v2'], WC_FONDY_VERSION, true); 18 | wp_enqueue_script('fondy_pay_v2_card', plugins_url('assets/js/payform.min.js', WC_FONDY_BASE_FILE), ['fondy_pay_v2_woocom'], WC_FONDY_VERSION, true); 19 | 20 | wp_localize_script('fondy_pay_v2_woocom', 'fondy_info', 21 | [ 22 | 'url' => WC_AJAX::get_endpoint('checkout'), 23 | 'nonce' => wp_create_nonce('fondy-submit-nonce') 24 | ] 25 | ); 26 | } 27 | 28 | public function payment_fields() 29 | { 30 | if ($this->integration_type === 'seamless') { 31 | ?> 32 |
33 | 34 |
35 |
36 |
37 | 38 |
39 |
40 | 44 |
45 |
46 |
47 |
48 |
49 | 50 |
51 |
52 | 53 |
54 |
55 | 58 |
59 |
60 | 63 |
64 |
65 | 69 |
70 |
71 | 77 |
78 |
79 |
80 | ' . esc_attr($order_button_text) . ''; 94 | 95 | return $button; 96 | } 97 | 98 | /** 99 | * Process checkout func 100 | */ 101 | public function generate_ajax_order_fondy_info() 102 | { 103 | check_ajax_referer('fondy-submit-nonce', 'nonce_code'); 104 | wc_maybe_define_constant('WOOCOMMERCE_CHECKOUT', true); 105 | WC()->checkout()->process_checkout(); 106 | wp_die(0); 107 | } 108 | } -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/payment-methods/class-wc-gateway-fondy-bank.php: -------------------------------------------------------------------------------- 1 | id = 'fondy_bank'; // payment gateway plugin ID 11 | $this->icon = ''; // URL of the icon that will be displayed on checkout page near your gateway name 12 | $this->has_fields = false; // in case you need a custom credit card form 13 | $this->method_title = 'Fondy Bank'; 14 | $this->method_description = sprintf( //translators: link 15 | __('All other general Fondy settings can be adjusted here.', 'fondy-woocommerce-payment-gateway'), 16 | admin_url('admin.php?page=wc-settings&tab=checkout§ion=fondy') 17 | ); 18 | 19 | $this->init_form_fields(); 20 | 21 | // Load the settings. 22 | $this->init_settings(); 23 | $main_settings = get_option('woocommerce_fondy_settings'); 24 | $this->title = $this->get_option('title'); 25 | $this->description = $this->get_option('description'); 26 | $this->enabled = $this->get_option('enabled'); 27 | $this->integration_type = $this->get_option('integration_type') ? $this->get_option('integration_type') : false; 28 | $this->merchant_id = !empty($main_settings['merchant_id']) ? $main_settings['merchant_id'] : ''; 29 | $this->secret_key = !empty($main_settings['secret_key']) ? $main_settings['secret_key'] : ''; 30 | $this->test_mode = !empty($main_settings['test_mode']) && 'yes' === $main_settings['test_mode']; 31 | $this->redirect_page_id = !empty($main_settings['redirect_page_id']) ? $main_settings['redirect_page_id'] : false; 32 | $this->completed_order_status = !empty($main_settings['completed_order_status']) ? $main_settings['completed_order_status'] : false; 33 | $this->expired_order_status = !empty($main_settings['expired_order_status']) ? $main_settings['expired_order_status'] : false; 34 | $this->declined_order_status = !empty($main_settings['declined_order_status']) ? $main_settings['declined_order_status'] : false; 35 | 36 | parent::__construct(); 37 | } 38 | 39 | public function init_form_fields() 40 | { 41 | $this->form_fields = [ 42 | 'enabled' => [ 43 | 'title' => __('Enable/Disable', 'fondy-woocommerce-payment-gateway'), 44 | 'type' => 'checkbox', 45 | 'label' => __('Enable Fondy Bank Gateway', 'fondy-woocommerce-payment-gateway'), 46 | 'default' => 'no', 47 | 'description' => __('Show in the Payment List as a payment option', 'fondy-woocommerce-payment-gateway'), 48 | 'desc_tip' => true 49 | ], 50 | 'title' => [ 51 | 'title' => __('Title', 'fondy-woocommerce-payment-gateway'), 52 | 'type' => 'text', 53 | 'description' => __('This controls the title which the user sees during checkout', 'fondy-woocommerce-payment-gateway'), 54 | 'default' => __('Fondy Online Banking', 'fondy-woocommerce-payment-gateway'), 55 | 'desc_tip' => true, 56 | ], 57 | 'description' => [ 58 | 'title' => 'Description', 59 | 'type' => 'textarea', 60 | 'default' => __('Payments with online banking.', 'fondy-woocommerce-payment-gateway'), 61 | 'description' => __('This controls the description which the user sees during checkout', 'fondy-woocommerce-payment-gateway'), 62 | 'desc_tip' => true, 63 | ], 64 | 'integration_type' => [ 65 | 'title' => __('Payment integration type', 'fondy-woocommerce-payment-gateway'), 66 | 'type' => 'select', 67 | 'options' => $this->getIntegrationTypes(), 68 | 'description' => __('How the payment form will be displayed', 'fondy-woocommerce-payment-gateway'), 69 | 'desc_tip' => true 70 | ], 71 | ]; 72 | } 73 | 74 | public function getPaymentOptions() 75 | { 76 | $paymentOptions = parent::getPaymentOptions(); 77 | 78 | $paymentOptions['methods'] = ['banklinks_eu']; 79 | $paymentOptions['methods_disabled'] = ['wallets', 'card', 'local_methods']; 80 | $paymentOptions['active_tab'] = 'banklinks_eu'; 81 | 82 | return $paymentOptions; 83 | } 84 | 85 | public function getPaymentParams($order) 86 | { 87 | $params = parent::getPaymentParams($order); 88 | 89 | if ($this->integration_type === 'hosted') { 90 | $params['payment_systems'] = 'banklinks_eu'; 91 | } 92 | 93 | return $params; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/payment-methods/class-wc-gateway-fondy-card.php: -------------------------------------------------------------------------------- 1 | id = 'fondy'; // payment gateway plugin ID 21 | $this->icon = plugins_url('assets/img/fondy_logo_cards.svg', WC_FONDY_BASE_FILE); // URL of the icon that will be displayed on checkout page near your gateway name 22 | $this->has_fields = false; // in case you need a custom credit card form 23 | $this->method_title = 'Fondy'; 24 | $this->method_description = __('Card payments, Apple/Google Pay', 'fondy-woocommerce-payment-gateway'); 25 | 26 | $this->supports = [ 27 | 'products', 28 | 'refunds', 29 | 'pre-orders', 30 | 'subscriptions', 31 | 'subscription_reactivation', 32 | 'subscription_cancellation', 33 | 'subscription_amount_changes', 34 | 'subscription_date_changes', 35 | 'subscription_suspension' 36 | ]; 37 | 38 | // Method with all the options fields 39 | $this->init_form_fields(); 40 | 41 | // Load the settings. 42 | $this->init_settings(); 43 | $this->title = $this->get_option('title'); 44 | $this->description = $this->get_option('description'); 45 | $this->enabled = $this->get_option('enabled'); 46 | $this->test_mode = 'yes' === $this->get_option('test_mode'); 47 | $this->merchant_id = (int)$this->get_option('merchant_id'); 48 | $this->secret_key = $this->get_option('secret_key'); 49 | $this->integration_type = $this->get_option('integration_type') ? $this->get_option('integration_type') : false; 50 | $this->redirect_page_id = $this->get_option('redirect_page_id'); 51 | $this->completed_order_status = $this->get_option('completed_order_status') ? $this->get_option('completed_order_status') : false; 52 | $this->expired_order_status = $this->get_option('expired_order_status') ? $this->get_option('expired_order_status') : false; 53 | $this->declined_order_status = $this->get_option('declined_order_status') ? $this->get_option('declined_order_status') : false; 54 | 55 | parent::__construct(); 56 | 57 | if (class_exists('WC_Pre_Orders_Order')) { 58 | $this->pre_orders = new WC_Fondy_Pre_Orders_Compat($this); 59 | } 60 | 61 | if (class_exists('WC_Subscriptions_Order')) { 62 | $this->subscriptions = new WC_Fondy_Subscriptions_Compat($this); 63 | } 64 | } 65 | 66 | /** 67 | * action hook to add setting payment page Pre-Orders notice 68 | */ 69 | public function admin_options() 70 | { 71 | do_action('wc_gateway_fondy_admin_options'); 72 | parent::admin_options(); 73 | } 74 | 75 | public function init_form_fields() 76 | { 77 | $this->form_fields = [ 78 | 'enabled' => [ 79 | 'title' => __('Enable/Disable', 'fondy-woocommerce-payment-gateway'), 80 | 'type' => 'checkbox', 81 | 'label' => __('Enable Fondy Gateway', 'fondy-woocommerce-payment-gateway'), 82 | 'default' => 'no', 83 | 'description' => __('Show in the Payment List as a payment option', 'fondy-woocommerce-payment-gateway'), 84 | 'desc_tip' => true 85 | ], 86 | 'test_mode' => [ 87 | 'title' => __('Test mode', 'fondy-woocommerce-payment-gateway'), 88 | 'type' => 'checkbox', 89 | 'label' => __('Enable Test Mode', 'fondy-woocommerce-payment-gateway'), 90 | 'default' => 'no', 91 | 'description' => __('Place the payment gateway in test mode using test Merchant ID', 'fondy-woocommerce-payment-gateway'), 92 | 'desc_tip' => true 93 | ], 94 | 'title' => [ 95 | 'title' => __('Title', 'fondy-woocommerce-payment-gateway'), 96 | 'type' => 'text', 97 | 'description' => __('This controls the title which the user sees during checkout', 'fondy-woocommerce-payment-gateway'), 98 | 'default' => __('Fondy Cards, Apple/Google Pay', 'fondy-woocommerce-payment-gateway'), 99 | 'desc_tip' => true, 100 | ], 101 | 'description' => [ 102 | 'title' => __('Description:', 'fondy-woocommerce-payment-gateway'), 103 | 'type' => 'textarea', 104 | 'default' => __('Pay securely by Credit/Debit Card or by Apple/Google Pay with Fondy.', 'fondy-woocommerce-payment-gateway'), 105 | 'description' => __('This controls the description which the user sees during checkout', 'fondy-woocommerce-payment-gateway'), 106 | 'desc_tip' => true 107 | ], 108 | 'merchant_id' => [ 109 | 'title' => __('Merchant ID', 'fondy-woocommerce-payment-gateway'), 110 | 'type' => 'text', 111 | 'description' => __('Given to Merchant by Fondy', 'fondy-woocommerce-payment-gateway'), 112 | 'desc_tip' => true 113 | ], 114 | 'secret_key' => [ 115 | 'title' => __('Secret Key', 'fondy-woocommerce-payment-gateway'), 116 | 'type' => 'text', 117 | 'description' => __('Given to Merchant by Fondy', 'fondy-woocommerce-payment-gateway'), 118 | 'desc_tip' => true 119 | ], 120 | 'integration_type' => [ 121 | 'title' => __('Payment integration type', 'fondy-woocommerce-payment-gateway'), 122 | 'type' => 'select', 123 | 'options' => $this->getIntegrationTypes(), 124 | 'description' => __('How the payment form will be displayed', 'fondy-woocommerce-payment-gateway'), 125 | 'desc_tip' => true 126 | ], 127 | 'redirect_page_id' => [ 128 | 'title' => __('Return Page', 'fondy-woocommerce-payment-gateway'), 129 | 'type' => 'select', 130 | 'options' => $this->fondy_get_pages(__('Default order page', 'fondy-woocommerce-payment-gateway')), 131 | 'description' => __('URL of success page', 'fondy-woocommerce-payment-gateway'), 132 | 'desc_tip' => true 133 | ], 134 | 'completed_order_status' => [ 135 | 'title' => __('Payment completed order status', 'fondy-woocommerce-payment-gateway'), 136 | 'type' => 'select', 137 | 'options' => $this->getPaymentOrderStatuses(), 138 | 'default' => 'none', 139 | 'description' => __('The completed order status after successful payment', 'fondy-woocommerce-payment-gateway'), 140 | 'desc_tip' => true 141 | ], 142 | 'expired_order_status' => [ 143 | 'title' => __('Payment expired order status', 'fondy-woocommerce-payment-gateway'), 144 | 'type' => 'select', 145 | 'options' => $this->getPaymentOrderStatuses(), 146 | 'default' => 'none', 147 | 'description' => __('Order status when payment was expired', 'fondy-woocommerce-payment-gateway'), 148 | 'desc_tip' => true 149 | ], 150 | 'declined_order_status' => [ 151 | 'title' => __('Payment declined order status', 'fondy-woocommerce-payment-gateway'), 152 | 'type' => 'select', 153 | 'options' => $this->getPaymentOrderStatuses(), 154 | 'default' => 'none', 155 | 'description' => __('Order status when payment was declined', 'fondy-woocommerce-payment-gateway'), 156 | 'desc_tip' => true 157 | ], 158 | ]; 159 | } 160 | 161 | public function fondyPaymentComplete($order, $transactionID) 162 | { 163 | if ($this->pre_orders && WC_Pre_Orders_Order::order_contains_pre_order($order)) { 164 | $order->set_transaction_id($transactionID); 165 | WC_Pre_Orders_Order::mark_order_as_pre_ordered($order); 166 | } else parent::fondyPaymentComplete($order, $transactionID); 167 | } 168 | 169 | public function process_refund($order_id, $amount = null, $reason = '') 170 | { 171 | $order = wc_get_order($order_id); 172 | 173 | if (empty($order)) 174 | return false; 175 | 176 | try { 177 | $reverse = WC_Fondy_API::reverse([ 178 | 'order_id' => $this->getFondyOrderID($order), 179 | 'amount' => (int)round($amount * 100), 180 | 'currency' => $order->get_currency(), 181 | 'comment' => substr($reason, 0, 1024) 182 | ]); 183 | 184 | switch ($reverse->reverse_status) { 185 | case 'approved': 186 | return true; 187 | case 'processing': 188 | /* translators: 1) reverse status */ 189 | $order->add_order_note(sprintf(__('Refund Fondy status: %1$s', 'fondy-woocommerce-payment-gateway'), $reverse->reverse_status)); 190 | return true; 191 | case 'declined': 192 | $noteText = sprintf(__('Refund Fondy status: %1$s', 'fondy-woocommerce-payment-gateway'), $reverse->reverse_status); 193 | $order->add_order_note($noteText); 194 | throw new Exception($noteText); 195 | default: 196 | $noteText = sprintf(__('Refund Fondy status: %1$s', 'fondy-woocommerce-payment-gateway'), 'Unknown'); 197 | $order->add_order_note($noteText); 198 | throw new Exception($noteText); 199 | } 200 | } catch (Exception $e) { 201 | return new WP_Error('error', $e->getMessage()); 202 | } 203 | } 204 | 205 | public function getPaymentOptions() 206 | { 207 | $paymentOptions = parent::getPaymentOptions(); 208 | 209 | $paymentOptions['methods'] = ['card', 'wallets']; 210 | $paymentOptions['methods_disabled'] = ['banklinks_eu', 'local_methods']; 211 | $paymentOptions['active_tab'] = 'card'; 212 | 213 | return $paymentOptions; 214 | } 215 | 216 | /** 217 | * what can be seen on the Checkout page in the choice of payment method. 218 | * mb use later in seamless integration 219 | */ 220 | // public function payment_fields() 221 | // { 222 | // echo wpautop(wptexturize($this->description)); 223 | // } 224 | 225 | } 226 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/includes/payment-methods/class-wc-gateway-fondy-localmethods.php: -------------------------------------------------------------------------------- 1 | id = 'fondy_local_methods'; // payment gateway plugin ID 11 | $this->icon = ''; // URL of the icon that will be displayed on checkout page near your gateway name 12 | $this->has_fields = false; // in case you need a custom credit card form 13 | $this->method_title = 'Fondy Local Methods'; 14 | $this->method_description = sprintf( 15 | __('All other general Fondy settings can be adjusted here.', 'fondy-woocommerce-payment-gateway'), 16 | admin_url('admin.php?page=wc-settings&tab=checkout§ion=fondy') 17 | ); 18 | 19 | $this->init_form_fields(); 20 | 21 | // Load the settings. 22 | $this->init_settings(); 23 | $main_settings = get_option('woocommerce_fondy_settings'); 24 | $this->title = $this->get_option('title'); 25 | $this->description = $this->get_option('description'); 26 | $this->enabled = $this->get_option('enabled'); 27 | $this->integration_type = $this->get_option('integration_type') ? $this->get_option('integration_type') : false; 28 | $this->merchant_id = !empty($main_settings['merchant_id']) ? $main_settings['merchant_id'] : ''; 29 | $this->secret_key = !empty($main_settings['secret_key']) ? $main_settings['secret_key'] : ''; 30 | $this->test_mode = !empty($main_settings['test_mode']) && 'yes' === $main_settings['test_mode']; 31 | $this->redirect_page_id = !empty($main_settings['redirect_page_id']) ? $main_settings['redirect_page_id'] : false; 32 | $this->completed_order_status = !empty($main_settings['completed_order_status']) ? $main_settings['completed_order_status'] : false; 33 | $this->expired_order_status = !empty($main_settings['expired_order_status']) ? $main_settings['expired_order_status'] : false; 34 | $this->declined_order_status = !empty($main_settings['declined_order_status']) ? $main_settings['declined_order_status'] : false; 35 | 36 | parent::__construct(); 37 | } 38 | 39 | public function init_form_fields() 40 | { 41 | $this->form_fields = [ 42 | 'enabled' => [ 43 | 'title' => 'Enable/Disable', 44 | 'label' => 'Enable Fondy Local Methods Gateway', 45 | 'type' => 'checkbox', 46 | 'description' => '', 47 | 'default' => 'no' 48 | ], 49 | 'title' => [ 50 | 'title' => __('Title', 'fondy-woocommerce-payment-gateway'), 51 | 'type' => 'text', 52 | 'description' => __('This controls the title which the user sees during checkout', 'fondy-woocommerce-payment-gateway'), 53 | 'default' => __('Fondy Local Methods', 'fondy-woocommerce-payment-gateway'), 54 | 'desc_tip' => true, 55 | ], 56 | 'description' => [ 57 | 'title' => 'Description', 58 | 'type' => 'textarea', 59 | 'description' => __('This controls the description which the user sees during checkout', 'fondy-woocommerce-payment-gateway'), 60 | 'default' => __('Pay with your local bank with Fondy online payments.', 'fondy-woocommerce-payment-gateway'), 61 | ], 62 | 'integration_type' => [ 63 | 'title' => __('Payment integration type', 'fondy-woocommerce-payment-gateway'), 64 | 'type' => 'select', 65 | 'options' => $this->getIntegrationTypes(), 66 | 'description' => __('How the payment form will be displayed', 'fondy-woocommerce-payment-gateway'), 67 | 'desc_tip' => true 68 | ], 69 | ]; 70 | } 71 | 72 | public function getPaymentOptions() 73 | { 74 | $paymentOptions = parent::getPaymentOptions(); 75 | 76 | $paymentOptions['methods'] = ['local_methods']; 77 | $paymentOptions['methods_disabled'] = ['wallets', 'card', 'banklinks_eu']; 78 | $paymentOptions['active_tab'] = 'local_methods'; 79 | 80 | return $paymentOptions; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/languages/fondy-woocommerce-payment-gateway-ru_RU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/wordpress/1fc23d2b1489c9ce74d07888dd01c78923a3c2f7/woocommerce/fondy-woocommerce-payment-gateway/languages/fondy-woocommerce-payment-gateway-ru_RU.mo -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/languages/fondy-woocommerce-payment-gateway-ru_RU.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2021 Fondy - Unified Payment Platform 2 | # This file is distributed under the same license as the WooCommerce - Fondy payment gateway plugin. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: WooCommerce - Fondy payment gateway 3.0.0\n" 6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/fondy-woocommerce-payment-gateway\n" 7 | "Last-Translator: Dmytro Barybin \n" 8 | "Language-Team: Русский\n" 9 | "Language: ru_RU\n" 10 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && " 11 | "n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2);\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "POT-Creation-Date: 2021-08-25T16:52:55+03:00\n" 16 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 17 | "X-Generator: WP-CLI 2.4.0\n" 18 | "X-Domain: fondy-woocommerce-payment-gateway\n" 19 | 20 | #. Plugin Name of the plugin 21 | msgid "WooCommerce - Fondy payment gateway" 22 | msgstr "WooCommerce - платежный шлюз Fondy" 23 | 24 | #. Plugin URI of the plugin 25 | msgid "https://fondy.io/en/cms/wordpress/woocommerce/" 26 | msgstr "https://fondy.ru/cms/wordpress/woocommerce/" 27 | 28 | #. Description of the plugin 29 | msgid "Fondy Payment Gateway for WooCommerce." 30 | msgstr "Платежный шлюз Fondy для WooCommerce." 31 | 32 | #. Author of the plugin 33 | msgid "Fondy - Unified Payment Platform" 34 | msgstr "Fondy - Unified Payment Platform" 35 | 36 | #. Author URI of the plugin 37 | msgid "https://fondy.io" 38 | msgstr "https://fondy.ru" 39 | 40 | #: fondy-woocommerce-payment-gateway.php:100 41 | msgid "Settings" 42 | msgstr "Настройки" 43 | 44 | #. translators: 1) required WC version 2) current WC version 45 | #: fondy-woocommerce-payment-gateway.php:173 46 | msgid "Payment Gateway Fondy requires WooCommerce %1$s or greater to be installed and active. WooCommerce %2$s is no longer supported." 47 | msgstr "Для корректной работы платежного шлюза Fondy необходимо использовать WooCommerce %1$s и выше. WooCommerce %2$s больше не поддерживается." 48 | 49 | #. translators: 1) required PHP version 2) current PHP version 50 | #: fondy-woocommerce-payment-gateway.php:180 51 | msgid "The minimum PHP version required for Fondy Payment Gateway is %1$s. You are running %2$s." 52 | msgstr "Для корректной работы платежного шлюза Fondy требуется PHP версии %1$s и выше. Вы используете %2$s." 53 | 54 | #: includes/abstract-wc-fondy-payment-gateway.php:99 55 | msgid "Order №: " 56 | msgstr "Заказ №: " 57 | 58 | #: includes/abstract-wc-fondy-payment-gateway.php:319 59 | msgid "Embedded" 60 | msgstr "Форма на отдельной странице" 61 | 62 | #: includes/abstract-wc-fondy-payment-gateway.php:323 63 | msgid "Hosted" 64 | msgstr "Перенаправление" 65 | 66 | #: includes/abstract-wc-fondy-payment-gateway.php:327 67 | msgid "Seamless" 68 | msgstr "Встроенная форма" 69 | 70 | #: includes/abstract-wc-fondy-payment-gateway.php:372 71 | msgid "Default status" 72 | msgstr "Стандартный статус" 73 | 74 | #. translators: 1) fondy order status 2) fondy order id 75 | #: includes/abstract-wc-fondy-payment-gateway.php:415 76 | #: includes/abstract-wc-fondy-payment-gateway.php:420 77 | msgid "Transaction ERROR: order %1$s
Fondy ID: %2$s" 78 | msgstr "ОШИБКА транзакции: заказ %1$s
Fondy ID: %2$s" 79 | 80 | #: includes/abstract-wc-fondy-payment-gateway.php:424 81 | msgid "Unhandled fondy order status" 82 | msgstr "Unhandled fondy order status" 83 | 84 | #. translators: fondy order id 85 | #: includes/abstract-wc-fondy-payment-gateway.php:448 86 | msgid "Fondy payment successful.
Fondy ID: %1$s
" 87 | msgstr "Платеж успешен.
Fondy ID: %1$s
" 88 | 89 | #: includes/compat/class-wc-fondy-pre-orders-compat.php:40 90 | msgid "Fondy capture successful." 91 | msgstr "Fondy capture successful." 92 | 93 | #. translators: error message 94 | #: includes/compat/class-wc-fondy-pre-orders-compat.php:47 95 | msgid "Pre-order payment for order failed. Reason: %s" 96 | msgstr "Предварительная оплата заказа не удалась. Причина: %s" 97 | 98 | #: includes/compat/class-wc-fondy-pre-orders-compat.php:61 99 | msgid "Note: transactions by using Pre-Orders must be finished in 7 days term or it will be auto-captured." 100 | msgstr "Примечание: транзакции с использованием Pre-Orders должны быть завершены в течение 7 дней, иначе средства будут автоматически списаны." 101 | 102 | #: includes/compat/class-wc-fondy-subscriptions-compat.php:32 103 | msgid "Payment free trial verification" 104 | msgstr "Оплата пробной бесплатной версии" 105 | 106 | #: includes/compat/class-wc-fondy-subscriptions-compat.php:47 107 | msgid "You must be logged in." 108 | msgstr "Вы должны быть авторизованы." 109 | 110 | #. translators: error message 111 | #: includes/compat/class-wc-fondy-subscriptions-compat.php:146 112 | msgid "Subscription payment failed. Reason: %s" 113 | msgstr "Оплата подписки не прошла. Причина: %s" 114 | 115 | #: includes/integration-types/Fondy_Seamless.php:37 116 | msgid "Card Number:" 117 | msgstr "Номер карты:" 118 | 119 | #: includes/integration-types/Fondy_Seamless.php:43 120 | msgid "XXXXXXXXXXXXXXXX" 121 | msgstr "XXXXXXXXXXXXXXXX" 122 | 123 | #: includes/integration-types/Fondy_Seamless.php:49 124 | msgid "Expiry Date:" 125 | msgstr "Срок Действия: " 126 | 127 | #: includes/integration-types/Fondy_Seamless.php:52 128 | msgid "CVV2:" 129 | msgstr "CVV2:" 130 | 131 | #: includes/integration-types/Fondy_Seamless.php:68 132 | msgid "XXX" 133 | msgstr "XXX" 134 | 135 | #: includes/integration-types/Fondy_Seamless.php:74 136 | msgid "Pay" 137 | msgstr "Оплатить" 138 | 139 | #: includes/integration-types/Fondy_Seamless.php:91 140 | msgid "Place order" 141 | msgstr "Заказать" 142 | 143 | #. translators: link 144 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:15 145 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:16 146 | msgid "All other general Fondy settings can be adjusted here." 147 | msgstr "Все остальные общие настройки Fondy можно изменить тут. " 148 | 149 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:43 150 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:79 151 | msgid "Enable/Disable" 152 | msgstr "Включить/Выключить" 153 | 154 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:45 155 | msgid "Enable Fondy Bank Gateway" 156 | msgstr "Включить Fondy Bank Gateway" 157 | 158 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:47 159 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:83 160 | msgid "Show in the Payment List as a payment option" 161 | msgstr "Показать в списке платежей как способ оплаты" 162 | 163 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:51 164 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:95 165 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:51 166 | msgid "Title" 167 | msgstr "Заголовок" 168 | 169 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:53 170 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:97 171 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:53 172 | msgid "This controls the title which the user sees during checkout" 173 | msgstr "Заголовок который, видит пользователь в процессе оформления заказа" 174 | 175 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:54 176 | msgid "Fondy Online Banking" 177 | msgstr "Fondy Online Banking" 178 | 179 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:60 180 | msgid "Payments with online banking." 181 | msgstr "Платежи через онлайн банкинг." 182 | 183 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:61 184 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:105 185 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:60 186 | msgid "This controls the description which the user sees during checkout" 187 | msgstr "Описание которое видит пользователь в процессе оформления заказа" 188 | 189 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:65 190 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:121 191 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:64 192 | msgid "Payment integration type" 193 | msgstr "Тип интеграции" 194 | 195 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:68 196 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:124 197 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:67 198 | msgid "How the payment form will be displayed" 199 | msgstr "Каким образом будет отображаться форма оплаты" 200 | 201 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:24 202 | msgid "Card payments, Apple/Google Pay" 203 | msgstr "Оплата банковскими картами, Apple/Google Pay" 204 | 205 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:81 206 | msgid "Enable Fondy Gateway" 207 | msgstr "Включить Fondy Gateway" 208 | 209 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:87 210 | msgid "Test mode" 211 | msgstr "Тестовый режим" 212 | 213 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:89 214 | msgid "Enable Test Mode" 215 | msgstr "Включить тестовый режим" 216 | 217 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:91 218 | msgid "Place the payment gateway in test mode using test Merchant ID" 219 | msgstr "Перевести платежный шлюз в тестовый режим, используя тестовый Merchant ID" 220 | 221 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:98 222 | msgid "Fondy Cards, Apple/Google Pay" 223 | msgstr "Fondy Cards, Apple/Google Pay" 224 | 225 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:102 226 | msgid "Description:" 227 | msgstr "Описание:" 228 | 229 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:104 230 | msgid "Pay securely by Credit/Debit Card or by Apple/Google Pay with Fondy." 231 | msgstr "Безопасная оплата кредитной/дебетовой картой или Apple/Google Pay с помощью Fondy." 232 | 233 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:109 234 | msgid "Merchant ID" 235 | msgstr "Merchant ID" 236 | 237 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:111 238 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:117 239 | msgid "Given to Merchant by Fondy" 240 | msgstr "Выдается мерчанту Fondy" 241 | 242 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:115 243 | msgid "Secret Key" 244 | msgstr "Secret Key" 245 | 246 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:128 247 | msgid "Return Page" 248 | msgstr "Страница ответа" 249 | 250 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:130 251 | msgid "Default order page" 252 | msgstr "Стандартная страница возврата" 253 | 254 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:131 255 | msgid "URL of success page" 256 | msgstr "Страница куда будет направлен пользователь после оплаты" 257 | 258 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:135 259 | msgid "Payment completed order status" 260 | msgstr "Статус заказа при успешной оплате" 261 | 262 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:139 263 | msgid "The completed order status after successful payment" 264 | msgstr "Статус заказа после успешной оплаты" 265 | 266 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:143 267 | msgid "Payment expired order status" 268 | msgstr "Статус заказа платежа с истёкшим сроком" 269 | 270 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:147 271 | msgid "Order status when payment was expired" 272 | msgstr "Статус заказа при истечении срока платежа" 273 | 274 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:151 275 | msgid "Payment declined order status" 276 | msgstr "Статус заказа отклонённого платежа" 277 | 278 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:155 279 | msgid "Order status when payment was declined" 280 | msgstr "Статус заказа при отклонении платежа" 281 | 282 | #. translators: 1) reverse status 283 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:188 284 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:191 285 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:195 286 | msgid "Refund Fondy status: %1$s" 287 | msgstr "Статус возврата Fondy: %1$s" 288 | 289 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:54 290 | msgid "Fondy Local Methods" 291 | msgstr "Fondy Local Methods" 292 | 293 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:61 294 | msgid "Pay with your local bank with Fondy online payments." 295 | msgstr "Pay with your local bank with Fondy online payments." 296 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/languages/fondy-woocommerce-payment-gateway.pot: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2021 Fondy - Unified Payment Platform 2 | # This file is distributed under the same license as the WooCommerce - Fondy payment gateway plugin. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: WooCommerce - Fondy payment gateway 3.0.0\n" 6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/fondy-woocommerce-payment-gateway\n" 7 | "Last-Translator: Dmytro Barybin \n" 8 | "Language-Team: LANGUAGE \n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "POT-Creation-Date: 2021-08-25T16:52:55+03:00\n" 13 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 | "X-Generator: WP-CLI 2.4.0\n" 15 | "X-Domain: fondy-woocommerce-payment-gateway\n" 16 | 17 | #. Plugin Name of the plugin 18 | msgid "WooCommerce - Fondy payment gateway" 19 | msgstr "" 20 | 21 | #. Plugin URI of the plugin 22 | msgid "https://fondy.io/en/cms/wordpress/woocommerce/" 23 | msgstr "" 24 | 25 | #. Description of the plugin 26 | msgid "Fondy Payment Gateway for WooCommerce." 27 | msgstr "" 28 | 29 | #. Author of the plugin 30 | msgid "Fondy - Unified Payment Platform" 31 | msgstr "" 32 | 33 | #. Author URI of the plugin 34 | msgid "https://fondy.io" 35 | msgstr "" 36 | 37 | #: fondy-woocommerce-payment-gateway.php:100 38 | msgid "Settings" 39 | msgstr "" 40 | 41 | #. translators: 1) required WC version 2) current WC version 42 | #: fondy-woocommerce-payment-gateway.php:173 43 | msgid "Payment Gateway Fondy requires WooCommerce %1$s or greater to be installed and active. WooCommerce %2$s is no longer supported." 44 | msgstr "" 45 | 46 | #. translators: 1) required PHP version 2) current PHP version 47 | #: fondy-woocommerce-payment-gateway.php:180 48 | msgid "The minimum PHP version required for Fondy Payment Gateway is %1$s. You are running %2$s." 49 | msgstr "" 50 | 51 | #: includes/abstract-wc-fondy-payment-gateway.php:99 52 | msgid "Order №: " 53 | msgstr "" 54 | 55 | #: includes/abstract-wc-fondy-payment-gateway.php:319 56 | msgid "Embedded" 57 | msgstr "" 58 | 59 | #: includes/abstract-wc-fondy-payment-gateway.php:323 60 | msgid "Hosted" 61 | msgstr "" 62 | 63 | #: includes/abstract-wc-fondy-payment-gateway.php:327 64 | msgid "Seamless" 65 | msgstr "" 66 | 67 | #: includes/abstract-wc-fondy-payment-gateway.php:372 68 | msgid "Default status" 69 | msgstr "" 70 | 71 | #. translators: 1) fondy order status 2) fondy order id 72 | #: includes/abstract-wc-fondy-payment-gateway.php:415 73 | #: includes/abstract-wc-fondy-payment-gateway.php:420 74 | msgid "Transaction ERROR: order %1$s
Fondy ID: %2$s" 75 | msgstr "" 76 | 77 | #: includes/abstract-wc-fondy-payment-gateway.php:424 78 | msgid "Unhandled fondy order status" 79 | msgstr "" 80 | 81 | #. translators: fondy order id 82 | #: includes/abstract-wc-fondy-payment-gateway.php:448 83 | msgid "Fondy payment successful.
Fondy ID: %1$s
" 84 | msgstr "" 85 | 86 | #: includes/compat/class-wc-fondy-pre-orders-compat.php:40 87 | msgid "Fondy capture successful." 88 | msgstr "" 89 | 90 | #. translators: error message 91 | #: includes/compat/class-wc-fondy-pre-orders-compat.php:47 92 | msgid "Pre-order payment for order failed. Reason: %s" 93 | msgstr "" 94 | 95 | #: includes/compat/class-wc-fondy-pre-orders-compat.php:61 96 | msgid "Note: transactions by using Pre-Orders must be finished in 7 days term or it will be auto-captured." 97 | msgstr "" 98 | 99 | #: includes/compat/class-wc-fondy-subscriptions-compat.php:32 100 | msgid "Payment free trial verification" 101 | msgstr "" 102 | 103 | #: includes/compat/class-wc-fondy-subscriptions-compat.php:47 104 | msgid "You must be logged in." 105 | msgstr "" 106 | 107 | #. translators: error message 108 | #: includes/compat/class-wc-fondy-subscriptions-compat.php:146 109 | msgid "Subscription payment failed. Reason: %s" 110 | msgstr "" 111 | 112 | #: includes/integration-types/Fondy_Seamless.php:37 113 | msgid "Card Number:" 114 | msgstr "" 115 | 116 | #: includes/integration-types/Fondy_Seamless.php:43 117 | msgid "XXXXXXXXXXXXXXXX" 118 | msgstr "" 119 | 120 | #: includes/integration-types/Fondy_Seamless.php:49 121 | msgid "Expiry Date:" 122 | msgstr "" 123 | 124 | #: includes/integration-types/Fondy_Seamless.php:52 125 | msgid "CVV2:" 126 | msgstr "" 127 | 128 | #: includes/integration-types/Fondy_Seamless.php:68 129 | msgid "XXX" 130 | msgstr "" 131 | 132 | #: includes/integration-types/Fondy_Seamless.php:74 133 | msgid "Pay" 134 | msgstr "" 135 | 136 | #: includes/integration-types/Fondy_Seamless.php:91 137 | msgid "Place order" 138 | msgstr "" 139 | 140 | #. translators: link 141 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:15 142 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:16 143 | msgid "All other general Fondy settings can be adjusted here." 144 | msgstr "" 145 | 146 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:43 147 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:79 148 | msgid "Enable/Disable" 149 | msgstr "" 150 | 151 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:45 152 | msgid "Enable Fondy Bank Gateway" 153 | msgstr "" 154 | 155 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:47 156 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:83 157 | msgid "Show in the Payment List as a payment option" 158 | msgstr "" 159 | 160 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:51 161 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:95 162 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:51 163 | msgid "Title" 164 | msgstr "" 165 | 166 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:53 167 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:97 168 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:53 169 | msgid "This controls the title which the user sees during checkout" 170 | msgstr "" 171 | 172 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:54 173 | msgid "Fondy Online Banking" 174 | msgstr "" 175 | 176 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:60 177 | msgid "Payments with online banking." 178 | msgstr "" 179 | 180 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:61 181 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:105 182 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:60 183 | msgid "This controls the description which the user sees during checkout" 184 | msgstr "" 185 | 186 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:65 187 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:121 188 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:64 189 | msgid "Payment integration type" 190 | msgstr "" 191 | 192 | #: includes/payment-methods/class-wc-gateway-fondy-bank.php:68 193 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:124 194 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:67 195 | msgid "How the payment form will be displayed" 196 | msgstr "" 197 | 198 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:24 199 | msgid "Card payments, Apple/Google Pay" 200 | msgstr "" 201 | 202 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:81 203 | msgid "Enable Fondy Gateway" 204 | msgstr "" 205 | 206 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:87 207 | msgid "Test mode" 208 | msgstr "" 209 | 210 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:89 211 | msgid "Enable Test Mode" 212 | msgstr "" 213 | 214 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:91 215 | msgid "Place the payment gateway in test mode using test Merchant ID" 216 | msgstr "" 217 | 218 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:98 219 | msgid "Fondy Cards, Apple/Google Pay" 220 | msgstr "" 221 | 222 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:102 223 | msgid "Description:" 224 | msgstr "" 225 | 226 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:104 227 | msgid "Pay securely by Credit/Debit Card or by Apple/Google Pay with Fondy." 228 | msgstr "" 229 | 230 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:109 231 | msgid "Merchant ID" 232 | msgstr "" 233 | 234 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:111 235 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:117 236 | msgid "Given to Merchant by Fondy" 237 | msgstr "" 238 | 239 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:115 240 | msgid "Secret Key" 241 | msgstr "" 242 | 243 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:128 244 | msgid "Return Page" 245 | msgstr "" 246 | 247 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:130 248 | msgid "Default order page" 249 | msgstr "" 250 | 251 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:131 252 | msgid "URL of success page" 253 | msgstr "" 254 | 255 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:135 256 | msgid "Payment completed order status" 257 | msgstr "" 258 | 259 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:139 260 | msgid "The completed order status after successful payment" 261 | msgstr "" 262 | 263 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:143 264 | msgid "Payment expired order status" 265 | msgstr "" 266 | 267 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:147 268 | msgid "Order status when payment was expired" 269 | msgstr "" 270 | 271 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:151 272 | msgid "Payment declined order status" 273 | msgstr "" 274 | 275 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:155 276 | msgid "Order status when payment was declined" 277 | msgstr "" 278 | 279 | #. translators: 1) reverse status 280 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:188 281 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:191 282 | #: includes/payment-methods/class-wc-gateway-fondy-card.php:195 283 | msgid "Refund Fondy status: %1$s" 284 | msgstr "" 285 | 286 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:54 287 | msgid "Fondy Local Methods" 288 | msgstr "" 289 | 290 | #: includes/payment-methods/class-wc-gateway-fondy-localmethods.php:61 291 | msgid "Pay with your local bank with Fondy online payments." 292 | msgstr "" 293 | 294 | #. translators: order id 295 | #: includes/compat/class-wc-fondy-subscriptions-compat.php:136 296 | msgid "Recurring payment for: %s" 297 | msgstr "" 298 | -------------------------------------------------------------------------------- /woocommerce/fondy-woocommerce-payment-gateway/uninstall.php: -------------------------------------------------------------------------------- 1 |