From 4ce15ee2ed5807825f0232d721790977e1f1c79e Mon Sep 17 00:00:00 2001 From: Matthias Reuter Date: Sun, 28 Jun 2015 22:10:27 +0200 Subject: [PATCH] 1.10.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Common: Integration of PayFrame to enable use of SAQ A for easier PCI DSS 3.0 compliance. PayFrame We’ve introduced a “payment form” option for easier compliance with PCI requirements. In addition to having a payment form directly integrated in your checkout page, you can use our embedded PayFrame solution to ensure that payment data never touches your website. PayFrame is enabled by default, but you can choose between both options in the plugin settings. Later this year, we’re bringing you the ability to customise the appearance and text content of the PayFrame version. To learn more about the benefits of PayFrame, please visit our FAQ: https://www.paymill.com/en/faq/howdoespaymillspayframesolutionwork --- CHANGES.md | 37 +++ README.md | 6 +- lib/config.inc.php | 19 +- lib/css/paymill.css | 4 +- lib/img/logos/dc.png | Bin 2595 -> 2709 bytes lib/img/payment_logos.png | Bin 19704 -> 18847 bytes lib/integration/cart66.inc.php | 10 +- lib/integration/magicmembers.inc.php | 2 + lib/integration/marketpress.inc.php | 2 + lib/integration/pay_button.inc.php | 10 +- lib/integration/shopplugin.inc.php | 2 + lib/integration/subscriptions.inc.php | 7 +- lib/integration/woocommerce.inc.php | 14 +- lib/js/livevalidation_custom.js | 64 ++-- lib/js/paymill.js | 156 +++++++--- lib/scripts.inc.php | 6 +- lib/tpl/checkout_form.php | 27 +- lib/translate/paymill-de_DE.mo | Bin 22946 -> 23423 bytes lib/translate/paymill-de_DE.po | 429 ++++++++++++++------------ lib/translate/paymill-en_US.mo | Bin 21333 -> 21609 bytes lib/translate/paymill-en_US.po | 418 +++++++++++++------------ lib/translate/paymill-fr_FR.mo | Bin 23178 -> 23707 bytes lib/translate/paymill-fr_FR.po | 427 +++++++++++++------------ manual_de.pdf | Bin 369410 -> 385258 bytes manual_en.pdf | Bin 365258 -> 379740 bytes paymill.php | 6 +- readme.txt | 65 +++- 27 files changed, 1017 insertions(+), 694 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c17babe..b6e042e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,43 @@ Changelog ========= + +1.10.3 +----- +* Common: Integration of PayFrame to enable use of SAQ A for easier PCI DSS 3.0 compliance. + +PayFrame +We’ve introduced a “payment form” option for easier compliance with PCI requirements. + +In addition to having a payment form directly integrated in your checkout page, you +can use our embedded PayFrame solution to ensure that payment data never +touches your website. + +PayFrame is enabled by default, but you can choose between both options in the +plugin settings. Later this year, we’re bringing you the ability to customise the +appearance and text content of the PayFrame version. + +To learn more about the benefits of PayFrame, please visit our FAQ: +https://www.paymill.com/en/faq/howdoespaymillspayframesolutionwork + +1.10.2 +----- +* Subscriptions: "required_offer_or_amount_and_currency_and_interval" error fixed + +1.10.1 +----- +* WooCommerce: Error Management Fix +* Common: Checkout Form fix + + +1.10.0 +----- +* WooCommerce: Error Management on Checkout fixed +* WooCommerce: Subscription Handling reviewed and optimized +* Common: Support for PCI DSS 3.0 (iframe-based credit card form) +* WooCommerce: Several improvements and bugfixes + + 1.9.0 ----- * Common: Update to v2.1 Paymill API diff --git a/README.md b/README.md index 398ff05..4d8ed14 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ PAYMILL for WordPress * Contributors: Matthias Reuter * Donate link: * Tags: paymill, creditcard, elv, payment, woocommerce, paybutton, ecommerce, debitcard, subscriptions -* Requires at least: 4.1 -* Tested up to: 4.1.1 -* Stable tag: 1.9 +* Requires at least: 4.2.2 +* Tested up to: 4.2.2 +* Stable tag: 1.10.3 * License: [GPLv3 or later](http://www.gnu.org/licenses/gpl-3.0.html) With PAYMILL you are able to provide credit card based payments for your customers. diff --git a/lib/config.inc.php b/lib/config.inc.php index 122c68d..fb108dd 100644 --- a/lib/config.inc.php +++ b/lib/config.inc.php @@ -113,6 +113,7 @@ public function paymill_register_general_settings(){ 'api_key_public' => __('Paymill PUBLIC API key', 'paymill'), 'payments_display' => __('Display Payment Types', 'paymill'), 'no_default_css' => __('Do not load default CSS', 'paymill'), + 'pci_dss_3' => __('Deactivate PCI DSS 3.0 Compatibility', 'paymill'), ); foreach($settings as $setting => $description){ @@ -282,7 +283,7 @@ private function print_config_form_fields($args) { $descriptions['products_desc'] = __('Detailed description of the product', 'paymill'); $descriptions['products_price'] = __('Gross Price of the product, e.g. 40 or 6.99', 'paymill'); $descriptions['products_offer'] = __('If you have created a subscription in your Paymill Cockpit, you can select it here. If selected, it will overwrite the following settings for this product. Important: For Performance purposes, subscription plans will be cached. Open this page to recache it.', 'paymill'); - $descriptions['products_vat'] = __('Value-Added-Tax Rate in % for the product, e.g. 19 or 7', 'paymill'); + $descriptions['products_vat'] = __('Value-Added-Tax Rate in % for the product, e.g. 19 or 7', 'paymill'); $descriptions['products_delivery'] = __('Delivery Time of the product, e.g. 2 Days or 1 Week', 'paymill'); $descriptions['products_quantityhide'] = __('Hide quantity select field, quantity will be set to 1', 'paymill'); $descriptions['products_freeamount'] = __('Allow free amounts (donation feature)', 'paymill'); @@ -351,7 +352,14 @@ private function print_config_form_fields($args) { value="1" class="regular-text code" '.($value ? 'checked="checked"' : '').' /> '; - }elseif($args['desc'] == 'fields_show'){ + }elseif($args['desc'] == 'pci_dss_3'){ // pci_dss_3 + echo ' + + '; + }elseif($args['desc'] == 'fields_show'){ echo __('You may want to gather some additional information from your customers. Select them here:', 'paymill').'
'; $fields_show = array( @@ -433,20 +441,21 @@ private function paymill_do_settings_fields($page, $section){ $descriptions['thankyou_url'] = __('Redirect URL for custom thank your page.', 'paymill'); $descriptions['no_default_css'] = __('Advanced users want to fully customize the payment button. Disabling default CSS from Pay Button will make that much easier.', 'paymill'); + $descriptions['pci_dss_3'] = __('Please ask Paymill customer support for further information.', 'paymill'); $descriptions['currency'] = __('Currency, ISO 4217 e.g. "EUR" or "GBP"', 'paymill'); - $descriptions['currency_format'] = __('Currency Format - use the following variables: %n = number, %s = symbol.', 'paymill'); + $descriptions['currency_format'] = __('Currency Format - use the following variables: %n = number, %s = symbol.', 'paymill'); $descriptions['api_key_private'] = __('Insert your Paymill PRIVATE API key.', 'paymill'); $descriptions['api_key_public'] = __('Insert your Paymill PUBLIC API key.', 'paymill'); $descriptions['flat_shipping_country'] = __('Name of the available delivery country, e.g. England', 'paymill'); $descriptions['flat_shipping_costs'] = __('Gross fee for the flat shipping costs., e.g. 7 or 4.90', 'paymill'); - $descriptions['flat_shipping_vat'] = __('Value-Added-Tax Rate in % for the flat shipping costs., e.g. 19 or 7', 'paymill'); + $descriptions['flat_shipping_vat'] = __('Value-Added-Tax Rate in % for the flat shipping costs., e.g. 19 or 7', 'paymill'); $descriptions['products_title'] = __('Name of the product', 'paymill'); $descriptions['products_desc'] = __('Detailed description of the product', 'paymill'); $descriptions['products_price'] = __('Gross Price of the product, e.g. 40 or 6.99', 'paymill'); $descriptions['products_offer'] = __('If you have created a subscription in your Paymill Cockpit, can select it here. If selected, it will overwrite the following settings for this product. Important: For Performance purposes, subscription plans will be cached. Open this page to recache it.', 'paymill'); - $descriptions['products_vat'] = __('Value-Added-Tax Rate in % for the product, e.g. 19 or 7', 'paymill'); + $descriptions['products_vat'] = __('Value-Added-Tax Rate in % for the product, e.g. 19 or 7', 'paymill'); $descriptions['products_delivery'] = __('Delivery Time of the product, e.g. 2 Days or 1 Week', 'paymill'); $descriptions['products_quantityhide'] = __('Hide quantity select field, quantity will be set to 1', 'paymill'); $descriptions['products_freeamount'] = __('Allow free amounts (donation feature)', 'paymill'); diff --git a/lib/css/paymill.css b/lib/css/paymill.css index eaec1b4..2a4f01a 100644 --- a/lib/css/paymill.css +++ b/lib/css/paymill.css @@ -83,7 +83,6 @@ background-image:url('../img/payment_logos.png'); background-repeat:no-repeat; background-position:0px 30px; - font-size:90%; } #paymill_framebox img{ box-shadow:none !important; @@ -131,6 +130,9 @@ paymill_#form_credit, paymill_#form_elv{ .paymill_payment_logos{ margin-bottom:10px; } +.paymill_payment_logos img{ + display:inline; +} /* error box */ .paymill_payment_errors{ diff --git a/lib/img/logos/dc.png b/lib/img/logos/dc.png index 9ab801722c4c034fdc544f9d9731fb980c59fee2..911a4b2e2ddede89e8d7ccf316d1c76cada2de2d 100644 GIT binary patch literal 2709 zcmZ`*3piBi8y^~D3^GlwwKUBNxy+2q_%p^RGvpG(kex1DGiHvAh8c5NlnN!0YskM` zN-oj1)b@94R-t6DDN?8wS!Ih-WMy;N8Ennp)1K!!=X~dVf4}ed{@(9==Q)W!-rLk+ z>tG-dNZs9yOqJe|(o+)(kzU6#oG2iWf)<-Z@^L4TkUo5F5Ss&lKqeVXI-TlfZX#hI z=yb_Fv&}Gm1oh;}WGemE{f4H7MkMq&HLDOEv%sAkt#b3iQ_`Pa{AiTShFR~0L= zx`$ZEIpverGgXs3bai#DV>mA+PAkI2$`Wn&Hpq3Im|mAH%8Grvw~Ps)pTIQrv)P627dJrTPIo6E;BWHw z`RvR(Ti|?14ta&28~4#VMrvBz-I;Fsbtq>y7b8r6)Y6; z@EA-)Le^gRw+oF<+wrk?en=$uj>+V=+Iw;)(d2 zMNcdy2H*gpK$uV<2gAP`7tMBFk(KDH81`yxZM#9@~i^3jzH3ZE^t%8(UCv|Pr^$5!HZ zepNv}D#wsDAMeAC1UNJ@TiVh^AJ$UuUrnqelDHf$-;c*&0q2ZUqf!UW7$(FEzcfcN6E*g;Wbh7cfHVJ&fZ ztPS20i?pY{*q-1RP+3vUkgB);kO4s>u|Ww^08 zl!`M+K`9yDDKu3K-?C@0Nkv8FeG6|mE`5-SPC0H0zDQN|_eX_XC@J*Tr~XH!{Gp-u zP@3Jf`s#>C?qh@T$Bg2>{HV#BFY5;miJt@nwV*XU;P7?lNIf>a)iI@J)KO^MEArdd z6Az!-Prt%n*`AC&k(a~`p zkDTlG=5(Z{=50K7BVpvIZJYN*CsX%CrC(XVkBuXfQN!_96N4^9`ZrD7#*tAQ$xV)3 zvDuGAv%FD*{zC^=kMD{4egd~noeOqbKhTd=E6GV-H5~8td}2Go2%%y0Fms}@Xb<|- z?wawWJvWilZ(DX9^b6K;TD$MaWd5l!Nfor(V#;*4S^57`Sg&oAUwi2_n@xL88zj|_ z#a?)KimP)3bN>}WF zjc+*(@v720h0b&^&fZau0I3#X)MI0(pN42-)TT(6x`Zd%FBeh!o(pbgD*_pwb(<|R zeqAjRi5d;NgQhj!cP4P#O$XZml4_4rb6ujPIog6bI-*$-J)fvK5*&3fw#dIPWA}Gj z>H7P-M{&DMt~^NU@mI=Dsy#fS5&qxy_WDoP&h)46csKQE{Cn263YTEJ9S@$sAcdVb z4>)N1kDDrvZJNThu~+@38Q*u-eKtQjnMX+vf=;>Wmmjqa|Gno^?M!n^?d;1u0p%bb z#Mu`6R^j85ABw|L8{%8P%YtKUZ6CKPs2BRAJL_k}z`$_^1$zolhE%z}$+;A-lc1bf z33;3TOyW_3=qPYB_DgRixKJp%oxxe6GEKs+!;1M$qrSi9=I878jkdployo~5X_}ie zk1WW`8+`W;bmY9NAM)|~raK>@S3>m4yG;>^;HKx$i8=zmj&!;z{r<=d)y`BuiqkpW zvdURhHcA95DkR0EHa8FChVIO4gT*V}ZE4A9Wx>;0u8GA7XFaV=sN|3jTZbg^J=rf#6qk+In<#N=esq2D#L+K$|F&WoFwiOMQlP-fo)0?f4mle$U` zH8r=9q~Y$~-gXns2}#g(1ZLLadEmuA)gRix)gYZcJ(bCmaY$Hb{I2)iQ5XonF7NK9 zJ2RC5Kl(3du_ZR!5kCVSH^gE<1yP*qF|(HAxfkt~`4{Atp2m?|=ReTAwmDlUU?F8N zLQGCub&WNGoZ*&r-0KzCEU-u{7V8=qoUu3fW?k`aonp14FH+OeTFcUS@NM{fS99&m zOuxo8!zSQkg{8MUJbNfJC$86U@<<*1*BSGg)uhryiGPo(yQlNH3f5RuH zH4ka7**Y_D>AaSz!?4}LaINydZ-X0>Mq0+k#wHD`&KDGv;>=zr=LOht1| zxzlx1zVkM@VfT^jX`z)ndh(}_IVnX&;kPawR+U5>^$h3!VlkdeplWoMQ?rbHFP~We XscHkODe2`7vi~A?7jJTfGd=Ea*BL-8 literal 2595 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 FV1f}D0-FE; diff --git a/lib/img/payment_logos.png b/lib/img/payment_logos.png index bc474e5e3de94f28f0e775c7d0b0a2b27cf05eea..8e9255e1cade7effe64bfa417fdb83acbcb0f30f 100644 GIT binary patch delta 18273 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 delta 19119 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['pci_dss_3']) || $GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3'] != '1') ? 1 : 0).'; + paymill_pcidss3_lang = "'.substr(apply_filters('plugin_locale', get_locale(), $domain),0,2).'"; '; @@ -163,7 +165,7 @@ private function processProducts(){ )); $this->transaction_id = $response['body']['data']['id']; - + return true; }else{ // total is zero, so just return true @@ -193,6 +195,7 @@ private function process_payment(){ // process subscriptions & products if($this->processProducts()){ // success + return true; }else{ if($GLOBALS['paymill_loader']->paymill_errors->status()){ $GLOBALS['paymill_loader']->paymill_errors->getErrors(); @@ -239,7 +242,6 @@ public function getCreditCardTypes() { public function initCheckout($total) { $this->_total = $total; - $this->process_payment(); } public function getTransactionResponseDescription() { @@ -247,8 +249,8 @@ public function getTransactionResponseDescription() { } public function doSale() { - return $this->transaction_id; + $this->process_payment(); + return $this->transaction_id; } - } } \ No newline at end of file diff --git a/lib/integration/magicmembers.inc.php b/lib/integration/magicmembers.inc.php index a2a5eb4..ebbbdb4 100644 --- a/lib/integration/magicmembers.inc.php +++ b/lib/integration/magicmembers.inc.php @@ -1427,6 +1427,8 @@ function process_html_redirect(){ paymill_form_checkout_id = ".checkout"; paymill_form_checkout_submit_id = "#place_order"; paymill_shop_name = "magicmembers"; + paymill_pcidss3 = '.((empty($GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3']) || $GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3'] != '1') ? 1 : 0).'; + paymill_pcidss3_lang = "'.substr(apply_filters('plugin_locale', get_locale(), $domain),0,2).'"; '; echo '
'; diff --git a/lib/integration/marketpress.inc.php b/lib/integration/marketpress.inc.php index c244d6d..35e491b 100644 --- a/lib/integration/marketpress.inc.php +++ b/lib/integration/marketpress.inc.php @@ -201,6 +201,8 @@ function payment_form($global_cart, $shipping_info) { paymill_form_checkout_id = "#mp_payment_form"; paymill_form_checkout_submit_id = "#mp_payment_confirm"; paymill_shop_name = "marketpress"; + paymill_pcidss3 = '.((empty($GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3']) || $GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3'] != '1') ? 1 : 0).'; + paymill_pcidss3_lang = "'.substr(apply_filters('plugin_locale', get_locale(), $domain),0,2).'"; '; echo do_shortcode($mp->get_setting('gateways->paymill-for-wordpress->instructions')); diff --git a/lib/integration/pay_button.inc.php b/lib/integration/pay_button.inc.php index 90bb3fa..383388e 100644 --- a/lib/integration/pay_button.inc.php +++ b/lib/integration/pay_button.inc.php @@ -304,6 +304,8 @@ function widget($args, $instance){ paymill_form_checkout_id = ".checkout"; paymill_form_checkout_submit_id = "#place_order"; paymill_shop_name = "paybutton"; + paymill_pcidss3 = '.((empty($GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3']) || $GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3'] != '1') ? 1 : 0).'; + paymill_pcidss3_lang = "'.substr(apply_filters('plugin_locale', get_locale(), $domain),0,2).'"; '; if($this->subscriptions === false){ @@ -365,9 +367,11 @@ function form($instance) { "); + paymill_youshallpass = true; + form.submit(); } + }); + }else{ + if (false == paymill.validateCardNumber(jQuery('#paymill_card_number').val())) { + jQuery(".paymill_payment_errors").text(paymill_lang.validateCardNumber); jQuery(paymill_form_checkout_submit_id).show(); - }else{ - - - jQuery(".paymill_payment_errors").text(""); - var form = jQuery(paymill_form_checkout_id); + return false; + } - // insert token into form - var token = result.token; - form.append(""); - paymill_youshallpass = true; - form.submit(); + if (false == paymill.validateExpiry(jQuery('#paymill_card_expiry_month').val(), jQuery('#paymill_card_expiry_year').val())) { + jQuery(".paymill_payment_errors").text(paymill_lang.validateExpiry); + jQuery(paymill_form_checkout_submit_id).show(); + return false; } - if(paymill_shop_name == 'shopplugin'){ + + if (false == paymill.validateCvc(jQuery('#paymill_card_cvc').val())) { + jQuery(".paymill_payment_errors").text(paymill_lang.validateCvc); jQuery(paymill_form_checkout_submit_id).show(); + return false; } - }); - }else if(jQuery('#paymill_form_sepa').is(':visible') || jQuery('#paymill_sepa_iban').val() != '' && (jQuery('#payment_method_paymill').is(':checked') || jQuery('.wgm-second-checkout input[name=payment_method]').val() == 'paymill')){ + + paymill.createToken({ + number:jQuery('#paymill_card_number').val(), + exp_month:jQuery('#paymill_card_expiry_month').val(), + exp_year:jQuery('#paymill_card_expiry_year').val(), + cvc:jQuery('#paymill_card_cvc').val(), + cardholder:jQuery('#paymill_holdername_c').val(), + amount_int:jQuery('.paymill_amount').val(), + currency:jQuery('.paymill_currency').val() + }, function (error, result) { + if(error){ + // shows error + if(typeof paymill_lang[error.apierror] != 'undefined'){ + jQuery(".paymill_payment_errors").text(paymill_lang[error.apierror]); + }else{ + jQuery(".paymill_payment_errors").text(error.apierror); + } + jQuery(paymill_form_checkout_submit_id).show(); + }else{ + jQuery(".paymill_payment_errors").text(""); + var form = jQuery(paymill_form_checkout_id); + + // insert token into form + var token = result.token; + form.append(""); + paymill_youshallpass = true; + form.submit(); + } + if(paymill_shop_name == 'shopplugin'){ + jQuery(paymill_form_checkout_submit_id).show(); + } + }); + } + }else if(jQuery('#paymill_form_sepa').is(':visible') || (jQuery('#paymill_sepa_iban').length > 0 && jQuery('#paymill_sepa_iban').val() != '') && (jQuery('#payment_method_paymill').is(':checked') || jQuery('.wgm-second-checkout input[name=payment_method]').val() == 'paymill')){ if (false == paymill.validateIban(jQuery('#paymill_sepa_iban').val())) { jQuery(".paymill_payment_errors").text(paymill_lang.validateIBAN); jQuery(paymill_form_checkout_submit_id).show(); @@ -117,7 +175,7 @@ jQuery(document).ready(function () { paymill.createToken({ iban:jQuery('#paymill_sepa_iban').val(), bic:jQuery('#paymill_sepa_bic').val(), - accountholder:jQuery('#paymill_holdername').val(), + accountholder:jQuery('#paymill_holdername_s').val(), amount_int:jQuery('.paymill_amount').val(), currency:jQuery('.paymill_currency').val() }, function (error, result) { @@ -140,7 +198,7 @@ jQuery(document).ready(function () { form.submit(); } }); - }else if(jQuery('#paymill_form_elv').is(':visible') || jQuery('#paymill_elv_number').val() != '' && (jQuery('#payment_method_paymill').is(':checked') || jQuery('.wgm-second-checkout input[name=payment_method]').val() == 'paymill')){ + }else if(jQuery('#paymill_form_elv').is(':visible') || (jQuery('#paymill_elv_number').length > 0 && jQuery('#paymill_elv_number').val() != '') && (jQuery('#payment_method_paymill').is(':checked') || jQuery('.wgm-second-checkout input[name=payment_method]').val() == 'paymill')){ if (false == paymill.validateAccountNumber(jQuery('#paymill_elv_number').val())) { jQuery(".paymill_payment_errors").text(paymill_lang.validateAccountNumber); jQuery(paymill_form_checkout_submit_id).show(); @@ -156,7 +214,7 @@ jQuery(document).ready(function () { paymill.createToken({ number:jQuery('#paymill_elv_number').val(), bank:jQuery('#paymill_elv_bank_code').val(), - accountholder:jQuery('#paymill_holdername').val(), + accountholder:jQuery('#paymill_holdername_e').val(), amount_int:jQuery('.paymill_amount').val(), currency:jQuery('.paymill_currency').val() }, function (error, result) { diff --git a/lib/scripts.inc.php b/lib/scripts.inc.php index 1d027f3..6ca1dbe 100644 --- a/lib/scripts.inc.php +++ b/lib/scripts.inc.php @@ -31,7 +31,11 @@ function paymill_load_frontend_scripts(){ if(paymill_BENCHMARK)paymill_doBenchmark(true,'paymill_load_frontend_scripts'); // benchmark wp_deregister_script(array('paymill_bridge','paymill_bridge_custom')); wp_enqueue_script('jquery.formatCurrency-1.4.0.js',PAYMILL_PLUGIN_URL.'lib/js/jquery.formatCurrency-1.4.0.js', array('jquery'), PAYMILL_VERSION); - wp_enqueue_script('paymill_bridge', 'https://bridge.paymill.de/', array('jquery'), PAYMILL_VERSION); + if(empty($GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3']) || $GLOBALS['paymill_settings']->paymill_general_settings['pci_dss_3'] != '1'){ + wp_enqueue_script('paymill_bridge', 'https://bridge.paymill.com/dss3', array('jquery'), PAYMILL_VERSION); + }else{ + wp_enqueue_script('paymill_bridge', 'https://bridge.paymill.de/', array('jquery'), PAYMILL_VERSION); + } wp_localize_script('paymill_bridge', 'paymill_lang', array( 'validateCardNumber' => esc_attr__('Invalid Credit Card Number', 'paymill'), 'validateExpiry' => esc_attr__('Invalid Expiration Date', 'paymill'), diff --git a/lib/tpl/checkout_form.php b/lib/tpl/checkout_form.php index f5c422f..9c7a14a 100644 --- a/lib/tpl/checkout_form.php +++ b/lib/tpl/checkout_form.php @@ -55,14 +55,15 @@ } echo '
'.__('ELV', 'paymill').'
'; } - ?> -
- -
-