From e6e369a9597b37341e807399b07c496c41d06e15 Mon Sep 17 00:00:00 2001 From: paeddl Date: Thu, 26 Feb 2026 10:10:22 +0100 Subject: [PATCH] v2.1.0 --- assets/build/unzer_apple_pay_v2.asset.php | 2 +- assets/build/unzer_apple_pay_v2.js | 2 +- assets/build/unzer_card.asset.php | 2 +- assets/build/unzer_card.js | 2 +- assets/build/unzer_direct_debit.asset.php | 2 +- assets/build/unzer_direct_debit.js | 2 +- .../unzer_direct_debit_secured.asset.php | 2 +- assets/build/unzer_direct_debit_secured.js | 2 +- assets/build/unzer_global.asset.php | 2 +- assets/build/unzer_global.js | 2 +- assets/build/unzer_google_pay.asset.php | 2 +- assets/build/unzer_google_pay.js | 2 +- assets/build/unzer_installment.asset.php | 2 +- assets/build/unzer_installment.js | 2 +- assets/build/unzer_invoice.asset.php | 2 +- assets/build/unzer_invoice.js | 2 +- assets/build/unzer_simple.asset.php | 2 +- assets/build/unzer_simple.js | 2 +- assets/css/admin.css | 12 + assets/css/block-checkout.css | 3 + assets/js/admin_webhook_management.js | 8 +- assets/js/checkout.js | 12 +- .../payment_methods/unzer_apple_pay_v2.jsx | 23 +- .../src/payment_methods/unzer_google_pay.jsx | 22 +- assets/src/unzer_global.jsx | 298 +++++--- assets/src/util/on-payment-setup-factory.jsx | 32 +- assets/src/util/register-simple-method.jsx | 6 +- assets/src/util/simple-methods.jsx | 1 + html/admin/webhooks.php | 2 +- includes/Main.php | 2 +- includes/controllers/AdminController.php | 7 +- includes/gateways/AbstractGateway.php | 52 +- includes/gateways/Blocks/AbstractBlock.php | 10 +- includes/gateways/Blocks/GooglePayBlock.php | 8 + includes/gateways/Blocks/PaypalBlock.php | 2 - includes/gateways/DirectDebitSecured.php | 3 + includes/gateways/GooglePay.php | 20 + includes/gateways/Installment.php | 3 + includes/gateways/Invoice.php | 3 + includes/gateways/Paypal.php | 2 +- includes/gateways/Wero.php | 18 +- .../services/WebhookManagementService.php | 11 +- languages/unzer-payments-de_AT.mo | Bin 15862 -> 16332 bytes languages/unzer-payments-de_AT.po | 2 +- languages/unzer-payments-de_DE.l10n.php | 2 +- languages/unzer-payments-de_DE.mo | Bin 15489 -> 14250 bytes languages/unzer-payments-de_DE.po | 719 +++++++++--------- languages/unzer-payments-de_DE_formal.mo | Bin 15869 -> 16347 bytes languages/unzer-payments-de_DE_formal.po | 2 +- package.json | 2 +- readme.txt | 17 +- unzer-payments.php | 14 +- 52 files changed, 775 insertions(+), 579 deletions(-) create mode 100644 assets/css/block-checkout.css diff --git a/assets/build/unzer_apple_pay_v2.asset.php b/assets/build/unzer_apple_pay_v2.asset.php index 7068254..867a1a1 100644 --- a/assets/build/unzer_apple_pay_v2.asset.php +++ b/assets/build/unzer_apple_pay_v2.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-element', 'wp-html-entities' ), - 'version' => '11275690762e1158d528', + 'version' => '916afb7af7c9d1103569', ); diff --git a/assets/build/unzer_apple_pay_v2.js b/assets/build/unzer_apple_pay_v2.js index 6c22c1c..5c21ce7 100644 --- a/assets/build/unzer_apple_pay_v2.js +++ b/assets/build/unzer_apple_pay_v2.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,i="apple_pay_v2",p=(0,s.getSetting)("unzer_"+i+"_data",{}),c=p.title||i,a=p.id||i,r=p?.description||"",m=p?.publicKey||"",u=p?.locale||"",d=p.paymentComponentId||a+"-payment-component",R=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const n=document.getElementById(e);n||console.error("unzer payment component does not exist: "+e);const o=await n.submit();if(o.submitResponse){if(!0===o.submitResponse.success){const e={};e.unzer_nonce=s.nonce,e["unzer-apple-pay-v2-id"]=o.submitResponse.data.id;const n={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("submit response: ",o.submitResponse,n),n}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 1"}}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 2"}}catch(e){return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 3"}}}}(d,0,n,p));return e},[s]),(0,t.jsxs)("div",{children:[r&&(0,t.jsx)("p",{children:r}),(0,t.jsx)("unzer-payment",{id:d,publicKey:m,locale:u,children:(0,t.jsx)("unzer-apple-pay",{})})]})};!function(s,o,i){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:i,edit:i,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,c,(0,t.jsx)(R,{}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,r="apple_pay_v2",c=(0,s.getSetting)("unzer_"+r+"_data",{}),a=c.title||r,p=c.id||r,i=c?.description||"",m=c?.publicKey||"",d=c?.locale||"",u=c.paymentComponentId||p+"-payment-component",y=c.checkoutComponentId||p+"-checkout-component",l=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const o=document.getElementById(e);if(o||console.error("unzer payment component does not exist: "+e),o.woocommercePaymentTypeId){const e={};e.unzer_nonce=s.nonce,e[n]=o.woocommercePaymentTypeId;const r={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("return previously generated type id (button payment methods)",r),r}const r=await o.submit();if(r.submitResponse){if(!0===r.submitResponse.success){const e={};return e.unzer_nonce=s.nonce,e[n]=r.submitResponse.data.id,{type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}}}return{type:t?.responseTypes?.ERROR,message:r.submitResponse.message||"General Error"}}return{type:t?.responseTypes?.ERROR,message:"General Error 002"}}catch(e){return{type:t?.responseTypes?.ERROR,message:e.message||e.name||"General Error 003"}}}}(u,"unzer-apple-pay-v2-id",n,c));return e},[s]),(0,t.jsxs)("div",{children:[i&&(0,t.jsx)("p",{children:i}),(0,t.jsx)("div",{style:{display:"none"},children:(0,t.jsxs)("div",{id:u+"-container-for-button",children:[(0,t.jsx)("unzer-payment",{id:u,publicKey:m,locale:d,children:(0,t.jsx)("unzer-apple-pay",{})}),(0,t.jsx)("unzer-checkout",{id:y})]})})]})};!function(s,o,r){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:r,edit:r,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(p,a,(0,t.jsx)(l,{}))})(); \ No newline at end of file diff --git a/assets/build/unzer_card.asset.php b/assets/build/unzer_card.asset.php index becffaa..6dfb35f 100644 --- a/assets/build/unzer_card.asset.php +++ b/assets/build/unzer_card.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-element', 'wp-html-entities' ), - 'version' => '3cff6bed3cc968bbf96f', + 'version' => '63fd7aaf04a14116e59a', ); diff --git a/assets/build/unzer_card.js b/assets/build/unzer_card.js index 0080402..c2b6961 100644 --- a/assets/build/unzer_card.js +++ b/assets/build/unzer_card.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,c="card",i=(0,s.getSetting)("unzer_card_data",{}),r=i.title||c,a=i.id||c,p=i?.description||"",d=i?.publicKey||"",m=(i?.locale||"")+(new Date).getMilliseconds(),u=i.paymentComponentId||a+"-payment-component",R=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const n=document.getElementById(e);n||console.error("unzer payment component does not exist: "+e);const o=await n.submit();if(o.submitResponse){if(!0===o.submitResponse.success){const e={};e.unzer_nonce=s.nonce,e["unzer-card-id"]=o.submitResponse.data.id;const n={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("submit response: ",o.submitResponse,n),n}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 1"}}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 2"}}catch(e){return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 3"}}}}(u,0,n,i));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("unzer-payment",{id:u,publicKey:d,locale:m,children:(0,t.jsx)("unzer-card",{})})]})};!function(s,o,c){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:c,edit:c,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,r,(0,t.jsx)(R,{}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,r="card",c=(0,s.getSetting)("unzer_card_data",{}),a=c.title||r,i=c.id||r,p=c?.description||"",m=c?.publicKey||"",d=(c?.locale||"")+(new Date).getMilliseconds(),u=c.paymentComponentId||i+"-payment-component",y=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const o=document.getElementById(e);if(o||console.error("unzer payment component does not exist: "+e),o.woocommercePaymentTypeId){const e={};e.unzer_nonce=s.nonce,e[n]=o.woocommercePaymentTypeId;const r={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("return previously generated type id (button payment methods)",r),r}const r=await o.submit();if(r.submitResponse){if(!0===r.submitResponse.success){const e={};return e.unzer_nonce=s.nonce,e[n]=r.submitResponse.data.id,{type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}}}return{type:t?.responseTypes?.ERROR,message:r.submitResponse.message||"General Error"}}return{type:t?.responseTypes?.ERROR,message:"General Error 002"}}catch(e){return{type:t?.responseTypes?.ERROR,message:e.message||e.name||"General Error 003"}}}}(u,"unzer-card-id",n,c));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("unzer-payment",{id:u,publicKey:m,locale:d,children:(0,t.jsx)("unzer-card",{})})]})};!function(s,o,r){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:r,edit:r,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(i,a,(0,t.jsx)(y,{}))})(); \ No newline at end of file diff --git a/assets/build/unzer_direct_debit.asset.php b/assets/build/unzer_direct_debit.asset.php index 957db10..7a7d798 100644 --- a/assets/build/unzer_direct_debit.asset.php +++ b/assets/build/unzer_direct_debit.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-element', 'wp-html-entities' ), - 'version' => '00adb3a0559cdb92af78', + 'version' => '32d79f5351f92c11ec07', ); diff --git a/assets/build/unzer_direct_debit.js b/assets/build/unzer_direct_debit.js index 66316ee..46addcc 100644 --- a/assets/build/unzer_direct_debit.js +++ b/assets/build/unzer_direct_debit.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,t=window.wc.wcBlocksRegistry,n=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,i="direct_debit",c=(0,s.getSetting)("unzer_"+i+"_data",{}),r=c.title||i,a=c.id||i,p=c?.description||"",d=c?.publicKey||"",m=c?.locale||"",u=c.paymentComponentId||a+"-payment-component",R=({eventRegistration:e,emitResponse:t})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,t,n,s){return async()=>{try{const t=document.getElementById(e);t||console.error("unzer payment component does not exist: "+e);const o=await t.submit();if(o.submitResponse){if(!0===o.submitResponse.success){const e={};e.unzer_nonce=s.nonce,e["unzer-direct-debit-id"]=o.submitResponse.data.id;const t={type:n?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("submit response: ",o.submitResponse,t),t}return{type:n?.responseTypes?.ERROR,message:"GENERAL ERROR 1"}}return{type:n?.responseTypes?.ERROR,message:"GENERAL ERROR 2"}}catch(e){return{type:n?.responseTypes?.ERROR,message:"GENERAL ERROR 3"}}}}(u,0,t,c));return e},[s]),(0,n.jsxs)("div",{children:[p&&(0,n.jsx)("p",{children:p}),(0,n.jsx)("unzer-payment",{id:u,publicKey:d,locale:m,children:(0,n.jsx)("unzer-sepa-direct-debit",{})})]})};!function(s,o,i){(0,t.registerPaymentMethod)({name:s,label:(0,n.jsx)("div",{children:(0,n.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:i,edit:i,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,r,(0,n.jsx)(R,{}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,t=window.wc.wcBlocksRegistry,n=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,r="direct_debit",c=(0,s.getSetting)("unzer_"+r+"_data",{}),i=c.title||r,a=c.id||r,p=c?.description||"",m=c?.publicKey||"",d=c?.locale||"",u=c.paymentComponentId||a+"-payment-component",y=({eventRegistration:e,emitResponse:t})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,t,n,s){return async()=>{try{const o=document.getElementById(e);if(o||console.error("unzer payment component does not exist: "+e),o.woocommercePaymentTypeId){const e={};e.unzer_nonce=s.nonce,e[t]=o.woocommercePaymentTypeId;const r={type:n?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("return previously generated type id (button payment methods)",r),r}const r=await o.submit();if(r.submitResponse){if(!0===r.submitResponse.success){const e={};return e.unzer_nonce=s.nonce,e[t]=r.submitResponse.data.id,{type:n?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}}}return{type:n?.responseTypes?.ERROR,message:r.submitResponse.message||"General Error"}}return{type:n?.responseTypes?.ERROR,message:"General Error 002"}}catch(e){return{type:n?.responseTypes?.ERROR,message:e.message||e.name||"General Error 003"}}}}(u,"unzer-direct-debit-id",t,c));return e},[s]),(0,n.jsxs)("div",{children:[p&&(0,n.jsx)("p",{children:p}),(0,n.jsx)("unzer-payment",{id:u,publicKey:m,locale:d,children:(0,n.jsx)("unzer-sepa-direct-debit",{})})]})};!function(s,o,r){(0,t.registerPaymentMethod)({name:s,label:(0,n.jsx)("div",{children:(0,n.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:r,edit:r,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,i,(0,n.jsx)(y,{}))})(); \ No newline at end of file diff --git a/assets/build/unzer_direct_debit_secured.asset.php b/assets/build/unzer_direct_debit_secured.asset.php index 6ae7c10..d05763f 100644 --- a/assets/build/unzer_direct_debit_secured.asset.php +++ b/assets/build/unzer_direct_debit_secured.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-element', 'wp-html-entities' ), - 'version' => '85a29053323ec96921e4', + 'version' => 'ce8fb575ec826f41efeb', ); diff --git a/assets/build/unzer_direct_debit_secured.js b/assets/build/unzer_direct_debit_secured.js index 9afa1a7..8fb6b2d 100644 --- a/assets/build/unzer_direct_debit_secured.js +++ b/assets/build/unzer_direct_debit_secured.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,t=window.wc.wcBlocksRegistry,n=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,i="direct_debit_secured",c=(0,s.getSetting)("unzer_"+i+"_data",{}),r=c.title||i,a=c.id||i,p=c?.description||"",d=c?.publicKey||"",u=c?.locale||"",m=c.paymentComponentId||a+"-payment-component",R=({eventRegistration:e,emitResponse:t})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,t,n,s){return async()=>{try{const t=document.getElementById(e);t||console.error("unzer payment component does not exist: "+e);const o=await t.submit();if(o.submitResponse){if(!0===o.submitResponse.success){const e={};e.unzer_nonce=s.nonce,e["unzer-direct-debit-secured-id"]=o.submitResponse.data.id;const t={type:n?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("submit response: ",o.submitResponse,t),t}return{type:n?.responseTypes?.ERROR,message:"GENERAL ERROR 1"}}return{type:n?.responseTypes?.ERROR,message:"GENERAL ERROR 2"}}catch(e){return{type:n?.responseTypes?.ERROR,message:"GENERAL ERROR 3"}}}}(m,0,t,c));return e},[s]),(0,n.jsxs)("div",{children:[p&&(0,n.jsx)("p",{children:p}),(0,n.jsx)("unzer-payment",{id:m,publicKey:d,locale:u,children:(0,n.jsx)("unzer-paylater-direct-debit",{})})]})};!function(s,o,i){(0,t.registerPaymentMethod)({name:s,label:(0,n.jsx)("div",{children:(0,n.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:i,edit:i,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,r,(0,n.jsx)(R,{}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,t=window.wc.wcBlocksRegistry,n=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,r="direct_debit_secured",c=(0,s.getSetting)("unzer_"+r+"_data",{}),i=c.title||r,a=c.id||r,p=c?.description||"",d=c?.publicKey||"",m=c?.locale||"",u=c.paymentComponentId||a+"-payment-component",y=({eventRegistration:e,emitResponse:t})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,t,n,s){return async()=>{try{const o=document.getElementById(e);if(o||console.error("unzer payment component does not exist: "+e),o.woocommercePaymentTypeId){const e={};e.unzer_nonce=s.nonce,e[t]=o.woocommercePaymentTypeId;const r={type:n?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("return previously generated type id (button payment methods)",r),r}const r=await o.submit();if(r.submitResponse){if(!0===r.submitResponse.success){const e={};return e.unzer_nonce=s.nonce,e[t]=r.submitResponse.data.id,{type:n?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}}}return{type:n?.responseTypes?.ERROR,message:r.submitResponse.message||"General Error"}}return{type:n?.responseTypes?.ERROR,message:"General Error 002"}}catch(e){return{type:n?.responseTypes?.ERROR,message:e.message||e.name||"General Error 003"}}}}(u,"unzer-direct-debit-secured-id",t,c));return e},[s]),(0,n.jsxs)("div",{children:[p&&(0,n.jsx)("p",{children:p}),(0,n.jsx)("unzer-payment",{id:u,publicKey:d,locale:m,children:(0,n.jsx)("unzer-paylater-direct-debit",{})})]})};!function(s,o,r){(0,t.registerPaymentMethod)({name:s,label:(0,n.jsx)("div",{children:(0,n.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:r,edit:r,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,i,(0,n.jsx)(y,{}))})(); \ No newline at end of file diff --git a/assets/build/unzer_global.asset.php b/assets/build/unzer_global.asset.php index 046d159..de580bd 100644 --- a/assets/build/unzer_global.asset.php +++ b/assets/build/unzer_global.asset.php @@ -1,4 +1,4 @@ array( 'wp-data' ), - 'version' => '726a0e254157077b8bec', + 'version' => '8b3cc5a0ca561d16a328', ); diff --git a/assets/build/unzer_global.js b/assets/build/unzer_global.js index 9127424..bcb5c5f 100644 --- a/assets/build/unzer_global.js +++ b/assets/build/unzer_global.js @@ -1 +1 @@ -(()=>{"use strict";const t=window.wp.data;window.unzerCurrentPaymentMethod="",window.unzerCurrentAmount=0,(0,t.subscribe)(()=>{const e=(0,t.select)(window.wc.wcBlocksData.CART_STORE_KEY),n=(0,t.select)(window.wc.wcBlocksData.PAYMENT_STORE_KEY),o=e.getCartData();let a=!1;window.unzerCurrentPaymentMethod!==n.getActivePaymentMethod()&&(a=!0),a||window.unzerCurrentAmount===o.totals.total_price||(a=!0),a&&(console.log("payment method changed to: "+n.getActivePaymentMethod()),window.unzerCurrentPaymentMethod=n.getActivePaymentMethod(),window.unzerCurrentAmount=o.totals.total_price,function(t,e){console.info("updatePaymentMethodData for "+t);const n=window.wc.wcSettings.getSetting(t+"_data",{});console.log(n,e),setTimeout(async()=>{const o=document.getElementById(n.paymentComponentId);o&&Promise.all([customElements.whenDefined("unzer-payment")]).then(()=>{try{const a=new FormData;a.append("data",JSON.stringify(e)),a.append("payment_method",t),a.append("unzer_nonce",n.nonce),fetch(n.getCustomerDataUrl,{method:"POST",body:a}).then(t=>t.json()).then(t=>{const n=t.customer;if(console.log("set customer data",n),n&&o.setCustomerData(n),t.publicKey!==o.publicKey&&(o.publicKey=t.publicKey,o.initOnFirstUpdate()),o.setBasketData){o.setBasketData({amount:e.totals.total_price/100,currencyType:e.totals.currency_code,country:e.billingAddress.country});const t=document.getElementById("unzer-paylater-installment-component");t&&t.reloadPlansWithRetainedData&&(t.updateDataFromStore(),console.log(t.basketDetails),t.onDataReady())}})}catch(t){console.error(t)}})},100)}(window.unzerCurrentPaymentMethod,o))},"wc/store/cart")})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.data;function t(e,t){e.woocommercePaymentTypeId=t;const o=document.querySelectorAll(".wc-block-components-checkout-place-order-button");o[o.length-1].click(),e.style.display="none",setTimeout(()=>{n(!0)},3e3)}window.unzerCurrentPaymentMethod="",window.unzerIsInitial=!0,window.unzerCurrentAmount=0,window.unzerInitiatePaymentMethod=(e,o,n)=>{const a=document.getElementById(o.paymentComponentId),c=document.getElementById(o.paymentComponentId+"-container-for-button"),r=document.querySelectorAll(".wc-block-components-checkout-place-order-button");r.forEach(e=>{e.classList.remove("unzer-place-order-button-hidden")}),document.querySelectorAll(".unzer-payment-method-checkout-button-container").forEach(e=>{e.remove()}),a&&(a.style.display="",Promise.all([customElements.whenDefined("unzer-payment")]).then(()=>{try{if(r.length&&c){r.forEach(e=>{e.classList.add("unzer-place-order-button-hidden")});const e=r[r.length-1];c.classList.add("unzer-payment-method-checkout-button-container"),e.after(c)}if("unzer_google_pay"===e&&a.setGooglePayData){const e=o.options,c={gatewayMerchantId:e.gatewayMerchantId,merchantInfo:e.merchantInfo,transactionInfo:{currencyCode:n.totals.currency_code,countryCode:n.billingAddress.country,totalPriceStatus:"ESTIMATED",totalPrice:(n.totals.total_price/100).toFixed(2)},buttonOptions:e.buttonOptions,allowedCardNetworks:e.allowedCardNetworks,allowCreditCards:e.allowCreditCards,allowPrepaidCards:e.allowPrepaidCards};setTimeout(function(){a.setGooglePayData(c)},1e3);const r=document.getElementById("unzer-google-pay-checkout-component");r&&(r.onPaymentSubmit=function(e){e.submitResponse&&e.submitResponse.success?t(a,e.submitResponse.data.id):console.error(e)})}if("unzer_apple_pay_v2"===e&&a.setApplePayData){const e={countryCode:o.storeCountry,currencyCode:n.totals.currency_code,supportedNetworks:["visa","masterCard"],merchantCapabilities:["supports3DS"],total:{label:o.storeName,amount:n.totals.total_price/100}};setTimeout(function(){a.setApplePayData(e)},1e3);const c=document.getElementById("unzer-apple-pay-v2-checkout-component");c&&(c.onPaymentSubmit=function(e){e.submitResponse&&e.submitResponse.data&&e.submitResponse.data.id&&-1===e.submitResponse.data.id.indexOf("-apl-")||(e.submitResponse&&e.submitResponse.success?t(a,e.submitResponse.data.id):console.error(e))})}const s=new FormData;s.append("data",JSON.stringify(n)),s.append("payment_method",e),s.append("unzer_nonce",o.nonce),fetch(o.getCustomerDataUrl,{method:"POST",body:s}).then(e=>e.json()).then(e=>{const t=e.customer;if(t&&a.setCustomerData(t),e.publicKey!==a.publicKey&&(a.publicKey=e.publicKey,a.initOnFirstUpdate()),a.setBasketData){a.setBasketData({amount:n.totals.total_price/100,currencyType:n.totals.currency_code,country:n.billingAddress.country});const e=document.getElementById("unzer-paylater-installment-component");e&&e.reloadPlansWithRetainedData&&(e.updateDataFromStore(),e.onDataReady())}})}catch(e){console.error(e)}}))};const o=function(e,t){const o=window.wc.wcSettings.getSetting(e+"_data",{});if(console.log(o,t),window.unzerIsInitial){const n=()=>{document.querySelector(".wc-block-components-checkout-place-order-button")&&document.querySelector(".wp-block-woocommerce-checkout-payment-block .wc-block-components-radio-control-accordion-option")?setTimeout(async()=>{window.unzerInitiatePaymentMethod(e,o,t)},1e3):setTimeout(n,100)};n()}else setTimeout(async()=>{window.unzerInitiatePaymentMethod(e,o,t)},1e3)};function n(t=!1){(0,e.select)(window.wc.wcBlocksData.CHECKOUT_STORE_KEY);const n=(0,e.select)(window.wc.wcBlocksData.CART_STORE_KEY),a=(0,e.select)(window.wc.wcBlocksData.PAYMENT_STORE_KEY),c=n.getCartData();let r=!1;window.unzerCurrentPaymentMethod!==a.getActivePaymentMethod()&&(r=!0),r||window.unzerCurrentAmount===c.totals.total_price||(r=!0),(r||t)&&(console.log("payment method changed to: "+a.getActivePaymentMethod()),window.unzerCurrentPaymentMethod=a.getActivePaymentMethod(),window.unzerCurrentAmount=c.totals.total_price,o(window.unzerCurrentPaymentMethod,c))}(0,e.subscribe)(n,"wc/store/cart")})(); \ No newline at end of file diff --git a/assets/build/unzer_google_pay.asset.php b/assets/build/unzer_google_pay.asset.php index 5540647..649f38f 100644 --- a/assets/build/unzer_google_pay.asset.php +++ b/assets/build/unzer_google_pay.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-element', 'wp-html-entities' ), - 'version' => 'f61e770ae45bf7883391', + 'version' => 'ed95cfcadf7c4c532301', ); diff --git a/assets/build/unzer_google_pay.js b/assets/build/unzer_google_pay.js index 0725272..5d8c331 100644 --- a/assets/build/unzer_google_pay.js +++ b/assets/build/unzer_google_pay.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,i="google_pay",c=(0,s.getSetting)("unzer_"+i+"_data",{}),r=c.title||i,a=c.id||i,p=c?.description||"",m=c?.publicKey||"",u=c?.locale||"",d=c.paymentComponentId||a+"-payment-component",R=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const n=document.getElementById(e);n||console.error("unzer payment component does not exist: "+e);const o=await n.submit();if(o.submitResponse){if(!0===o.submitResponse.success){const e={};e.unzer_nonce=s.nonce,e["unzer-google-pay-id"]=o.submitResponse.data.id;const n={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("submit response: ",o.submitResponse,n),n}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 1"}}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 2"}}catch(e){return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 3"}}}}(d,0,n,c));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("unzer-payment",{id:d,publicKey:m,locale:u,children:(0,t.jsx)("unzer-google-pay",{})})]})};!function(s,o,i){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:i,edit:i,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,r,(0,t.jsx)(R,{}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,r="google_pay",c=(0,s.getSetting)("unzer_"+r+"_data",{}),a=c.title||r,i=c.id||r,p=c?.description||"",m=c?.publicKey||"",d=c?.locale||"",u=c.paymentComponentId||i+"-payment-component",y=c.checkoutComponentId||i+"-checkout-component",l=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const o=document.getElementById(e);if(o||console.error("unzer payment component does not exist: "+e),o.woocommercePaymentTypeId){const e={};e.unzer_nonce=s.nonce,e[n]=o.woocommercePaymentTypeId;const r={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("return previously generated type id (button payment methods)",r),r}const r=await o.submit();if(r.submitResponse){if(!0===r.submitResponse.success){const e={};return e.unzer_nonce=s.nonce,e[n]=r.submitResponse.data.id,{type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}}}return{type:t?.responseTypes?.ERROR,message:r.submitResponse.message||"General Error"}}return{type:t?.responseTypes?.ERROR,message:"General Error 002"}}catch(e){return{type:t?.responseTypes?.ERROR,message:e.message||e.name||"General Error 003"}}}}(u,"unzer-google-pay-id",n,c));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("div",{style:{display:"none"},children:(0,t.jsxs)("div",{id:u+"-container-for-button",children:[(0,t.jsx)("unzer-payment",{id:u,publicKey:m,locale:d,children:(0,t.jsx)("unzer-google-pay",{})}),(0,t.jsx)("unzer-checkout",{id:y})]})})]})};!function(s,o,r){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:r,edit:r,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(i,a,(0,t.jsx)(l,{}))})(); \ No newline at end of file diff --git a/assets/build/unzer_installment.asset.php b/assets/build/unzer_installment.asset.php index 4722795..fb0a52f 100644 --- a/assets/build/unzer_installment.asset.php +++ b/assets/build/unzer_installment.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-element', 'wp-html-entities' ), - 'version' => '60224e45e2089f765739', + 'version' => '10ed83671a1cfe909449', ); diff --git a/assets/build/unzer_installment.js b/assets/build/unzer_installment.js index 286bf0f..eb26be7 100644 --- a/assets/build/unzer_installment.js +++ b/assets/build/unzer_installment.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,i="installment",c=(0,s.getSetting)("unzer_"+i+"_data",{}),a=c.title||i,r=c.id||i,p=c?.description||"",m=c?.publicKey||"",l=c?.locale||"",u=c.paymentComponentId||r+"-payment-component",d=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const n=document.getElementById(e);n||console.error("unzer payment component does not exist: "+e);const o=await n.submit();if(o.submitResponse){if(!0===o.submitResponse.success){const e={};e.unzer_nonce=s.nonce,e["unzer-installment-id"]=o.submitResponse.data.id;const n={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("submit response: ",o.submitResponse,n),n}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 1"}}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 2"}}catch(e){return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 3"}}}}(u,0,n,c));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("unzer-payment",{id:u,publicKey:m,locale:l,children:(0,t.jsx)("unzer-paylater-installment",{id:"unzer-paylater-installment-component"})})]})};!function(s,o,i){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:i,edit:i,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(r,a,(0,t.jsx)(d,{}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,r="installment",a=(0,s.getSetting)("unzer_"+r+"_data",{}),c=a.title||r,i=a.id||r,p=a?.description||"",m=a?.publicKey||"",l=a?.locale||"",d=a.paymentComponentId||i+"-payment-component",u=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const o=document.getElementById(e);if(o||console.error("unzer payment component does not exist: "+e),o.woocommercePaymentTypeId){const e={};e.unzer_nonce=s.nonce,e[n]=o.woocommercePaymentTypeId;const r={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("return previously generated type id (button payment methods)",r),r}const r=await o.submit();if(r.submitResponse){if(!0===r.submitResponse.success){const e={};return e.unzer_nonce=s.nonce,e[n]=r.submitResponse.data.id,{type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}}}return{type:t?.responseTypes?.ERROR,message:r.submitResponse.message||"General Error"}}return{type:t?.responseTypes?.ERROR,message:"General Error 002"}}catch(e){return{type:t?.responseTypes?.ERROR,message:e.message||e.name||"General Error 003"}}}}(d,"unzer-installment-id",n,a));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("unzer-payment",{id:d,publicKey:m,locale:l,children:(0,t.jsx)("unzer-paylater-installment",{id:"unzer-paylater-installment-component"})})]})};!function(s,o,r){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:r,edit:r,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(i,c,(0,t.jsx)(u,{}))})(); \ No newline at end of file diff --git a/assets/build/unzer_invoice.asset.php b/assets/build/unzer_invoice.asset.php index e31cbbd..a8a211b 100644 --- a/assets/build/unzer_invoice.asset.php +++ b/assets/build/unzer_invoice.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-element', 'wp-html-entities' ), - 'version' => '09fccfb7c08f267db209', + 'version' => 'f3d80eedde3556f6c679', ); diff --git a/assets/build/unzer_invoice.js b/assets/build/unzer_invoice.js index a027d8c..ff9a280 100644 --- a/assets/build/unzer_invoice.js +++ b/assets/build/unzer_invoice.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,i="invoice",c=(0,s.getSetting)("unzer_"+i+"_data",{}),r=c.title||i,a=c.id||i,p=c?.description||"",m=c?.publicKey||"",u=c?.locale||"",d=c.paymentComponentId||a+"-payment-component",R=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const n=document.getElementById(e);n||console.error("unzer payment component does not exist: "+e);const o=await n.submit();if(o.submitResponse){if(!0===o.submitResponse.success){const e={};e.unzer_nonce=s.nonce,e["unzer-invoice-id"]=o.submitResponse.data.id;const n={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("submit response: ",o.submitResponse,n),n}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 1"}}return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 2"}}catch(e){return{type:t?.responseTypes?.ERROR,message:"GENERAL ERROR 3"}}}}(d,0,n,c));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("unzer-payment",{id:d,publicKey:m,locale:u,children:(0,t.jsx)("unzer-paylater-invoice",{})})]})};!function(s,o,i){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:i,edit:i,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,r,(0,t.jsx)(R,{}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,n=window.wc.wcBlocksRegistry,t=window.ReactJSXRuntime,s=window.wc.wcSettings,o=window.wp.element,r="invoice",c=(0,s.getSetting)("unzer_"+r+"_data",{}),i=c.title||r,a=c.id||r,p=c?.description||"",m=c?.publicKey||"",d=c?.locale||"",u=c.paymentComponentId||a+"-payment-component",y=({eventRegistration:e,emitResponse:n})=>{const{onPaymentSetup:s}=e;return(0,o.useEffect)(()=>{const e=s(function(e,n,t,s){return async()=>{try{const o=document.getElementById(e);if(o||console.error("unzer payment component does not exist: "+e),o.woocommercePaymentTypeId){const e={};e.unzer_nonce=s.nonce,e[n]=o.woocommercePaymentTypeId;const r={type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}};return console.log("return previously generated type id (button payment methods)",r),r}const r=await o.submit();if(r.submitResponse){if(!0===r.submitResponse.success){const e={};return e.unzer_nonce=s.nonce,e[n]=r.submitResponse.data.id,{type:t?.responseTypes?.SUCCESS,meta:{paymentMethodData:e}}}return{type:t?.responseTypes?.ERROR,message:r.submitResponse.message||"General Error"}}return{type:t?.responseTypes?.ERROR,message:"General Error 002"}}catch(e){return{type:t?.responseTypes?.ERROR,message:e.message||e.name||"General Error 003"}}}}(u,"unzer-invoice-id",n,c));return e},[s]),(0,t.jsxs)("div",{children:[p&&(0,t.jsx)("p",{children:p}),(0,t.jsx)("unzer-payment",{id:u,publicKey:m,locale:d,children:(0,t.jsx)("unzer-paylater-invoice",{})})]})};!function(s,o,r){(0,n.registerPaymentMethod)({name:s,label:(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"wc-block-components-payment-method-label",children:o})}),content:r,edit:r,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(o),supports:{features:["products"]}})}(a,i,(0,t.jsx)(y,{}))})(); \ No newline at end of file diff --git a/assets/build/unzer_simple.asset.php b/assets/build/unzer_simple.asset.php index 854eda9..3141f4f 100644 --- a/assets/build/unzer_simple.asset.php +++ b/assets/build/unzer_simple.asset.php @@ -1,4 +1,4 @@ array( 'react-jsx-runtime', 'wc-blocks-registry', 'wc-settings', 'wp-html-entities' ), - 'version' => 'aa971fc6a6cdf5615f0c', + 'version' => '61276055c948fa0fa3b2', ); diff --git a/assets/build/unzer_simple.js b/assets/build/unzer_simple.js index 557a514..11fba18 100644 --- a/assets/build/unzer_simple.js +++ b/assets/build/unzer_simple.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.htmlEntities,t=window.wc.wcBlocksRegistry,n=window.ReactJSXRuntime,i=window.wc.wcSettings;function c(c){const a=(0,i.getSetting)("unzer_"+c+"_data",{}),s=a.title||c,o=a.id||c,d=a?.description||"",r=()=>(0,n.jsx)("div",{children:d&&(0,n.jsx)("p",{children:d})});!function(i,c,a){(0,t.registerPaymentMethod)({name:i,label:(0,n.jsx)("div",{children:(0,n.jsx)("span",{className:"wc-block-components-payment-method-label",children:c})}),content:a,edit:a,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(c),supports:{features:["products"]}})}(o,s,(0,n.jsx)(r,{}))}const a=["alipay","bancontact","eps","ideal","klarna","postfinance_card","postfinance_efinance","prepayment","przelewy24","twint","wechatpay","wero"];for(const e of a)c(e)})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.htmlEntities,t=window.wc.wcBlocksRegistry,n=window.ReactJSXRuntime,a=window.wc.wcSettings;function c(c){const i=(0,a.getSetting)("unzer_"+c+"_data",{}),s=i.title||c,o=i.id||c,l=i?.description||"",d=()=>l?(0,n.jsx)("p",{children:l}):null;!function(a,c,i){(0,t.registerPaymentMethod)({name:a,label:(0,n.jsx)("div",{children:(0,n.jsx)("span",{className:"wc-block-components-payment-method-label",children:c})}),content:i,edit:i,canMakePayment:()=>!0,ariaLabel:(0,e.decodeEntities)(c),supports:{features:["products"]}})}(o,s,(0,n.jsx)(d,{}))}const i=["alipay","bancontact","eps","ideal","klarna","postfinance_card","postfinance_efinance","paypal","prepayment","przelewy24","twint","wechatpay","wero"];for(const e of i)c(e)})(); \ No newline at end of file diff --git a/assets/css/admin.css b/assets/css/admin.css index 6e76845..d3fcbf7 100755 --- a/assets/css/admin.css +++ b/assets/css/admin.css @@ -132,3 +132,15 @@ .unzer-payment-navigation{ display:none; } + +.unzer-alert-info-row td{ + padding:0; +} + +.unzer-alert-info{ + padding: 10px 15px; + background: #e7f5fe; + border-left: 4px solid #2196f3; + color: #1a3e5c; + margin: 10px 0; +} diff --git a/assets/css/block-checkout.css b/assets/css/block-checkout.css new file mode 100644 index 0000000..9f9e601 --- /dev/null +++ b/assets/css/block-checkout.css @@ -0,0 +1,3 @@ +.unzer-place-order-button-hidden{ + display:none !important; +} \ No newline at end of file diff --git a/assets/js/admin_webhook_management.js b/assets/js/admin_webhook_management.js index acbb42d..01beb36 100644 --- a/assets/js/admin_webhook_management.js +++ b/assets/js/admin_webhook_management.js @@ -3,6 +3,7 @@ function unzerWebhookRefreshData(slug) { const formData = new FormData(); formData.append( 'slug', slug ); formData.append( 'unzer_nonce', window.unzerWebhookNonce ); + formData.append( 'unzer_payment_method', window.unzerWebhookPaymentMethod ); fetch( window.unzerWebhookAjaxUrl, { @@ -56,6 +57,7 @@ function unzerAddCurrentWebhook(slug) { formData.append( 'action', 'add' ); formData.append( 'slug', slug ); formData.append( 'unzer_nonce', window.unzerWebhookNonce ); + formData.append( 'unzer_payment_method', window.unzerWebhookPaymentMethod ); fetch( window.unzerWebhookAjaxUrl, { @@ -85,6 +87,7 @@ function unzerDeleteWebhook(id, slug) { formData.append( 'id', id ); formData.append( 'slug', slug ); formData.append( 'unzer_nonce', window.unzerWebhookNonce ); + formData.append( 'unzer_payment_method', window.unzerWebhookPaymentMethod ); fetch( window.unzerWebhookAjaxUrl, { @@ -127,8 +130,9 @@ document.addEventListener( document.querySelectorAll( '.unzer-webhook-container' ).forEach( function (element) { if (element.getAttribute( 'data-url' ) && element.getAttribute( 'data-nonce' )) { - window.unzerWebhookAjaxUrl = element.getAttribute( 'data-url' ); - window.unzerWebhookNonce = element.getAttribute( 'data-nonce' ); + window.unzerWebhookAjaxUrl = element.getAttribute( 'data-url' ); + window.unzerWebhookNonce = element.getAttribute( 'data-nonce' ); + window.unzerWebhookPaymentMethod = element.getAttribute( 'data-payment-method' ); unzerWebhookRefreshData( element.getAttribute( 'data-slug' ) ); } } diff --git a/assets/js/checkout.js b/assets/js/checkout.js index eea8d19..83d4d8a 100755 --- a/assets/js/checkout.js +++ b/assets/js/checkout.js @@ -197,6 +197,7 @@ const UnzerManager = { // for some reason this does not get applied without timeout? setTimeout( function () { + console.log(unzerPaymentElement, paymentDataRequestObject); unzerPaymentElement.setGooglePayData(paymentDataRequestObject); }, 100 @@ -250,7 +251,7 @@ const UnzerManager = { ); const unzerCheckout = document.getElementById('unzer-apple-pay-checkout-component'); unzerCheckout.onPaymentSubmit = function (response) { - if (response.submitResponse && response.submitResponse.data && response.submitResponse.data.id && response.submitResponse.data.id.indexOf('apple') === -1) { + if (response.submitResponse && response.submitResponse.data && response.submitResponse.data.id && response.submitResponse.data.id.indexOf('-apl-') === -1) { return } if (response.submitResponse && response.submitResponse.success) { @@ -495,9 +496,6 @@ const UnzerManager = { return false; }, - supportsApplePay() { - return window.ApplePaySession && window.ApplePaySession.canMakePayments() && window.ApplePaySession.supportsVersion(6); - }, _setCustomerDataToPaymentComponent(selector) { const paymentElement = document.querySelector(selector); if (paymentElement) { @@ -588,11 +586,8 @@ jQuery( const applePayContainer = document.querySelector('.payment_method_unzer_apple_pay_v2'); if (applePayContainer) { const applePayButton = document.getElementById('unzer_apple_pay_v2_place_order'); - if (!UnzerManager.supportsApplePay()) { - applePayContainer.style.display = 'none'; - } if (applePayButton && placeOrderButton) { - if (document.getElementById('payment_method_unzer_apple_pay_v2').checked && UnzerManager.supportsApplePay()) { + if (document.getElementById('payment_method_unzer_apple_pay_v2').checked) { applePayButton.style.display = ''; showPlaceOrderButton = false; } else { @@ -624,4 +619,3 @@ jQuery( ); } ); - diff --git a/assets/src/payment_methods/unzer_apple_pay_v2.jsx b/assets/src/payment_methods/unzer_apple_pay_v2.jsx index e64b764..4d3b2b2 100644 --- a/assets/src/payment_methods/unzer_apple_pay_v2.jsx +++ b/assets/src/payment_methods/unzer_apple_pay_v2.jsx @@ -1,6 +1,6 @@ import unzerRegisterMethod from "../util/register-method"; import {getSetting} from '@woocommerce/settings' -import { useEffect, useState } from '@wordpress/element' +import {useEffect} from '@wordpress/element' import onPaymentSetupFactory from "../util/on-payment-setup-factory"; const nameInSnakeCase = 'apple_pay_v2'; @@ -11,7 +11,7 @@ const gatewayDescription = settings?.description || '' const publicKey = settings?.publicKey || ''; const locale = settings?.locale || ''; const paymentComponentId = settings.paymentComponentId || (gatewayName + '-payment-component'); - +const checkoutComponentId = settings.checkoutComponentId || (gatewayName + '-checkout-component'); const PaymentContent = ({eventRegistration, emitResponse}) => { const {onPaymentSetup} = eventRegistration; @@ -23,13 +23,18 @@ const PaymentContent = ({eventRegistration, emitResponse}) => { return (
{gatewayDescription &&

{gatewayDescription}

} - - - +
+
+ + + + +
+
) } diff --git a/assets/src/payment_methods/unzer_google_pay.jsx b/assets/src/payment_methods/unzer_google_pay.jsx index 7857dd4..e2578fd 100644 --- a/assets/src/payment_methods/unzer_google_pay.jsx +++ b/assets/src/payment_methods/unzer_google_pay.jsx @@ -1,6 +1,6 @@ import unzerRegisterMethod from "../util/register-method"; import {getSetting} from '@woocommerce/settings' -import { useEffect, useState } from '@wordpress/element' +import {useEffect} from '@wordpress/element' import onPaymentSetupFactory from "../util/on-payment-setup-factory"; const nameInSnakeCase = 'google_pay'; @@ -11,6 +11,7 @@ const gatewayDescription = settings?.description || '' const publicKey = settings?.publicKey || ''; const locale = settings?.locale || ''; const paymentComponentId = settings.paymentComponentId || (gatewayName + '-payment-component'); +const checkoutComponentId = settings.checkoutComponentId || (gatewayName + '-checkout-component'); const PaymentContent = ({eventRegistration, emitResponse}) => { const {onPaymentSetup} = eventRegistration; @@ -22,13 +23,18 @@ const PaymentContent = ({eventRegistration, emitResponse}) => { return (
{gatewayDescription &&

{gatewayDescription}

} - - - +
+
+ + + + +
+
) } diff --git a/assets/src/unzer_global.jsx b/assets/src/unzer_global.jsx index 08dd815..ecfb1f1 100644 --- a/assets/src/unzer_global.jsx +++ b/assets/src/unzer_global.jsx @@ -1,135 +1,221 @@ import {select, subscribe} from '@wordpress/data'; window.unzerCurrentPaymentMethod = ''; +window.unzerIsInitial = true; window.unzerCurrentAmount = 0; -const updatePaymentMethodData = function (longNameInSnakeCase, cartData) { - console.info('updatePaymentMethodData for ' + longNameInSnakeCase); - const settings = window.wc.wcSettings.getSetting(longNameInSnakeCase + '_data', {}) - console.log(settings, cartData); - setTimeout(async () => { - const paymentComponent = document.getElementById(settings.paymentComponentId); - if (paymentComponent) { - Promise.all([customElements.whenDefined('unzer-payment')]).then( - () => { - try { - const data = new FormData(); - data.append('data', JSON.stringify(cartData)); - data.append('payment_method', longNameInSnakeCase); - data.append('unzer_nonce', settings.nonce); - fetch(settings.getCustomerDataUrl, { - method: 'POST', - body: data - - }).then((response) => response.json()) - .then((responseData)=>{ - const customerData = responseData.customer; - console.log( - 'set customer data', - customerData - ); - if (customerData) { - paymentComponent.setCustomerData( - customerData - ); - } - if(responseData.publicKey !== paymentComponent.publicKey) { - paymentComponent.publicKey = responseData.publicKey; - paymentComponent.initOnFirstUpdate(); - } +function triggerSubmitForPaymentTypeId(paymentComponent, paymentTypeId) { + paymentComponent.woocommercePaymentTypeId = paymentTypeId; + const originalCheckoutButtons = document.querySelectorAll('.wc-block-components-checkout-place-order-button'); + const lastOriginalCheckoutButton = originalCheckoutButtons[originalCheckoutButtons.length - 1]; + lastOriginalCheckoutButton.click(); + paymentComponent.style.display = 'none'; + setTimeout(() => { + unzerCheckForPaymentMethodChanges(true); + }, 3000); - if (paymentComponent.setBasketData) { - paymentComponent.setBasketData( - { - amount: cartData.totals.total_price/100, - currencyType: cartData.totals.currency_code, - country: cartData.billingAddress.country - } - ); - const installmentComponent = document.getElementById('unzer-paylater-installment-component'); - if (installmentComponent && installmentComponent.reloadPlansWithRetainedData) { - installmentComponent.updateDataFromStore(); - console.log(installmentComponent.basketDetails); - installmentComponent.onDataReady(); - } - } +} + +window.unzerInitiatePaymentMethod = ( + longNameInSnakeCase, + settings, + cartData +) => { + const paymentComponent = document.getElementById(settings.paymentComponentId); + const paymentMethodCheckoutButtonContainer = document.getElementById(settings.paymentComponentId + '-container-for-button'); + const originalCheckoutButtons = document.querySelectorAll('.wc-block-components-checkout-place-order-button'); + originalCheckoutButtons.forEach(originalCheckoutButton => { + originalCheckoutButton.classList.remove('unzer-place-order-button-hidden'); + }); + document.querySelectorAll('.unzer-payment-method-checkout-button-container').forEach(container => { + container.remove(); + }); + if (paymentComponent) { + paymentComponent.style.display = ''; + Promise.all([customElements.whenDefined('unzer-payment')]).then( + () => { + try { + + // move buttons to place order section + if (originalCheckoutButtons.length) { + if (paymentMethodCheckoutButtonContainer) { + //is button payment method + originalCheckoutButtons.forEach(originalCheckoutButton => { + originalCheckoutButton.classList.add('unzer-place-order-button-hidden'); + }); + const lastOriginalCheckoutButton = originalCheckoutButtons[originalCheckoutButtons.length - 1]; + paymentMethodCheckoutButtonContainer.classList.add('unzer-payment-method-checkout-button-container'); + lastOriginalCheckoutButton.after(paymentMethodCheckoutButtonContainer); + } + } + + if (longNameInSnakeCase === 'unzer_google_pay' && paymentComponent.setGooglePayData) { + const options = settings.options; + const paymentDataRequestObject = { + gatewayMerchantId: options.gatewayMerchantId, + merchantInfo: options.merchantInfo, + transactionInfo: { + currencyCode: cartData.totals.currency_code, + countryCode: cartData.billingAddress.country, + totalPriceStatus: 'ESTIMATED', + totalPrice: (cartData.totals.total_price / 100).toFixed(2), + }, + buttonOptions: options.buttonOptions, + allowedCardNetworks: options.allowedCardNetworks, + allowCreditCards: options.allowCreditCards, + allowPrepaidCards: options.allowPrepaidCards + }; + // for some reason this does not get applied without timeout? + setTimeout( + function () { + paymentComponent.setGooglePayData(paymentDataRequestObject); + }, + 1000 + ); + + const unzerCheckout = document.getElementById('unzer-google-pay-checkout-component'); + if (unzerCheckout) { + unzerCheckout.onPaymentSubmit = function (response) { + if (response.submitResponse && response.submitResponse.success) { + triggerSubmitForPaymentTypeId(paymentComponent, response.submitResponse.data.id); + } else { + console.error(response); + } + }; + } + } - }); + if (longNameInSnakeCase === 'unzer_apple_pay_v2' && paymentComponent.setApplePayData) { + const applePayPaymentRequest = { + countryCode: settings.storeCountry, + currencyCode: cartData.totals.currency_code, + supportedNetworks: ['visa', 'masterCard'], + merchantCapabilities: ['supports3DS'], + total: { + label: settings.storeName, + amount: cartData.totals.total_price / 100 + } + }; + // for some reason this does not get applied without timeout? + setTimeout( + function () { + paymentComponent.setApplePayData(applePayPaymentRequest); + }, + 1000 + ); - } catch (e) { - console.error(e); + const unzerCheckout = document.getElementById('unzer-apple-pay-v2-checkout-component'); + if (unzerCheckout) { + unzerCheckout.onPaymentSubmit = function (response) { + if (response.submitResponse && response.submitResponse.data && response.submitResponse.data.id && response.submitResponse.data.id.indexOf('-apl-') === -1) { + return + } + if (response.submitResponse && response.submitResponse.success) { + triggerSubmitForPaymentTypeId(paymentComponent, response.submitResponse.data.id); + } else { + console.error(response); + } + }; } } - ); + const data = new FormData(); + data.append('data', JSON.stringify(cartData)); + data.append('payment_method', longNameInSnakeCase); + data.append('unzer_nonce', settings.nonce); + fetch(settings.getCustomerDataUrl, { + method: 'POST', + body: data + + }).then((response) => response.json()) + .then((responseData) => { + const customerData = responseData.customer; + if (customerData) { + paymentComponent.setCustomerData( + customerData + ); + } + + if (responseData.publicKey !== paymentComponent.publicKey) { + paymentComponent.publicKey = responseData.publicKey; + paymentComponent.initOnFirstUpdate(); + } + + if (paymentComponent.setBasketData) { + paymentComponent.setBasketData( + { + amount: cartData.totals.total_price / 100, + currencyType: cartData.totals.currency_code, + country: cartData.billingAddress.country + } + ); + const installmentComponent = document.getElementById('unzer-paylater-installment-component'); + if (installmentComponent && installmentComponent.reloadPlansWithRetainedData) { + installmentComponent.updateDataFromStore(); + installmentComponent.onDataReady(); + } + } + + + }); + + } catch (e) { + console.error(e); + } } - }, 100 - ) + ); + } } -subscribe(() => { +const updatePaymentMethodData = function (longNameInSnakeCase, cartData) { + const settings = window.wc.wcSettings.getSetting(longNameInSnakeCase + '_data', {}) + console.log(settings, cartData); + + if (window.unzerIsInitial) { + const initializeLoopFunction = () => { + if (!document.querySelector('.wc-block-components-checkout-place-order-button') || !document.querySelector('.wp-block-woocommerce-checkout-payment-block .wc-block-components-radio-control-accordion-option')) { + setTimeout(initializeLoopFunction, 100); + } else { + setTimeout(async () => { + window.unzerInitiatePaymentMethod(longNameInSnakeCase, settings, cartData); + }, 1000 + ) + } + } + initializeLoopFunction(); + } else { + setTimeout(async () => { + window.unzerInitiatePaymentMethod(longNameInSnakeCase, settings, cartData); + }, 1000 + ) + } + + +} + +function unzerCheckForPaymentMethodChanges(force = false) { + + const checkoutStore = select(window.wc.wcBlocksData.CHECKOUT_STORE_KEY); const cartStore = select(window.wc.wcBlocksData.CART_STORE_KEY); const paymentStore = select(window.wc.wcBlocksData.PAYMENT_STORE_KEY); + const cartData = cartStore.getCartData(); let hasChanged = false; if (window.unzerCurrentPaymentMethod !== paymentStore.getActivePaymentMethod()) { -hasChanged = true; + hasChanged = true; } - if(!hasChanged && window.unzerCurrentAmount !== cartData.totals.total_price){ + if (!hasChanged && window.unzerCurrentAmount !== cartData.totals.total_price) { hasChanged = true; } - if(hasChanged) { + if (hasChanged || force) { console.log('payment method changed to: ' + paymentStore.getActivePaymentMethod()); window.unzerCurrentPaymentMethod = paymentStore.getActivePaymentMethod(); window.unzerCurrentAmount = cartData.totals.total_price; updatePaymentMethodData(window.unzerCurrentPaymentMethod, cartData); } -}, 'wc/store/cart'); - - -// -// const paymentMethodUpdateCallbacks = function (shortNameInSnakeCase) { -// const settings = window.wc.wcSettings.getSetting('unzer_' + shortNameInSnakeCase + '_data', {}) -// console.log(shortNameInSnakeCase, settings); -// const {checkoutStore} = window.wc.wcBlocksData; -// console.log('checkoutStore', checkoutStore); -// const paymentComponent = document.getElementById(settings.paymentComponentId); -// if (paymentComponent) { -// console.log('PPPCCCCC', paymentComponent); -// } -// -// -// } -// -// //we actually don't need this any more, but keep it in case a use case pops up -// const unzerIsPaymentMethodAllowed = (shortNameInSnakeCase, arg) => { -// console.log(arg); -// paymentMethodUpdateCallbacks(shortNameInSnakeCase); -// // console.log(shortNameInSnakeCase); -// // console.trace(); -// // const settings = window.wc.wcSettings.getSetting('unzer_' + shortNameInSnakeCase + '_data', {}) -// // const currency = arg.cart.cartTotals.currency_code; -// // const country = arg.billingAddress.country; -// // if(settings.allowedCountries){ -// // if(!settings.allowedCountries.includes(country)){ -// // return false; -// // } -// // } -// // if(settings.allowedCurrencies){ -// // if(!settings.allowedCurrencies.includes(currency)){ -// // return false; -// // } -// // } -// return true; -// }; -// -// const callbackCollection = {}; -// for (const simpleMethod of simpleMethods) { -// callbackCollection['unzer_' + simpleMethod] = (arg) => { -// return unzerIsPaymentMethodAllowed(simpleMethod, arg); -// } -// } -// console.log(callbackCollection); -// registerPaymentMethodExtensionCallbacks('unzer-payments', callbackCollection); \ No newline at end of file + +} + +subscribe(unzerCheckForPaymentMethodChanges, 'wc/store/cart'); \ No newline at end of file diff --git a/assets/src/util/on-payment-setup-factory.jsx b/assets/src/util/on-payment-setup-factory.jsx index 970d8cc..7b1bc47 100644 --- a/assets/src/util/on-payment-setup-factory.jsx +++ b/assets/src/util/on-payment-setup-factory.jsx @@ -6,6 +6,25 @@ export default function onPaymentSetupFactory(paymentComponentId, paymentTypeIdF if(!unzerPaymentComponent) { console.error('unzer payment component does not exist: ' + paymentComponentId); } + + if(unzerPaymentComponent.woocommercePaymentTypeId){ + const paymentMethodData = {}; + paymentMethodData['unzer_nonce'] = settings.nonce; + paymentMethodData[paymentTypeIdFieldName] = unzerPaymentComponent.woocommercePaymentTypeId; + const returnValue = { + type: emitResponse?.responseTypes?.SUCCESS, + meta: { + paymentMethodData + } + }; + console.log( + 'return previously generated type id (button payment methods)', + returnValue + ); + + return returnValue; + } + const response = await unzerPaymentComponent.submit(); if (response.submitResponse) { if (response.submitResponse.success === true) { @@ -19,29 +38,24 @@ export default function onPaymentSetupFactory(paymentComponentId, paymentTypeIdF paymentMethodData } }; - console.log( - 'submit response: ', - response.submitResponse, - returnValue - ); return returnValue; } else { return { type: emitResponse?.responseTypes?.ERROR, - message: 'GENERAL ERROR 1' + message: response.submitResponse.message || 'General Error' } } } else { return { type: emitResponse?.responseTypes?.ERROR, - message: 'GENERAL ERROR 2' + message: 'General Error 002' } } - } catch (err) { + } catch (error) { return { type: emitResponse?.responseTypes?.ERROR, - message: 'GENERAL ERROR 3' + message: error.message || error.name || 'General Error 003' } } diff --git a/assets/src/util/register-simple-method.jsx b/assets/src/util/register-simple-method.jsx index a5881c6..6619e28 100644 --- a/assets/src/util/register-simple-method.jsx +++ b/assets/src/util/register-simple-method.jsx @@ -8,11 +8,7 @@ export default function unzerRegisterSimpleMethod(nameInSnakeCase) { const gatewayDescription = settings?.description || '' const PaymentContent = () => { - return ( -
- {gatewayDescription &&

{gatewayDescription}

} -
- ) + return gatewayDescription ?

{gatewayDescription}

: null; } unzerRegisterMethod(gatewayName, gatewayTitle, ); } diff --git a/assets/src/util/simple-methods.jsx b/assets/src/util/simple-methods.jsx index d8683b9..bd8867b 100644 --- a/assets/src/util/simple-methods.jsx +++ b/assets/src/util/simple-methods.jsx @@ -6,6 +6,7 @@ export default [ 'klarna', 'postfinance_card', 'postfinance_efinance', + 'paypal', 'prepayment', 'przelewy24', 'twint', diff --git a/html/admin/webhooks.php b/html/admin/webhooks.php index 142ad7a..8ce4bf4 100755 --- a/html/admin/webhooks.php +++ b/html/admin/webhooks.php @@ -9,7 +9,7 @@ $slug = isset( $slug ) ? $slug : ''; $ajaxUrl = WC()->api_request_url( AdminController::WEBHOOK_MANAGEMENT_ROUTE_SLUG ); ?> -
+

Webhooks

diff --git a/includes/Main.php b/includes/Main.php index a2a6d3d..97fc635 100755 --- a/includes/Main.php +++ b/includes/Main.php @@ -99,7 +99,7 @@ public function registerEvents(): void { add_action( 'woocommerce_update_options_payment_gateways_unzer_apple_pay_v2', array( $this, 'savePaymentMethodSettingsApplePayV2' ) ); add_action( 'woocommerce_update_options_checkout_unzer_general', array( $this, 'saveGeneralSettings' ) ); add_action( 'admin_notices', array( new DashboardService(), 'showNotifications' ) ); - // add_action( 'woocommerce_blocks_loaded', array( $this, 'addCheckoutBlocks' ) ); + add_action( 'woocommerce_blocks_loaded', array( $this, 'addCheckoutBlocks' ) ); add_action( 'before_woocommerce_pay_form', array( $this, 'orderPayPaymentMethod' ), 20, 4 ); add_action( 'admin_enqueue_scripts', diff --git a/includes/controllers/AdminController.php b/includes/controllers/AdminController.php index ca5e850..184c23d 100644 --- a/includes/controllers/AdminController.php +++ b/includes/controllers/AdminController.php @@ -143,9 +143,10 @@ public function doCharge() { public function webhookManagement() { try { - $slug = Util::getNonceCheckedPostValue( 'slug' ); - $action = Util::getNonceCheckedPostValue( 'action' ); - $service = new WebhookManagementService( $slug ); + $slug = Util::getNonceCheckedPostValue( 'slug' ); + $action = Util::getNonceCheckedPostValue( 'action' ); + $paymentMethod = Util::getNonceCheckedPostValue( 'unzer_payment_method' ); + $service = new WebhookManagementService( $slug, $paymentMethod ); if ( empty( $action ) ) { $this->renderJson( array( diff --git a/includes/gateways/AbstractGateway.php b/includes/gateways/AbstractGateway.php index ce460bd..c2e8743 100644 --- a/includes/gateways/AbstractGateway.php +++ b/includes/gateways/AbstractGateway.php @@ -326,20 +326,38 @@ public function admin_options() { echo '
'; } + public function generate_unzer_additional_key_info_html( $key, $data ) { + return ' + + +
+ ' . esc_html__( 'In the section below you may enter additional key pairs. If you leave fields empty, the main key pair will be used by default.' ) . ' +
+ + + '; + } + public function generate_key_check_html( $key, $data ) { $slug = $data['slug']; $title = $data['title'] ?? ''; + + if ( empty( $this->get_option( 'private_key_' . $slug ) ) || empty( $this->get_option( 'public_key_' . $slug ) ) ) { + return ''; + } + wp_enqueue_script( 'unzer_admin_key_management_js', UNZER_PLUGIN_URL . '/assets/js/admin_key_management.js', array(), UNZER_VERSION, array( 'in_footer' => false ) ); wp_enqueue_script( 'unzer_admin_webhook_management_js', UNZER_PLUGIN_URL . '/assets/js/admin_webhook_management.js', array(), UNZER_VERSION, array( 'in_footer' => false ) ); $webhookHtml = ''; - if ( $this->get_option( 'private_key_' . $slug ) && $this->get_option( 'public_key_' . $slug ) ) { - ob_start(); - include UNZER_PLUGIN_PATH . 'html/admin/webhooks.php'; - $webhookHtml = ob_get_contents(); - ob_end_clean(); - } + + ob_start(); + $paymentMethod = static::GATEWAY_ID; + include UNZER_PLUGIN_PATH . 'html/admin/webhooks.php'; + $webhookHtml = ob_get_contents(); + ob_end_clean(); + $ajaxUrl = WC()->api_request_url( AdminController::KEY_VALIDATION_ROUTE_SLUG ); return ' @@ -446,11 +464,11 @@ function ( $tag, $handle, $src ) { 10, 3 ); - wp_enqueue_script( 'unzer_ui_v2_js', 'https://static.test.unzer.com/v2/ui-components/index.js', array(), UNZER_VERSION, array( 'in_footer' => true ) ); // https://static-v2.unzer.com/v2/ui-components/index.js + wp_enqueue_script( 'unzer_ui_v2_js', 'https://static-v2.unzer.com/v2/ui-components/index.js', array(), UNZER_VERSION, array( 'in_footer' => true ) ); // https://static-v2.unzer.com/v2/ui-components/index.js wp_enqueue_style( 'woocommerce_unzer_css', UNZER_PLUGIN_URL . '/assets/css/checkout.css', array(), UNZER_VERSION ); if ( ( $this instanceof GooglePay ) && empty( $this->get_description() ) ) { - wp_add_inline_style( 'woocommerce_unzer_css', '.payment_box.payment_method_unzer_google_pay{display:none !important;}' ); + wp_add_inline_style( 'woocommerce_unzer_css', '.payment_box.payment_method_unzer_google_pay{display:none !important;}' ); } elseif ( ( $this instanceof ApplePayV2 ) && empty( $this->get_description() ) ) { wp_add_inline_style( 'woocommerce_unzer_css', '.payment_box.payment_method_unzer_apple_pay_v2{display:none !important;}' ); } @@ -480,23 +498,7 @@ function ( $tag, $handle, $src ) { 'store_country' => strtoupper( substr( get_option( 'woocommerce_default_country' ), 0, 2 ) ), 'is_order_pay' => self::isOrderPay() ? 'true' : 'false', 'currency' => get_woocommerce_currency(), - 'google_pay_options' => array( - 'gatewayMerchantId' => $googlePayGateway->get_option( 'channel_id' ), - 'merchantInfo' => array( - 'merchantName' => $googlePayGateway->get_option( 'merchant_name' ), - 'merchantId' => $googlePayGateway->get_option( 'merchant_id' ), - ), - 'transactionInfo' => array( - 'countryCode' => $googlePayGateway->get_option( 'country_code' ), - ), - 'buttonOptions' => array( - 'buttonColor' => $googlePayGateway->get_option( 'button_color' ), - 'buttonSizeMode' => $googlePayGateway->get_option( 'button_size_mode' ), - ), - 'allowCreditCards' => $googlePayGateway->get_option( 'credit_cards_allowed' ) === 'yes', - 'allowPrepaidCards' => $googlePayGateway->get_option( 'prepaid_cards_allowed' ) === 'yes', - 'allowedCardNetworks' => (array) $googlePayGateway->get_option( 'card_networks' ), - ), + 'google_pay_options' => $googlePayGateway->getPublicOptions(), ) ); wp_localize_script( diff --git a/includes/gateways/Blocks/AbstractBlock.php b/includes/gateways/Blocks/AbstractBlock.php index dc8981a..b7b96c0 100644 --- a/includes/gateways/Blocks/AbstractBlock.php +++ b/includes/gateways/Blocks/AbstractBlock.php @@ -60,7 +60,10 @@ public function get_payment_method_data() { 'publicKey' => $gateway->get_public_key(), 'locale' => get_locale(), 'nonce' => Util::getNonce(), + 'storeName' => get_bloginfo( 'name' ), + 'storeCountry' => strtoupper( substr( get_option( 'woocommerce_default_country' ), 0, 2 ) ), 'paymentComponentId' => str_replace( '_', '-', static::GATEWAY_ID ) . '-payment-component', + 'checkoutComponentId' => str_replace( '_', '-', static::GATEWAY_ID ) . '-checkout-component', 'getCustomerDataUrl' => WC()->api_request_url( CheckoutController::GET_UNZER_CUSTOMER_SLUG ), ); } @@ -92,6 +95,10 @@ public function get_payment_method_script_handles() { return array( $this->get_identifier() . '-block-checkout' ); } + public function get_payment_method_script_handles_for_admin() { + return array(); + } + public function initialize() { if ( ! $this->should_enqueue_assets() || is_admin() ) { @@ -112,8 +119,9 @@ function ( $tag, $handle, $src ) { 10, 3 ); - wp_enqueue_script( 'unzer_ui_v2_js', 'https://static.test.unzer.com/v2/ui-components/index.js', array(), UNZER_VERSION, array( 'in_footer' => true ) ); // https://static-v2.unzer.com/v2/ui-components/index.js + wp_enqueue_script( 'unzer_ui_v2_js', 'https://static-v2.unzer.com/v2/ui-components/index.js', array(), UNZER_VERSION, array( 'in_footer' => true ) ); // https://static-v2.unzer.com/v2/ui-components/index.js wp_register_script( 'unzer_global-block-checkout', UNZER_PLUGIN_URL . '/assets/build/unzer_global.js', array( 'wc-blocks-registry' ), UNZER_VERSION, array( 'in_footer' => true ) ); + wp_enqueue_style( 'woocommerce_unzer_block_checkout_css', UNZER_PLUGIN_URL . '/assets/css/block-checkout.css', array(), UNZER_VERSION ); wp_enqueue_script( 'unzer_global-block-checkout' ); $this->settings = array( 'title' => $this->get_setting( 'title' ), diff --git a/includes/gateways/Blocks/GooglePayBlock.php b/includes/gateways/Blocks/GooglePayBlock.php index 8f98b56..d81cfb0 100644 --- a/includes/gateways/Blocks/GooglePayBlock.php +++ b/includes/gateways/Blocks/GooglePayBlock.php @@ -11,7 +11,15 @@ class GooglePayBlock extends AbstractBlock { + public const GATEWAY_ID = GooglePay::GATEWAY_ID; public const GATEWAY_CLASS = GooglePay::class; protected $name = self::GATEWAY_ID; + + public function get_payment_method_data() { + $gatewayClass = self::GATEWAY_CLASS; + return parent::get_payment_method_data() + array( + 'options' => ( new $gatewayClass() )->getPublicOptions(), + ); + } } diff --git a/includes/gateways/Blocks/PaypalBlock.php b/includes/gateways/Blocks/PaypalBlock.php index 3db3c3e..f496c10 100644 --- a/includes/gateways/Blocks/PaypalBlock.php +++ b/includes/gateways/Blocks/PaypalBlock.php @@ -9,8 +9,6 @@ } class PaypalBlock extends AbstractBlock { - - public const GATEWAY_ID = Paypal::GATEWAY_ID; public const GATEWAY_CLASS = Paypal::class; protected $name = self::GATEWAY_ID; diff --git a/includes/gateways/DirectDebitSecured.php b/includes/gateways/DirectDebitSecured.php index 2dbbd84..f2bbc86 100644 --- a/includes/gateways/DirectDebitSecured.php +++ b/includes/gateways/DirectDebitSecured.php @@ -96,6 +96,9 @@ public function get_form_fields() { 'description' => __( 'This controls the description which the user sees during checkout.', 'unzer-payments' ), 'default' => '', ), + 'additional_key_info' => array( + 'type' => 'unzer_additional_key_info', + ), 'public_key_eur_b2c' => array( 'title' => __( 'Public Key EUR/B2C', 'unzer-payments' ), 'type' => 'text', diff --git a/includes/gateways/GooglePay.php b/includes/gateways/GooglePay.php index aad8762..a9ab1b6 100644 --- a/includes/gateways/GooglePay.php +++ b/includes/gateways/GooglePay.php @@ -37,6 +37,26 @@ public function admin_options() { parent::admin_options(); } + public function getPublicOptions() { + return array( + 'gatewayMerchantId' => $this->get_option( 'channel_id' ), + 'merchantInfo' => array( + 'merchantName' => $this->get_option( 'merchant_name' ), + 'merchantId' => $this->get_option( 'merchant_id' ), + ), + 'transactionInfo' => array( + 'countryCode' => $this->get_option( 'country_code' ), + ), + 'buttonOptions' => array( + 'buttonColor' => $this->get_option( 'button_color' ), + 'buttonSizeMode' => $this->get_option( 'button_size_mode' ), + ), + 'allowCreditCards' => $this->get_option( 'credit_cards_allowed' ) === 'yes', + 'allowPrepaidCards' => $this->get_option( 'prepaid_cards_allowed' ) === 'yes', + 'allowedCardNetworks' => (array) $this->get_option( 'card_networks' ), + ); + } + public function fetchAndSaveChannelId() { if ( ! $this->get_private_key() ) { $this->update_option( 'channel_id', '' ); diff --git a/includes/gateways/Installment.php b/includes/gateways/Installment.php index b33d8af..43e1f3d 100644 --- a/includes/gateways/Installment.php +++ b/includes/gateways/Installment.php @@ -104,6 +104,9 @@ public function get_form_fields() { 'description' => __( 'This controls the description which the user sees during checkout.', 'unzer-payments' ), 'default' => '', ), + 'additional_key_info' => array( + 'type' => 'unzer_additional_key_info', + ), 'public_key_eur_b2c' => array( 'title' => __( 'Public Key EUR/B2C', 'unzer-payments' ), 'type' => 'text', diff --git a/includes/gateways/Invoice.php b/includes/gateways/Invoice.php index 5c19294..9e9c1df 100644 --- a/includes/gateways/Invoice.php +++ b/includes/gateways/Invoice.php @@ -65,6 +65,9 @@ public function get_form_fields() { 'description' => __( 'This controls the description which the user sees during checkout.', 'unzer-payments' ), 'default' => '', ), + 'additional_key_info' => array( + 'type' => 'unzer_additional_key_info', + ), 'public_key_eur_b2c' => array( 'title' => __( 'Public Key EUR/B2C', 'unzer-payments' ), 'type' => 'text', diff --git a/includes/gateways/Paypal.php b/includes/gateways/Paypal.php index c3d92a3..d94ad3c 100644 --- a/includes/gateways/Paypal.php +++ b/includes/gateways/Paypal.php @@ -81,7 +81,7 @@ public function get_form_fields() { 'default' => 'charge', ), AbstractGateway::SETTINGS_KEY_SAVE_INSTRUMENTS => array( - 'title' => __( 'Save PayPAl account for registered customers', 'unzer-payments' ), + 'title' => __( 'Save PayPal account for registered customers', 'unzer-payments' ), 'label' => __( ' ', 'unzer-payments' ), 'type' => 'select', 'description' => '', diff --git a/includes/gateways/Wero.php b/includes/gateways/Wero.php index 0ca317f..311aca3 100644 --- a/includes/gateways/Wero.php +++ b/includes/gateways/Wero.php @@ -33,25 +33,26 @@ public function get_form_fields() { 'wc_unzer_settings', array( - 'enabled' => array( + 'enabled' => array( 'title' => __( 'Enable/Disable', 'unzer-payments' ), 'label' => __( 'Enable Unzer Wero', 'unzer-payments' ), 'type' => 'checkbox', 'description' => '', 'default' => 'no', ), - 'title' => array( + 'title' => array( 'title' => __( 'Title', 'unzer-payments' ), 'type' => 'text', 'description' => __( 'This controls the title which the user sees during checkout.', 'unzer-payments' ), 'default' => __( 'Wero', 'unzer-payments' ), ), - 'description' => array( + 'description' => array( 'title' => __( 'Description', 'unzer-payments' ), 'type' => 'text', 'description' => __( 'This controls the description which the user sees during checkout.', 'unzer-payments' ), 'default' => '', ), + /* 'transaction_type' => array( 'title' => __( 'Charge or Authorize', 'unzer-payments' ), 'label' => '', @@ -63,6 +64,7 @@ public function get_form_fields() { ), 'default' => 'charge', ), + */ ) ); } @@ -71,11 +73,11 @@ public function process_payment( $order_id ) { $return = array( 'result' => 'success', ); - if ( $this->get_option( 'transaction_type' ) === AbstractGateway::TRANSACTION_TYPE_AUTHORIZE ) { - $transaction = ( new PaymentService() )->performAuthorizationForOrder( $order_id, $this, $this->paymentTypeResource ); - } else { - $transaction = ( new PaymentService() )->performChargeForOrder( $order_id, $this, $this->paymentTypeResource ); - } + // if ( $this->get_option( 'transaction_type' ) === AbstractGateway::TRANSACTION_TYPE_AUTHORIZE ) { + // $transaction = ( new PaymentService() )->performAuthorizationForOrder( $order_id, $this, $this->paymentTypeResource ); + // } else { + $transaction = ( new PaymentService() )->performChargeForOrder( $order_id, $this, $this->paymentTypeResource ); + // } $this->before_payment_redirect( $order_id ); diff --git a/includes/services/WebhookManagementService.php b/includes/services/WebhookManagementService.php index 0b51d08..d44f0de 100644 --- a/includes/services/WebhookManagementService.php +++ b/includes/services/WebhookManagementService.php @@ -4,6 +4,7 @@ use UnzerPayments\Controllers\WebhookController; use UnzerPayments\Gateways\Invoice; +use UnzerPayments\Main; use UnzerSDK\Constants\WebhookEvents; use UnzerSDK\Exceptions\UnzerApiException; use UnzerSDK\Resources\Webhook; @@ -16,11 +17,15 @@ class WebhookManagementService { */ private $unzerManager; - public function __construct( $slug = null ) { + public function __construct( $slug = null, $paymentMethod = null ) { $paymentService = new PaymentService(); if ( ! empty( $slug ) ) { - $invoiceGateway = new Invoice(); - $privateKey = $invoiceGateway->get_option( 'private_key_' . $slug ); + + $gateway = Main::getInstance()->getPaymentGateway( (string) $paymentMethod ); + if ( empty( $gateway ) ) { + throw new \Exception( 'No gateway found: ' . $paymentMethod ); + } + $privateKey = $gateway->get_option( 'private_key_' . $slug ); if ( empty( $privateKey ) ) { throw new \Exception( 'Private key not found' ); } diff --git a/languages/unzer-payments-de_AT.mo b/languages/unzer-payments-de_AT.mo index 2e5575783dc57f533f0c9fb5cfcebf2c8d30db28..911c4290b073fef74fe4c12c3881dca157c0ab46 100644 GIT binary patch delta 2373 zcmaKuO^Z}V6o#w6Kc;(3J8IkM(QBs@TGMK4jA@OE48h0<35Xyhr+DnEh8n^owmTJeRpHJEJDEQj!}J3;kCcM{!zj_wJeMf-^Muv?&|L}nuvTKf%z zrCiwGa{Jy881A5T0*@wf#cAv3$=8_p(io5;Lz?A+b-#B+>m(W^swBd}293u`vnlPq z5co5N=3t^%TH$}cG&_qI!$^Vp?hmmBivh7JkyaXaO0yBR10nR>_9lvh^4#V_$g}PR zok&FbEGnADjCafVe3-IkO~dY*7o-e9S_yR0t?~ErxTjo_Anj)Sr#x=aS3aZ4WSy^J zTJ3+3;$VG6$_1JzKCWEu6O9T~2B6~_X{R!=bstJ|hN^B`&@ReS21si;W3s-=M~VRv+gcW!3KyG`t#MGF+ZmW9e@G__Qg$HK6hsl^Bi*m(yUeD)?FyvqK9`leC_;gG*{*} z@}mz^L`bvxe~R19{J!BDQHCMy2&DTU?lv>a4dqKJY%UN}6-kSuR{u6OmaY{-J@;DB zK2O>?sKd`X?G@Tj-2!Q6Aj{;5^C4WL{hsza_laArl`D+K*XqZq${~#nxs_j7m3JYn z3A(OGFIst}a%miJ1=7wy6q-eX6d5Y+s`Krc-F%nQ_>ig#(wT*79%I4UNLtA$ZnuZ~ zea`n#iU%b=Zx8JrLn?OUul5D2D-@fHJ^u9xWcjs+WQ8Ai-C_z9zgRkxxzb;-nO!vy ze_VR~et*6+wMxYPS?ckPQ*3pnJ-3n2;?%{pPL|&-8=djYt=ietpHzf#`nm<(_OJL; zXPEc>t#j4x8`M3#R!28@o4l@a+`=7Rdr;!(Za?q0-ks#_U41|4W_Iq~EB6lJfm-YL ltea^CCh7#o-R|&^_p<+Yv{z7y^mMTN=W=P|>C4r|=wDg)xW51Z delta 2026 zcmXxl4@}f$7{KxOxI5s0yX#aqPt5bW*ohZiWpxrc=A1Ft><@0PT8p{XmTk1Pwzdif zND4tE*DEP@LJEc>|G+2=$*_%>MTE?7bEs?KpOVd+wX|%pz7M~*clYr5J@5VQ{XOrW z<9?{V`F7yqJV%S79V8YL&pVZx#$+NKsc!TrbvH=@)3G04!4tRvmwAkS$i&z<`qVpdW{kiqv_O za#JYf&+2emEHIjL29A7?WwS!d8lrdiwdp z2B>kASx%zVdmit_8@kvYcFQ_kV3M-rGrH0qb`Eh>t6S}n;+lM`_MOIq#;;Je;Jn$HurXwI8)e12QC4dJrRoWM7%%B| zXKYi`T~===%HAJCIhGSBt2l*hnfe7~b^pQ)oHcoRSgDRQ>O;A|r@*T97(Pcntjp3P zwsZQm^x(4%5o;Y2C}$vv2|jxmrLxlHR)0A@LjEEy!Zysp0pl>r85_q6oYw!Q#|w4T zx~m=K^me1n`v}Tzk02YyzHH8jglgC#8M_r_-k+n~{Ugd;Bv8+>liogL6Vxcm zr)IQ0Gm=}!v68jgj~nq2y7k)36@kMs>vN+ht1^u&ySk=ZGb5X}-lr7Hr;;eo8bUdj zQy9nJPu?yLKHHb3GuPDbd zrH^LEsuQcMXY`_M!q+HYj8iDJTr~ZcFoXO$+E5en6lrq5JVDx%#D~Nil9<+NEJvy6 z|F%d@w*1P-YB%cYoRXqFTuE`#-Xqo!vTD*;CG{$?RT5gKPUWl!?B~i))JvCXvYRb> zwL9$G$yK|qbVq&fbG4r6AYLFo)kob?cO6%(-rTp~BR%5|+CI>3Pq^R{`W_<^M3P|E zDopGqUM4mZwYtKSZ`-A}c*+WPkb4Q)@eM>K@h-uUpZj?PwOyw?ep{P%c_V=?^2doX zVk7Y;A>X8T^m=bF_W)P>2x)IwsJ*)08(h_3GCAejh@~bMs?7CTY$oJqTDGi-_?W2a QOL-?fw$**#F3AY}2be!2yZ`_I diff --git a/languages/unzer-payments-de_AT.po b/languages/unzer-payments-de_AT.po index 30c0ff5..5f0279c 100644 --- a/languages/unzer-payments-de_AT.po +++ b/languages/unzer-payments-de_AT.po @@ -697,7 +697,7 @@ msgid "PayPal" msgstr "PayPal" #: includes/gateways/Paypal.php:84 -msgid "Save PayPAl account for registered customers" +msgid "Save PayPal account for registered customers" msgstr "PayPal-Konto für registrierte Kunden speichern" #: includes/gateways/Pis.php:35 diff --git a/languages/unzer-payments-de_DE.l10n.php b/languages/unzer-payments-de_DE.l10n.php index 309fa02..336451c 100644 --- a/languages/unzer-payments-de_DE.l10n.php +++ b/languages/unzer-payments-de_DE.l10n.php @@ -150,7 +150,7 @@ 'Direct Bank Transfer' => 'Direktüberweisung', 'Enable Unzer PayPal' => 'Aktivieren Sie Unzer PayPal', 'PayPal' => 'PayPal', - 'Save PayPAl account for registered customers' => 'PayPal-Konto für registrierte Kunden speichern', + 'Save PayPal account for registered customers' => 'PayPal-Konto für registrierte Kunden speichern', 'Enable Unzer Bank Transfer' => 'Unzer Banküberweisung aktivieren', 'Bank Transfer' => 'Banküberweisung', 'Enable Unzer Post Finance Card' => 'Unzer Post Finance Card aktivieren', diff --git a/languages/unzer-payments-de_DE.mo b/languages/unzer-payments-de_DE.mo index 1792da44c9754710013a665bb94928e3ce2db335..ed3cd14c31586792e9d84a036e319ebaff743a36 100755 GIT binary patch delta 3783 zcmZA3eQ;FO8OQOnff9sBLIR0EkP9JFk`R+XKtPa}ibP&S!;4CJxnys`!saGqH-ym2 zn(|WRMbO(=+bY;8g_%yv$ZTN-rdAQDqm@AvVOplN=u|t7$RD+|YD@e5?LBm8@9^yB zoU`|ybMAA_S<=<{vzFAQ{GQ#0OCQC=>phKm1LL>w!SzIrF}?6foQHdC{SxL=|1%cg zKX4%C+#23L0)6VEu^yj8b@?gw!E5+6V^Sv4kB4Z;#ylK=?`IiPit6|)8udVK|FAw7 zAEI7~GqDTx{3+B6yo-JDs%`%Y^#Z+_t=e;O01m+%#y3?I2GKADd*Bk(z)P_ZTd)YX z;b7d0!|@o7z>BDfUq{`S%fq+fDAYjHQ2i~k#_)FPkKqW$H_ubhgRfXG;3(=>kv>fk zz3BTgcnwoZNjnSo2zFsMUPKM_ zq4jUpY|^3jL8u9oqb4vFmEw7*{uUz3YgQsFX?)cE>yWO@7Sxjcu#o(Zq;QZ1rSfgm z8eT=EFo)Mx$EB!&D^RJMiVe67HP8v$egJy+OUT(b{RbNxvaOFC60WI>6KL>_Odl8uiBSSwBL(!565M_hr`leh_L8R3KS5lWluFj;G#;x%dJqGrvG(_5?Dq zlzE$i20V*8eixACF&9w-e2!$xWDg5}K!&3-RE|n*4eI&Xc$(cd-+o_Aejla11aE$9r6~NC!p~6; zY`8NVcst%o{Y6xU4xuLUn)Q)2j=d8z2OP%^X1@;GV@KSp)%8RlYy>1tyAQ3Dnt$KDj9gTt^8r=fQL63oF4 z)TZ5n+EY)Vp5KoV#y8(4ZoalsnL<2GEGIPh3PS1E1g80DafC>EwKexL2LCp)-FXmt!%Z)6kQM6WTbliHC?~gswY6GMiMz zIzmVH8-z|qlDLalN9f89$$W0&^HJhSLccF5Hlf)=+_xnWVOBJsB2#4rP%qMmbUBm;#jY~i6yNG$=KI9Kj`_1YbcVIuFB)zNOx=5cHuHVq& zC*6i*x+3qNS;6dralwv)`rxC29|YY4b_e$iY)k)UV0I+9T(~)i7d@DAlB+!@;WZ>< zExxnLi??(*oh|K7v)k!-e$s1m+-NkWFWtDa*6Vay-B??q(y43A+!puT^`6rh^WxEj z<2AP?J1a6BHoGzZzqdObv3Q)mo%VzmbyjscQLoW$k0&clou7WW=uo8B0=IL48xM94 zdMn*M_-rKTC>|C3skkT@IdoV0+|atLpxQZ_{=0K6k~e-#Rn3^1TBmx#q_MT-Rn@`2 zM*K8#SNbO<=}1sjTAW)m$?;pF-iqdyXnWjCq!*PQ|DU8x8+9TpC@rfF)|9Ob-YMG} zw3crTiYhjz(-pOmXDW{bFIO%})ipbfE%7GLk9xi{eO01iwI53+owX;A`aUi7G0)l9 zo;bNbxiKDVAbs@>tK%nsl}LE;R@ZIw953cKd8<6X(plp9;r+A75Xp>t`f$0`uOKaL zQ74gf{ixd(Z9cjG0 delta 4845 zcmZA33vd6PSgg^+O*+6&`%)$_1VW2s;xt98Aof!7N^+KPGu~0s?JE;(N1ldR{QH$Xcvme6xtg2uz_?x&yh^Jc+vT6&!*` z?Dv|kRe;4Y$*HK${6f?T;BN|2cmHncKlS*ABDy4O( z8>gctxCE8TX8V1IJ--I)IKK&%$sgej_$KQ53Ragi`(u z)P%O6Qu;VH;~~_*BiJ~dueM%;<@A00F+PC0|LS4!gl<7)a1Ck!8&H|tV%?XqjRV%7 zp>BBJ`Y~#SpIiH}4E4*b6H!}oCF;S8ZNJ5S--XJ|W^BMcs0n_66EX7{jqx5c@I1=wi%EEjXm8mze5B|dTe`Wn0Dy4tGY4{PZ8fejBPbp2Ep^4C@)+6q3KW zoS2Jx@D|jAcHmvO3$>@iop=J{@O$*DQP-b9eoM?psDZvf-G50%oT;hSMW~hEg4)U; zcRpjxdKxOW2q{$aMD7b?eu$USe+M-{A1X;HEc5KG%hyp8{WUT-^Jnafg`<^E zwhMiH2sL0|UVde80G@-xQ41J_85K`8jkB=r0SAH=|Gw znqggtx^EfYjJKjD_BLwokDw;fXF~kEq6y4buSF#%v?tZ58BRxCI1e?@Qq%-ecs|~V z=ivjWls}Bh$Zn*r%mL(uF-K7u`YSqEJTWfnIwUz}`9$)i_x=t}XwM?ljW3`EehamC ze?$%NZ~OhAs`zcGK|N?GYT(;Y_dkM+X%3?9JArzOPGLC~O^Ua&CPPC5%|l(-gaz1x zO64Zh#2&@7@nzJ?UqfZ;O`L^CPt%uyP=s^%}K30zPe z7uzU2pZ-MDgQlRWeJ-j97ot|`+V9ulWcv4^-kQTmvdk$|X2#US6P%0v=r2YVm@&&~ z6mg;h$Kg6`!Dp~P7SvK`I1KfD16E=O{v5ZV?!S==)5Lt#gf}7sm>sBzK5hM}^>|M9 z{}c_Sbnqo{sw>c;Kh?U@db@QuswNJhR(1?a@C(#d74WmBl#jxzaRwIRRwT)0FS0gs zM196L`Q(c?%+wh(H?8t6DKz$*4(F0RF8cnGyM zgQggB6)wVCa2IB@r~jm(2Yrc;VV}$5BHV|Xz)Scp9zeZro2JGqz7MaZzZZ4?XIP5= zKux&t@_51{P+M7V`?GC-`Q_~YV7_SO#6Vn!Dw^%6fe)cp{00udW2gy#j2iGH^7~{y zM+g6odR{625a>0VgnFBgbHg9p`$g%+-bcRDIK$r_!{v5p+m)%CPHEdaR;ILA?dwGCReF!Tkg1yPZiF& zgx+D*gpL=8uM^s{CkP#S<+c*4hn<9uZxTatEn}!vb3L(wSWS#2HWS;47m0GBR#VZ> z>U3fCyh$dnQaTl?l=siZ!*ho0NCvY|~jp(%J^t#RR{w39;jI zKZ$COv|otDXSCPR?odB_cfsnsNe$_AsyX3?iIi^|y2AEUkO;fYOxJHt`Jvk!s@dTz z4O~Cn>IL8L|F8Uu_|8ivy%xvqOm+F8ndPnuy8_Q?$aSMrg_jn%LEGu?qpG51eLGjV zes{FK=&=$nbQ8Kc_ecg{;B+*!czg6t@v!Lm;-Ft5NUd_av;7AS&g<8hYE1=UG`M8D zJss^YY0R!2^ip2MHDS9Kn8j}QVmB!|JwJ37_~|g{vJah5`u1c_dV$lO>I$6ZRBjSZ z*uBa#i<6$4_M9`mZgE4;Nwqpni6Csxo-F-sUjI%v;V1kyyUyrv+4zPf-Wo4RyUDb( zDoCUPCrmlbx#j1sBMB)#+3mQ=WNIyIWbzKvbXvQT$=;`YS~jG=X5GM<=4K@@DjZrK z^%=UQqCK_Nne8=owXqIv?TmLN&Vgx6CB5v{p$qeiQ=!}YG_zElbaZU^D+89YE-k>W zGrRS|FY*fOtEw-ns;hQtYp2#to={yIJygCwZ*q2;lg-Nx8}Vvh%{(v7W~Q6l-B$M6 zYd?H2Xz~7k{|~>`$HWfK4zcYuA z#*N+CTO!Ymou7A3oF1nkIx+5z(?v4=hV1SMwfU8e6jzvN^U}SAvchdovWT?n+vPCM zdsXkxZ}XZw-)T&E&Vu%U)^(~I-)pC;(iDtVWo9N=u=77xI`i1BAWTy{U7flp`~0N# z{E}r}(3JENJhJ7#%Py|Dbat2ue3r@#7-J39(K{byjeSoi{1(TjSQEZ8|L{Rdr^QQi zA+MWn^PG;Zs2Nre*L~GOUeZ+5T2mQaU-L?Ru6C-here" msgstr "" "Die Einstellungen der Unzer API können hier angepasst " "werden" -#: includes/gateways/AbstractGateway.php:106 +#: includes/Gateways/AbstractGateway.php:107 #, php-format msgid "" "To start using Unzer payment methods, please enter your credentials first. " @@ -189,7 +124,7 @@ msgstr "" "Anmeldedaten ein
API-" "Einstellungen" -#: includes/gateways/AbstractGateway.php:275 +#: includes/Gateways/AbstractGateway.php:309 msgid "" "Turning off this feature will delete all stored payment instruments of your " "customers. Change this setting back to \"yes\" if you want to keep your " @@ -199,15 +134,23 @@ msgstr "" "Zahlungsmittel Ihrer Kunden gelöscht. Ändern Sie diese Einstellung wieder " "auf \"ja\", wenn Sie die Zahlungsmittel Ihrer Kunden behalten möchten." -#: includes/gateways/AbstractGateway.php:282 +#: includes/Gateways/AbstractGateway.php:316 msgid "Select another Unzer payment method" msgstr "Wählen Sie eine andere Unzer-Zahlungsmethode" -#: includes/gateways/AbstractGateway.php:283 +#: includes/Gateways/AbstractGateway.php:317 msgid "Return to payments" msgstr "Zurück zu den Zahlungen" -#: includes/gateways/AbstractGateway.php:436 +#: includes/Gateways/AbstractGateway.php:334 +msgid "" +"In the section below you may enter additional key pairs. If you leave fields " +"empty, the main key pair will be used by default." +msgstr "" +"Im folgenden Abschnitt können Sie zusätzliche Schlüsselpaare eingeben. Wenn " +"Sie Felder leer lassen, wird standardmäßig das Hauptschlüsselpaar verwendet." + +#: includes/Gateways/AbstractGateway.php:494 msgid "" "An error occurred while processing your payment. Please try another payment " "method." @@ -215,122 +158,109 @@ msgstr "" "Bei der Bearbeitung Ihrer Zahlung ist ein Fehler aufgetreten. Bitte " "versuchen Sie eine andere Zahlungsmethode." -#: includes/gateways/AbstractGateway.php:465 -msgid "Please enter your date of birth" -msgstr "Bitte geben Sie Ihr Geburtsdatum ein" - -#: includes/gateways/AbstractGateway.php:466 includes/gateways/Invoice.php:215 -msgid "Please enter your company type" -msgstr "Bitte geben Sie Ihren Unternehmenstyp ein" - -#: includes/gateways/AbstractGateway.php:467 +#: includes/Gateways/AbstractGateway.php:507 msgid "Please accept the SEPA mandate" msgstr "Bitte akzeptieren Sie das SEPA Mandat" -#: includes/gateways/Alipay.php:34 includes/gateways/ApplePayV2.php:60 -#: includes/gateways/Bancontact.php:34 includes/gateways/Card.php:70 -#: includes/gateways/DirectDebit.php:85 -#: includes/gateways/DirectDebitSecured.php:78 includes/gateways/Eps.php:35 -#: includes/gateways/Giropay.php:35 includes/gateways/GooglePay.php:94 -#: includes/gateways/Ideal.php:34 includes/gateways/Installment.php:83 -#: includes/gateways/Invoice.php:47 includes/gateways/Klarna.php:140 -#: includes/gateways/OpenBanking.php:65 includes/gateways/Paypal.php:51 -#: includes/gateways/Pis.php:32 includes/gateways/PostFinanceCard.php:32 -#: includes/gateways/PostFinanceEfinance.php:32 -#: includes/gateways/Prepayment.php:35 includes/gateways/Przelewy24.php:34 -#: includes/gateways/Sofort.php:32 includes/gateways/Twint.php:32 -#: includes/gateways/WeChatPay.php:34 includes/gateways/Wero.php:32 +#: includes/Gateways/Alipay.php:37 includes/Gateways/ApplePayV2.php:69 +#: includes/Gateways/Bancontact.php:36 includes/Gateways/Card.php:73 +#: includes/Gateways/DirectDebit.php:88 +#: includes/Gateways/DirectDebitSecured.php:81 includes/Gateways/Eps.php:37 +#: includes/Gateways/GooglePay.php:117 includes/Gateways/Ideal.php:36 +#: includes/Gateways/Installment.php:89 includes/Gateways/Invoice.php:50 +#: includes/Gateways/Klarna.php:143 includes/Gateways/OpenBanking.php:63 +#: includes/Gateways/Paypal.php:54 includes/Gateways/PostFinanceCard.php:35 +#: includes/Gateways/PostFinanceEfinance.php:35 +#: includes/Gateways/Prepayment.php:39 includes/Gateways/Przelewy24.php:36 +#: includes/Gateways/Twint.php:35 includes/Gateways/WeChatPay.php:36 +#: includes/Gateways/Wero.php:37 msgid "Enable/Disable" msgstr "Aktivieren/Deaktivieren" -#: includes/gateways/Alipay.php:35 +#: includes/Gateways/Alipay.php:38 msgid "Enable Unzer Alipay" msgstr "Unzer Alipay aktivieren" -#: includes/gateways/Alipay.php:41 includes/gateways/ApplePayV2.php:67 -#: includes/gateways/Bancontact.php:41 includes/gateways/Card.php:77 -#: includes/gateways/DirectDebit.php:92 -#: includes/gateways/DirectDebitSecured.php:85 includes/gateways/Eps.php:42 -#: includes/gateways/Giropay.php:42 includes/gateways/GooglePay.php:101 -#: includes/gateways/Ideal.php:41 includes/gateways/Installment.php:90 -#: includes/gateways/Invoice.php:54 includes/gateways/Klarna.php:147 -#: includes/gateways/OpenBanking.php:72 includes/gateways/Paypal.php:58 -#: includes/gateways/Pis.php:39 includes/gateways/PostFinanceCard.php:39 -#: includes/gateways/PostFinanceEfinance.php:39 -#: includes/gateways/Prepayment.php:42 includes/gateways/Przelewy24.php:41 -#: includes/gateways/Sofort.php:39 includes/gateways/Twint.php:39 -#: includes/gateways/WeChatPay.php:41 includes/gateways/Wero.php:39 +#: includes/Gateways/Alipay.php:44 includes/Gateways/ApplePayV2.php:76 +#: includes/Gateways/Bancontact.php:43 includes/Gateways/Card.php:80 +#: includes/Gateways/DirectDebit.php:95 +#: includes/Gateways/DirectDebitSecured.php:88 includes/Gateways/Eps.php:44 +#: includes/Gateways/GooglePay.php:124 includes/Gateways/Ideal.php:43 +#: includes/Gateways/Installment.php:96 includes/Gateways/Invoice.php:57 +#: includes/Gateways/Klarna.php:150 includes/Gateways/OpenBanking.php:70 +#: includes/Gateways/Paypal.php:61 includes/Gateways/PostFinanceCard.php:42 +#: includes/Gateways/PostFinanceEfinance.php:42 +#: includes/Gateways/Prepayment.php:46 includes/Gateways/Przelewy24.php:43 +#: includes/Gateways/Twint.php:42 includes/Gateways/WeChatPay.php:43 +#: includes/Gateways/Wero.php:44 msgid "Title" msgstr "Titel" -#: includes/gateways/Alipay.php:43 includes/gateways/ApplePayV2.php:69 -#: includes/gateways/Bancontact.php:43 includes/gateways/Card.php:79 -#: includes/gateways/DirectDebit.php:94 -#: includes/gateways/DirectDebitSecured.php:87 includes/gateways/Eps.php:44 -#: includes/gateways/Giropay.php:44 includes/gateways/GooglePay.php:103 -#: includes/gateways/Ideal.php:43 includes/gateways/Installment.php:92 -#: includes/gateways/Invoice.php:56 includes/gateways/Klarna.php:149 -#: includes/gateways/OpenBanking.php:74 includes/gateways/Paypal.php:60 -#: includes/gateways/Pis.php:41 includes/gateways/PostFinanceCard.php:41 -#: includes/gateways/PostFinanceEfinance.php:41 -#: includes/gateways/Prepayment.php:44 includes/gateways/Przelewy24.php:43 -#: includes/gateways/Sofort.php:41 includes/gateways/Twint.php:41 -#: includes/gateways/WeChatPay.php:43 includes/gateways/Wero.php:41 +#: includes/Gateways/Alipay.php:46 includes/Gateways/ApplePayV2.php:78 +#: includes/Gateways/Bancontact.php:45 includes/Gateways/Card.php:82 +#: includes/Gateways/DirectDebit.php:97 +#: includes/Gateways/DirectDebitSecured.php:90 includes/Gateways/Eps.php:46 +#: includes/Gateways/GooglePay.php:126 includes/Gateways/Ideal.php:45 +#: includes/Gateways/Installment.php:98 includes/Gateways/Invoice.php:59 +#: includes/Gateways/Klarna.php:152 includes/Gateways/OpenBanking.php:72 +#: includes/Gateways/Paypal.php:63 includes/Gateways/PostFinanceCard.php:44 +#: includes/Gateways/PostFinanceEfinance.php:44 +#: includes/Gateways/Prepayment.php:48 includes/Gateways/Przelewy24.php:45 +#: includes/Gateways/Twint.php:44 includes/Gateways/WeChatPay.php:45 +#: includes/Gateways/Wero.php:46 msgid "This controls the title which the user sees during checkout." msgstr "Dies steuert den Titel, den der Kunde während des Zahlvorgangs sieht." -#: includes/gateways/Alipay.php:44 +#: includes/Gateways/Alipay.php:47 msgid "Alipay" msgstr "Alipay" -#: includes/gateways/Alipay.php:47 includes/gateways/ApplePayV2.php:73 -#: includes/gateways/Bancontact.php:47 includes/gateways/Card.php:83 -#: includes/gateways/DirectDebit.php:98 -#: includes/gateways/DirectDebitSecured.php:91 includes/gateways/Eps.php:48 -#: includes/gateways/Giropay.php:48 includes/gateways/GooglePay.php:107 -#: includes/gateways/Ideal.php:47 includes/gateways/Installment.php:96 -#: includes/gateways/Invoice.php:60 includes/gateways/Klarna.php:153 -#: includes/gateways/OpenBanking.php:78 includes/gateways/Paypal.php:64 -#: includes/gateways/Pis.php:45 includes/gateways/PostFinanceCard.php:45 -#: includes/gateways/PostFinanceEfinance.php:45 -#: includes/gateways/Prepayment.php:48 includes/gateways/Przelewy24.php:47 -#: includes/gateways/Sofort.php:45 includes/gateways/Twint.php:45 -#: includes/gateways/WeChatPay.php:47 includes/gateways/Wero.php:45 +#: includes/Gateways/Alipay.php:50 includes/Gateways/ApplePayV2.php:82 +#: includes/Gateways/Bancontact.php:49 includes/Gateways/Card.php:86 +#: includes/Gateways/DirectDebit.php:101 +#: includes/Gateways/DirectDebitSecured.php:94 includes/Gateways/Eps.php:50 +#: includes/Gateways/GooglePay.php:130 includes/Gateways/Ideal.php:49 +#: includes/Gateways/Installment.php:102 includes/Gateways/Invoice.php:63 +#: includes/Gateways/Klarna.php:156 includes/Gateways/OpenBanking.php:76 +#: includes/Gateways/Paypal.php:67 includes/Gateways/PostFinanceCard.php:48 +#: includes/Gateways/PostFinanceEfinance.php:48 +#: includes/Gateways/Prepayment.php:52 includes/Gateways/Przelewy24.php:49 +#: includes/Gateways/Twint.php:48 includes/Gateways/WeChatPay.php:49 +#: includes/Gateways/Wero.php:50 msgid "Description" msgstr "Beschreibung" -#: includes/gateways/Alipay.php:49 includes/gateways/ApplePayV2.php:75 -#: includes/gateways/Bancontact.php:49 includes/gateways/Card.php:85 -#: includes/gateways/DirectDebit.php:100 -#: includes/gateways/DirectDebitSecured.php:93 includes/gateways/Eps.php:50 -#: includes/gateways/Giropay.php:50 includes/gateways/GooglePay.php:109 -#: includes/gateways/Ideal.php:49 includes/gateways/Installment.php:98 -#: includes/gateways/Invoice.php:62 includes/gateways/Klarna.php:155 -#: includes/gateways/OpenBanking.php:80 includes/gateways/Paypal.php:66 -#: includes/gateways/Pis.php:47 includes/gateways/PostFinanceCard.php:47 -#: includes/gateways/PostFinanceEfinance.php:47 -#: includes/gateways/Prepayment.php:50 includes/gateways/Przelewy24.php:49 -#: includes/gateways/Sofort.php:47 includes/gateways/Twint.php:47 -#: includes/gateways/WeChatPay.php:49 includes/gateways/Wero.php:47 +#: includes/Gateways/Alipay.php:52 includes/Gateways/ApplePayV2.php:84 +#: includes/Gateways/Bancontact.php:51 includes/Gateways/Card.php:88 +#: includes/Gateways/DirectDebit.php:103 +#: includes/Gateways/DirectDebitSecured.php:96 includes/Gateways/Eps.php:52 +#: includes/Gateways/GooglePay.php:132 includes/Gateways/Ideal.php:51 +#: includes/Gateways/Installment.php:104 includes/Gateways/Invoice.php:65 +#: includes/Gateways/Klarna.php:158 includes/Gateways/OpenBanking.php:78 +#: includes/Gateways/Paypal.php:69 includes/Gateways/PostFinanceCard.php:50 +#: includes/Gateways/PostFinanceEfinance.php:50 +#: includes/Gateways/Prepayment.php:54 includes/Gateways/Przelewy24.php:51 +#: includes/Gateways/Twint.php:50 includes/Gateways/WeChatPay.php:51 +#: includes/Gateways/Wero.php:52 msgid "This controls the description which the user sees during checkout." msgstr "" "Beschreibungstext, den Benutzer bei der Auswahl dieser Zahlungsart sehen." -#: includes/gateways/ApplePayV2.php:61 +#: includes/Gateways/ApplePayV2.php:70 msgid "Enable Unzer Apple Pay" msgstr "Aktivieren Sie Unzer Apple Pay" -#: includes/gateways/ApplePayV2.php:70 +#: includes/Gateways/ApplePayV2.php:79 msgid "Apple Pay" msgstr "Apple Pay" -#: includes/gateways/ApplePayV2.php:79 includes/gateways/Card.php:89 -#: includes/gateways/GooglePay.php:113 includes/gateways/Paypal.php:70 +#: includes/Gateways/ApplePayV2.php:88 includes/Gateways/Card.php:92 +#: includes/Gateways/GooglePay.php:136 includes/Gateways/Paypal.php:73 msgid "Charge or Authorize" msgstr "Belasten oder autorisieren" -#: includes/gateways/ApplePayV2.php:82 includes/gateways/Card.php:92 -#: includes/gateways/GooglePay.php:116 includes/gateways/Paypal.php:73 +#: includes/Gateways/ApplePayV2.php:91 includes/Gateways/Card.php:95 +#: includes/Gateways/GooglePay.php:139 includes/Gateways/Paypal.php:76 msgid "" "Choose \"authorize\", if you you want to charge the shopper at a later point " "of time" @@ -338,56 +268,56 @@ msgstr "" "Wählen Sie \"autorisieren\", wenn Sie den Käufer zu einem späteren Zeitpunkt " "belasten möchten" -#: includes/gateways/ApplePayV2.php:84 includes/gateways/Card.php:94 -#: includes/gateways/GooglePay.php:118 includes/gateways/Paypal.php:75 +#: includes/Gateways/ApplePayV2.php:93 includes/Gateways/Card.php:97 +#: includes/Gateways/GooglePay.php:141 includes/Gateways/Paypal.php:78 msgid "authorize" msgstr "Autorisieren" -#: includes/gateways/ApplePayV2.php:85 includes/gateways/Card.php:95 -#: includes/gateways/GooglePay.php:119 includes/gateways/Paypal.php:76 +#: includes/Gateways/ApplePayV2.php:94 includes/Gateways/Card.php:98 +#: includes/Gateways/GooglePay.php:142 includes/Gateways/Paypal.php:79 msgid "charge" msgstr "Belastung" -#: includes/gateways/Bancontact.php:35 +#: includes/Gateways/Bancontact.php:37 msgid "Enable Unzer Bancontact" msgstr "Unzer Bancontact aktivieren" -#: includes/gateways/Bancontact.php:44 +#: includes/Gateways/Bancontact.php:46 msgid "Bancontact" msgstr "Bancontact" -#: includes/gateways/Card.php:71 +#: includes/Gateways/Card.php:74 msgid "Enable Unzer Card Payments" msgstr "Unzer-Kartenzahlungen aktivieren" -#: includes/gateways/Card.php:80 +#: includes/Gateways/Card.php:83 msgid "Credit Card" msgstr "Kreditkarte" -#: includes/gateways/Card.php:100 +#: includes/Gateways/Card.php:103 msgid "Save card for registered customers" msgstr "Kreditkarten für registrierte Kunden speichern" -#: includes/gateways/Card.php:101 includes/gateways/Card.php:112 -#: includes/gateways/DirectDebit.php:105 includes/gateways/Paypal.php:82 +#: includes/Gateways/Card.php:104 includes/Gateways/Card.php:115 +#: includes/Gateways/DirectDebit.php:108 includes/Gateways/Paypal.php:85 msgid " " msgstr " " -#: includes/gateways/Card.php:106 includes/gateways/Card.php:117 -#: includes/gateways/DirectDebit.php:110 includes/gateways/Paypal.php:87 +#: includes/Gateways/Card.php:109 includes/Gateways/Card.php:120 +#: includes/Gateways/DirectDebit.php:113 includes/Gateways/Paypal.php:90 msgid "No" msgstr "Nein" -#: includes/gateways/Card.php:107 includes/gateways/Card.php:118 -#: includes/gateways/DirectDebit.php:111 includes/gateways/Paypal.php:88 +#: includes/Gateways/Card.php:110 includes/Gateways/Card.php:121 +#: includes/Gateways/DirectDebit.php:114 includes/Gateways/Paypal.php:91 msgid "Yes" msgstr "Ja" -#: includes/gateways/Card.php:111 +#: includes/Gateways/Card.php:114 msgid "Offer Click To Pay" msgstr "Click To Pay anbieten" -#: includes/gateways/DirectDebit.php:37 +#: includes/Gateways/DirectDebit.php:40 msgid "" "By signing this mandate form, you authorize %merchant% to send instructions " "to your bank to debit your account and your bank to debit your account in " @@ -416,50 +346,50 @@ msgstr "" "oder Dritten auf Anforderung meinen Namen, Adresse und Geburtsdatum " "vollständig mitzuteilen." -#: includes/gateways/DirectDebit.php:45 +#: includes/Gateways/DirectDebit.php:48 msgid "Unzer SEPA Direct Debit" msgstr "Unzer SEPA Lastschrift" -#: includes/gateways/DirectDebit.php:86 +#: includes/Gateways/DirectDebit.php:89 msgid "Enable Unzer SEPA Direct Debit Payments" msgstr "Unzer SEPA Lastschrift Zahlungen aktivieren" -#: includes/gateways/DirectDebit.php:95 +#: includes/Gateways/DirectDebit.php:98 msgid "SEPA Direct Debit" msgstr "SEPA Lastschrift" -#: includes/gateways/DirectDebit.php:104 +#: includes/Gateways/DirectDebit.php:107 msgid "Save bank details for registered customers" msgstr "Bankverbindung für registrierte Kunden speichern" -#: includes/gateways/DirectDebitSecured.php:37 +#: includes/Gateways/DirectDebitSecured.php:41 msgid "Unzer Direct Debit" msgstr "Unzer Lastschrift" -#: includes/gateways/DirectDebitSecured.php:79 +#: includes/Gateways/DirectDebitSecured.php:82 msgid "Enable Unzer Direct Debit Payments" msgstr "Unzer Lastschrift Zahlungen aktivieren" -#: includes/gateways/DirectDebitSecured.php:88 +#: includes/Gateways/DirectDebitSecured.php:91 msgid "Direct Debit" msgstr "Lastschrift" -#: includes/gateways/DirectDebitSecured.php:97 -#: includes/gateways/Installment.php:102 includes/gateways/Invoice.php:66 +#: includes/Gateways/DirectDebitSecured.php:103 +#: includes/Gateways/Installment.php:111 includes/Gateways/Invoice.php:72 msgid "Public Key EUR/B2C" msgstr "Öffentlicher Schlüssel EUR/B2C" -#: includes/gateways/DirectDebitSecured.php:103 -#: includes/gateways/Installment.php:108 includes/gateways/Invoice.php:72 +#: includes/Gateways/DirectDebitSecured.php:109 +#: includes/Gateways/Installment.php:117 includes/Gateways/Invoice.php:78 msgid "Private Key EUR/B2C" msgstr "Privater Schlüssel EUR/B2C" -#: includes/gateways/DirectDebitSecured.php:109 -#: includes/gateways/Installment.php:114 includes/gateways/Invoice.php:78 +#: includes/Gateways/DirectDebitSecured.php:115 +#: includes/Gateways/Installment.php:123 includes/Gateways/Invoice.php:84 msgid "Key Check EUR/B2C" msgstr "Schlüsselprüfung EUR/B2C" -#: includes/gateways/DirectDebitSecured.php:174 +#: includes/Gateways/DirectDebitSecured.php:184 #, php-format msgid "" "An amount of %1$s will be deducted from your account using the descriptor " @@ -468,127 +398,119 @@ msgstr "" "Der Betrag in Höhe von %s wird mit der Referenz '%s' von Ihrem Konto in " "Übereinstimmung mit dem SEPA-Mandat eingezogen werden" -#: includes/gateways/Eps.php:36 +#: includes/Gateways/Eps.php:38 msgid "Enable Unzer EPS" msgstr "Unzer EPS aktivieren" -#: includes/gateways/Eps.php:45 +#: includes/Gateways/Eps.php:47 msgid "EPS" msgstr "EPS" -#: includes/gateways/Giropay.php:36 -msgid "Enable Unzer Giropay" -msgstr "Unzer Giropay aktivieren" - -#: includes/gateways/Giropay.php:45 -msgid "Giropay" -msgstr "Giropay" - -#: includes/gateways/GooglePay.php:95 +#: includes/Gateways/GooglePay.php:118 msgid "Enable Unzer Google Pay" msgstr "Unzer Google Pay aktivieren" -#: includes/gateways/GooglePay.php:104 +#: includes/Gateways/GooglePay.php:127 msgid "Google Pay" msgstr "Google Pay" -#: includes/gateways/GooglePay.php:124 +#: includes/Gateways/GooglePay.php:147 msgid "Gateway Merchant ID" msgstr "Gateway Merchant ID" -#: includes/gateways/GooglePay.php:130 +#: includes/Gateways/GooglePay.php:153 msgid "Merchant ID" msgstr "Merchant ID" -#: includes/gateways/GooglePay.php:136 +#: includes/Gateways/GooglePay.php:159 msgid "Merchant Name" msgstr "Merchant Name" -#: includes/gateways/GooglePay.php:142 +#: includes/Gateways/GooglePay.php:165 msgid "Country Code" msgstr "Länder-Code" -#: includes/gateways/GooglePay.php:145 +#: includes/Gateways/GooglePay.php:168 msgid "Country code of the acquirer" msgstr "Land des Acquirers" -#: includes/gateways/GooglePay.php:147 +#: includes/Gateways/GooglePay.php:170 msgid "DK (default)" msgstr "DK (Standard)" -#: includes/gateways/GooglePay.php:154 +#: includes/Gateways/GooglePay.php:177 msgid "Allow Credit Cards" msgstr "Kreditkarten zulassen" -#: includes/gateways/GooglePay.php:161 +#: includes/Gateways/GooglePay.php:184 msgid "Allow Prepaid Cards" msgstr "Prepaid Karten zulassen" -#: includes/gateways/GooglePay.php:168 +#: includes/Gateways/GooglePay.php:191 msgid "Allowed Card Networks" msgstr "Zugelassene Kreditkarten-Anbieter" -#: includes/gateways/GooglePay.php:179 +#: includes/Gateways/GooglePay.php:202 msgid "Button Color" msgstr "Farbe des Buttons" -#: includes/gateways/GooglePay.php:184 +#: includes/Gateways/GooglePay.php:207 msgid "Google's default" msgstr "Standard" -#: includes/gateways/GooglePay.php:185 +#: includes/Gateways/GooglePay.php:208 msgid "Black" msgstr "Schwarz" -#: includes/gateways/GooglePay.php:186 +#: includes/Gateways/GooglePay.php:209 msgid "White" msgstr "Weiß" -#: includes/gateways/GooglePay.php:191 +#: includes/Gateways/GooglePay.php:214 msgid "Button Size Mode" msgstr "Größe des Buttons" -#: includes/gateways/GooglePay.php:196 +#: includes/Gateways/GooglePay.php:219 msgid "Full Width" msgstr "Volle Breite" -#: includes/gateways/GooglePay.php:197 +#: includes/Gateways/GooglePay.php:220 msgid "Static" msgstr "Statisch (kleiner)" -#: includes/gateways/Ideal.php:35 +#: includes/Gateways/Ideal.php:37 msgid "Enable Unzer iDEAL" msgstr "Aktivieren Sie Unzer iDEAL" -#: includes/gateways/Ideal.php:44 +#: includes/Gateways/Ideal.php:46 msgid "iDEAL" msgstr "iDEAL" -#: includes/gateways/Installment.php:37 +#: includes/Gateways/Installment.php:40 msgid "Unzer Installment" msgstr "Unzer Ratenzahlung" -#: includes/gateways/Installment.php:84 +#: includes/Gateways/Installment.php:90 msgid "Enable Unzer Installment" msgstr "Unzer Ratenkauf aktivieren" -#: includes/gateways/Installment.php:93 +#: includes/Gateways/Installment.php:99 msgid "Installment" msgstr "Ratenkauf" -#: includes/gateways/Installment.php:121 includes/gateways/Invoice.php:104 +#: includes/Gateways/Installment.php:130 includes/Gateways/Invoice.php:110 msgid "Public Key CHF/B2C" msgstr "Öffentlicher Schlüssel CHF/B2C" -#: includes/gateways/Installment.php:127 includes/gateways/Invoice.php:110 +#: includes/Gateways/Installment.php:136 includes/Gateways/Invoice.php:116 msgid "Private Key CHF/B2C" msgstr "Privater Schlüssel CHF/B2C" -#: includes/gateways/Installment.php:133 includes/gateways/Invoice.php:116 +#: includes/Gateways/Installment.php:142 includes/Gateways/Invoice.php:122 msgid "Key Check CHF/B2C" msgstr "Schlüsselprüfung CHF/B2C" -#: includes/gateways/Installment.php:197 +#: includes/Gateways/Installment.php:210 #, php-format msgid "" "Payment details:

Holder: %s
IBAN: %s
BIC: %s


Inhaber: %s
IBAN: %s
BIC: %s

Deskriptor :
%s" -#: includes/gateways/Invoice.php:38 +#: includes/Gateways/Invoice.php:41 msgid "Unzer Invoice" msgstr "Unzer Rechnung" -#: includes/gateways/Invoice.php:48 +#: includes/Gateways/Invoice.php:51 msgid "Enable Unzer Invoice" msgstr "Unzer Rechnung aktivieren" -#: includes/gateways/Invoice.php:57 +#: includes/Gateways/Invoice.php:60 msgid "Invoice" msgstr "Rechnungskauf" -#: includes/gateways/Invoice.php:85 +#: includes/Gateways/Invoice.php:91 msgid "Public Key EUR/B2B" msgstr "Öffentlicher Schlüssel EUR/B2B" -#: includes/gateways/Invoice.php:91 +#: includes/Gateways/Invoice.php:97 msgid "Private Key EUR/B2B" msgstr "Privater Schlüssel EUR/B2B" -#: includes/gateways/Invoice.php:97 +#: includes/Gateways/Invoice.php:103 msgid "Key Check EUR/B2B" msgstr "Schlüsselprüfung EUR/B2B" -#: includes/gateways/Invoice.php:123 +#: includes/Gateways/Invoice.php:129 msgid "Public Key CHF/B2B" msgstr "Öffentlicher Schlüssel CHF/B2B" -#: includes/gateways/Invoice.php:129 +#: includes/Gateways/Invoice.php:135 msgid "Private Key CHF/B2B" msgstr "Privater Schlüssel CHF/B2B" -#: includes/gateways/Invoice.php:135 +#: includes/Gateways/Invoice.php:141 msgid "Key Check CHF/B2B" msgstr "Schlüsselprüfung CHF/B2B" -#: includes/gateways/Invoice.php:158 -msgid "Type of company" -msgstr "Art des Unternehmens" - -#: includes/gateways/Invoice.php:161 -msgid "Association" -msgstr "Gesellschaft" - -#: includes/gateways/Invoice.php:162 -msgid "Authority" -msgstr "Behörde" - -#: includes/gateways/Invoice.php:163 -msgid "Company" -msgstr "Firma" - -#: includes/gateways/Invoice.php:164 -msgid "Sole" -msgstr "Einzelunternehmen" - -#: includes/gateways/Invoice.php:165 -msgid "Other" -msgstr "Sonstiges" - -#: includes/gateways/Invoice.php:269 includes/gateways/Prepayment.php:89 +#: includes/Gateways/Invoice.php:250 includes/Gateways/Prepayment.php:93 #, php-format msgid "" "Please transfer the amount of %s to the following account:

Inhaber: %s
IBAN: %s
BIC: %s

Bitte verwenden Sie nur " "diese Identifikationsnummer als Bezeichnung
%s" -#: includes/gateways/Klarna.php:141 +#: includes/Gateways/Klarna.php:144 msgid "Enable Unzer Klarna" msgstr "Unzer Klarna aktivieren" -#: includes/gateways/Klarna.php:150 +#: includes/Gateways/Klarna.php:153 msgid "Klarna" msgstr "Klarna" -#: includes/gateways/OpenBanking.php:66 +#: includes/Gateways/OpenBanking.php:64 msgid "Enable Unzer Direct Bank Transfer" msgstr "Unzer Direktüberweisung aktivieren" -#: includes/gateways/OpenBanking.php:75 +#: includes/Gateways/OpenBanking.php:73 msgid "Direct Bank Transfer" msgstr "Direktüberweisung" -#: includes/gateways/Paypal.php:52 +#: includes/Gateways/Paypal.php:55 msgid "Enable Unzer PayPal" msgstr "Aktivieren Sie Unzer PayPal" -#: includes/gateways/Paypal.php:61 +#: includes/Gateways/Paypal.php:64 msgid "PayPal" msgstr "PayPal" -#: includes/gateways/Paypal.php:81 -msgid "Save PayPAl account for registered customers" +#: includes/Gateways/Paypal.php:84 +#, fuzzy +#| msgid "Save PayPAl account for registered customers" +msgid "Save PayPal account for registered customers" msgstr "PayPal-Konto für registrierte Kunden speichern" -#: includes/gateways/Pis.php:33 -msgid "Enable Unzer Bank Transfer" -msgstr "Unzer Banküberweisung aktivieren" - -#: includes/gateways/Pis.php:42 -msgid "Bank Transfer" -msgstr "Banküberweisung" - -#: includes/gateways/PostFinanceCard.php:33 +#: includes/Gateways/PostFinanceCard.php:36 msgid "Enable Unzer Post Finance Card" msgstr "Unzer Post Finance Card aktivieren" -#: includes/gateways/PostFinanceCard.php:42 +#: includes/Gateways/PostFinanceCard.php:45 msgid "Post Finance Card" msgstr "Post Finance Card" -#: includes/gateways/PostFinanceEfinance.php:33 +#: includes/Gateways/PostFinanceEfinance.php:36 msgid "Enable Unzer Post Finance eFinance" msgstr "Unzer Post Finance eFinance aktivieren" -#: includes/gateways/PostFinanceEfinance.php:42 +#: includes/Gateways/PostFinanceEfinance.php:45 msgid "Post Finance eFinance" msgstr "Post Finance eFinance" -#: includes/gateways/Prepayment.php:36 +#: includes/Gateways/Prepayment.php:40 msgid "Enable Unzer Prepayment" msgstr "Unzer Vorauszahlung aktivieren" -#: includes/gateways/Prepayment.php:45 +#: includes/Gateways/Prepayment.php:49 msgid "Prepayment" msgstr "Vorauszahlung" -#: includes/gateways/Prepayment.php:54 +#: includes/Gateways/Prepayment.php:58 msgid "Order status" msgstr "Bestellstatus" -#: includes/gateways/Prepayment.php:57 +#: includes/Gateways/Prepayment.php:61 msgid "This status is assigned to all orders created with this payment method" msgstr "" "Dieser Status wird allen Bestellungen zugewiesen, die mit dieser " "Zahlungsmethode erstellt werden" -#: includes/gateways/Przelewy24.php:35 +#: includes/Gateways/Prepayment.php:62 includes/Main.php:302 +#: includes/Main.php:312 +msgid "[Use WooC default status]" +msgstr "[WooC-Standardstatus verwenden]" + +#: includes/Gateways/Przelewy24.php:37 msgid "Enable Unzer Przelewy24" msgstr "Unzer Przelewy24 aktivieren" -#: includes/gateways/Przelewy24.php:44 +#: includes/Gateways/Przelewy24.php:46 msgid "Przelewy24" msgstr "Przelewy24" -#: includes/gateways/Sofort.php:33 -msgid "Enable Unzer Sofort" -msgstr "Unzer Sofort Aktivieren" - -#: includes/gateways/Sofort.php:42 -msgid "Sofort" -msgstr "Sofort" - -#: includes/gateways/Twint.php:33 +#: includes/Gateways/Twint.php:36 msgid "Enable Unzer TWINT" msgstr "Unzer TWINT aktivieren" -#: includes/gateways/Twint.php:42 +#: includes/Gateways/Twint.php:45 msgid "TWINT" msgstr "TWINT" -#: includes/gateways/WeChatPay.php:35 +#: includes/Gateways/WeChatPay.php:37 msgid "Enable Unzer WeChat Pay" msgstr "Aktivieren Sie Unzer WeChat Pay" -#: includes/gateways/WeChatPay.php:44 +#: includes/Gateways/WeChatPay.php:46 msgid "WeChat Pay" msgstr "WeChat Bezahlen" -#: includes/gateways/Wero.php:33 +#: includes/Gateways/Wero.php:38 msgid "Enable Unzer Wero" msgstr "Unzer Wero aktivieren" -#: includes/gateways/Wero.php:42 +#: includes/Gateways/Wero.php:47 msgid "Wero" msgstr "Wero" -#: includes/services/DashboardService.php:32 +#: includes/Main.php:154 includes/Main.php:187 +msgid "Chargeback" +msgstr "Chargeback" + +#: includes/Main.php:164 includes/Main.php:188 +msgid "Ready to Capture" +msgstr "Bereit zum Zahlungseinzug" + +#: includes/Main.php:174 includes/Main.php:189 +msgid "Waiting for payment" +msgstr "Warten auf Zahlung" + +#: includes/Main.php:259 +msgid "Unzer Transactions" +msgstr "Unzer-Transaktionen" + +#: includes/Main.php:263 +msgid "Unzer API settings" +msgstr "Unzer API-Einstellungen" + +#: includes/Main.php:282 +msgid "Public Key" +msgstr "Öffentlicher Schlüssel" + +#: includes/Main.php:290 +msgid "Private Key" +msgstr "Privater Schlüssel" + +#: includes/Main.php:298 +msgid "Order status for authorized payments" +msgstr "Auftragsstatus für Aufträge mit autorisierter Zahlung" + +#: includes/Main.php:301 +msgid "This status is assigned for orders, that are authorized" +msgstr "Dieser Status wird für autorisierte Aufträge vergeben" + +#: includes/Main.php:308 +msgid "Order status for captured payments" +msgstr "Auftragsstatus für Aufträge mit eingezogener Zahlung" + +#: includes/Main.php:311 +msgid "This status is assigned for orders, that are captured" +msgstr "" +"Dieser Status wird für Aufträge vergeben, deren Zahlung eingezogen wurde" + +#: includes/Main.php:318 +msgid "Order status for chargebacks" +msgstr "Auftragsstatus für Aufträge mit Chargeback" + +#: includes/Main.php:321 +msgid "This status is assigned for orders with chargebacks" +msgstr "" +"Dieser Status wird für Aufträge vergeben, bei denen ein Chargeback " +"stattgefunden hat" + +#: includes/Main.php:322 +msgid "[No status change]" +msgstr "[Status nicht ändern]" + +#: includes/Services/DashboardService.php:32 #, php-format msgid "" "A chargeback has been received. Please check the payment details for order %s" @@ -786,19 +734,19 @@ msgstr "" "Es hat ein Chargeback bei Bestellung %s stattgefunden. Bitte überprüfen Sie " "diesen Fall." -#: includes/services/DashboardService.php:35 +#: includes/Services/DashboardService.php:35 msgid "Could not create apple-developer-merchantid-domain-association file" msgstr "DIe Apple Domain Datei konnte nicht erstellt werden" -#: includes/services/DashboardService.php:40 +#: includes/Services/DashboardService.php:40 msgid "Dismiss this notification" msgstr "Ausblenden" -#: includes/services/OrderService.php:348 +#: includes/Services/OrderService.php:288 msgid "Payment complete event failed." msgstr "Abschluss der Zahlung ist fehlgeschlagen." -#: includes/services/PaymentService.php:151 +#: includes/Services/PaymentService.php:166 msgid "" "Installment payment is only available for shipping and billing address with " "the same name" @@ -806,48 +754,43 @@ msgstr "" "Ratenzahlung ist nur möglich, wenn Liefer- und Rechnungsadresse denselben " "Namen haben" -#: includes/services/PaymentService.php:191 +#: includes/Services/PaymentService.php:206 msgid "Unzer Payment ID: " msgstr "Unzer Payment ID: " -#: includes/services/PaymentService.php:304 +#: includes/Services/PaymentService.php:319 #, php-format msgid "Unable to do refund: Maximum amount for single refund is %s." msgstr "" "Erstattung nicht möglich: Maximaler Betrag für eine einzelne Erstattung ist " "%s." -#: includes/services/PaymentService.php:305 +#: includes/Services/PaymentService.php:320 #, php-format msgid "However, you may refund in up to %s smaller chunks." msgstr "Es ist jedoch möglich bis zu %s einzelne Erstattungen vorzunehmen." -#: includes/services/PaymentService.php:306 +#: includes/Services/PaymentService.php:321 msgid "Original error message: " msgstr "Ursprüngliche Fehlermeldung: " -#: includes/services/PaymentService.php:335 +#: includes/Services/PaymentService.php:350 msgid "Refund not possible" msgstr "Rückerstattung nicht möglich" -#: includes/services/PaymentService.php:340 -msgid "Reversals prior to capturing are only allowed for the full amount" -msgstr "" -"Stornierungen vor Zahlungseinzug sind nur in Höhe des vollen Betrags möglich" - -#: includes/services/PaymentService.php:345 +#: includes/Services/PaymentService.php:357 msgid "Reversal not possible" msgstr "Stornierung nicht möglich" -#: includes/traits/SavePaymentInstrumentTrait.php:24 +#: includes/Traits/SavePaymentInstrumentTrait.php:24 msgid "Save this for my next purchase" msgstr "Für meinen nächsten Einkauf speichern" -#: includes/traits/SavePaymentInstrumentTrait.php:38 +#: includes/Traits/SavePaymentInstrumentTrait.php:38 msgid "Use another one" msgstr "Andere" -#: unzer-payments.php:53 +#: unzer-payments.php:62 msgid "Unzer requires WooCommerce to be installed and active." msgstr "WooCommerce muss installiert und aktiv sein." @@ -867,6 +810,68 @@ msgstr "Unzer" msgid "https://www.unzer.com" msgstr "https://www.unzer.com" +#~ msgid "Payment Instructions" +#~ msgstr "Zahlungsanweisungen" + +#~ msgid "Detailed Transactions" +#~ msgstr "Detaillierte Transaktionen" + +#~ msgid "Show Debug Information" +#~ msgstr "Debug-Informationen anzeigen" + +#~ msgid "Total amount" +#~ msgstr "Gesamtbetrag" + +#~ msgid "Charged amount" +#~ msgstr "Eingezogener Betrag" + +#~ msgid "Please enter your date of birth" +#~ msgstr "Bitte geben Sie Ihr Geburtsdatum ein" + +#~ msgid "Please enter your company type" +#~ msgstr "Bitte geben Sie Ihren Unternehmenstyp ein" + +#~ msgid "Enable Unzer Giropay" +#~ msgstr "Unzer Giropay aktivieren" + +#~ msgid "Giropay" +#~ msgstr "Giropay" + +#~ msgid "Type of company" +#~ msgstr "Art des Unternehmens" + +#~ msgid "Association" +#~ msgstr "Gesellschaft" + +#~ msgid "Authority" +#~ msgstr "Behörde" + +#~ msgid "Company" +#~ msgstr "Firma" + +#~ msgid "Sole" +#~ msgstr "Einzelunternehmen" + +#~ msgid "Other" +#~ msgstr "Sonstiges" + +#~ msgid "Enable Unzer Bank Transfer" +#~ msgstr "Unzer Banküberweisung aktivieren" + +#~ msgid "Bank Transfer" +#~ msgstr "Banküberweisung" + +#~ msgid "Enable Unzer Sofort" +#~ msgstr "Unzer Sofort Aktivieren" + +#~ msgid "Sofort" +#~ msgstr "Sofort" + +#~ msgid "Reversals prior to capturing are only allowed for the full amount" +#~ msgstr "" +#~ "Stornierungen vor Zahlungseinzug sind nur in Höhe des vollen Betrags " +#~ "möglich" + #~ msgid "Apple Pay certificate settings" #~ msgstr "Einstellungen für Apple Pay-Zertifikate" diff --git a/languages/unzer-payments-de_DE_formal.mo b/languages/unzer-payments-de_DE_formal.mo index 6a608a794de750a3681346e9b82e7d023d5d7e3d..e102abfdd2cf22b8658af351949f832ea2670444 100644 GIT binary patch delta 2413 zcmaKu&yQ3^5XXCd|Ja#@VS!;B@HvcTz!3)&TvjAxLx8LS6SIklM$o+pAtqc*P?L>E zj+_1q_Q1h2ClADU@Zf>N9y}2Lf;|zB97z1stM6-=WaWi<{drZ@)zwwiy}bD8pUv^J z-ya{S@(MgY9EHBF6<^4<29r&O#Sq?hBdDI}PNH?_#J&((j6XBJ=^AJuk?HV-ti1=J zDHrP|dp76ZWzstJVHB zBw5-&#J6i<>xb!E?*BZa>n=fB2cmIJ9=ED_R!3<+kSYo(_mFl5eWaPY)tQ~9<4Fgp z{~(Mn?O$XB{w&+AS3-*5?} zJVBZX750DBCns5nqaYnbQOy@5AJVpCtC0=S(CW%K^o3hP?Rc>+-dY}=9v@;B>#{y3K6<_gD6P8X0MsqY55=o z%4!m*(5*Iyubk42=F*B*KAU_(itF_hx10IB#C44Z^pLv4h87gkFmG)#E-Nn>{P{-{d^&F(L z4b}G0Hj=F56t~;MLmvGPNQwtZe9|7;eTS&1$iM9i)>%j_Dtr9vGGv*yhqQ(7`MJg< zQ2cV?!^|c9Ii2a%1M%U)tA7WcEKIEz(cefjZaKwPXWDZesV&ZATBDzWqi5O#U5xuxImz&n2+T60Dm$}+{8zLwO z240WKOBfn28f-0wNQneCqbsmK!K3&*4&XXm?h=W|w{aQnz(j1f z`@1oLc0W3C7$+h{&f+54or^^nO8Rj*evK*kJMz8oC0|h$Z5?tq>JZJSQ|Yw(yU{~? z0F&?xrr`yQ!oQH0%$rRSAz#xH5nj^8+YLBmx4%Wb>K8K@5eil@pte52R6L2yNY0~9 z_bTf2=Z!xyls2+d#7*mr?X>Nj*%F!Ut6_jud|HoLIErLI{zhJmF%cOGHZmEV&r#mk z02xDFY9GEy=LMa`R*`BU|}tI2cJ%xVn@K&db2f~W9Xpwgxwy-`)QAwZihF%hv{U~x@4vt zsX5JFYb6J}-R9YH-&=dc(roBv|6gH4&% zRUN2jwHtMny{LOTifoVkWL}63_$t|u8)+RtU1dM&)f1>!{cHxfs+L2hy~mK0%W2ea z{bu(&jWf>cspc?ghCage*n>_}7?WLk0xNgvNbUc9&Tt9wL9yqrVr{Re}X zvBLT>T8nzGEjWU8=*A~jTDx3=I)`#h!7%Fe?Y1Xur);lb0-t+$OnJ=AOuVnCnY!k9 z0Cgw6!6i6rT_cGcKFw+duEl&@gtbVbqy<@&jG4^|-VK$cLf74fI@2z@J%IY{leijF zcq_t3@B!S1>v0OXL{{dAJcKXe)7WQb5>i$*Q}f?vo!BANJB{Kvo<%)b9l6&0JMl5v zgQh4kJ6OfTyOdTvYNkF$4wHO=I?7elr)}2sCI$-1@~jipfJyXzih72=L=TRkK3&sx z{}qg-{Rc*%F`=Y%_j}Y{C$5)9Q=F6@um3)p-)d8tl$+H=P4BB^7qN!WJZWL+@)EI4 z8|UHS{EEd6xLVxLtv?L)0E73JEinit(); } ); -