diff --git a/modules/ppcp-save-payment-methods/resources/js/add-payment-method.js b/modules/ppcp-save-payment-methods/resources/js/add-payment-method.js index 963fe0dc6..d861421e4 100644 --- a/modules/ppcp-save-payment-methods/resources/js/add-payment-method.js +++ b/modules/ppcp-save-payment-methods/resources/js/add-payment-method.js @@ -28,17 +28,66 @@ document.addEventListener( init() }); - loadScript({ - clientId: ppcp_add_payment_method.client_id, - merchantId: ppcp_add_payment_method.merchant_id, - dataUserIdToken: ppcp_add_payment_method.id_token, - components: 'buttons,card-fields', - }) - .then((paypal) => { - errorHandler.clear(); - - paypal.Buttons( - { + setTimeout(() => { + loadScript({ + clientId: ppcp_add_payment_method.client_id, + merchantId: ppcp_add_payment_method.merchant_id, + dataUserIdToken: ppcp_add_payment_method.id_token, + components: 'buttons,card-fields', + }) + .then((paypal) => { + errorHandler.clear(); + + paypal.Buttons( + { + createVaultSetupToken: async () => { + const response = await fetch(ppcp_add_payment_method.ajax.create_setup_token.endpoint, { + method: "POST", + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + nonce: ppcp_add_payment_method.ajax.create_setup_token.nonce, + }) + }) + + const result = await response.json() + if (result.data.id) { + return result.data.id + } + + errorHandler.message(ppcp_add_payment_method.error_message); + }, + onApprove: async ({vaultSetupToken}) => { + const response = await fetch(ppcp_add_payment_method.ajax.create_payment_token.endpoint, { + method: "POST", + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + nonce: ppcp_add_payment_method.ajax.create_payment_token.nonce, + vault_setup_token: vaultSetupToken, + }) + }) + + const result = await response.json(); + if(result.success === true) { + window.location.href = ppcp_add_payment_method.payment_methods_page; + return; + } + + errorHandler.message(ppcp_add_payment_method.error_message); + }, + onError: (error) => { + console.error(error) + errorHandler.message(ppcp_add_payment_method.error_message); + } + }, + ).render(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`); + + const cardField = paypal.CardFields({ createVaultSetupToken: async () => { const response = await fetch(ppcp_add_payment_method.ajax.create_setup_token.endpoint, { method: "POST", @@ -48,6 +97,8 @@ document.addEventListener( }, body: JSON.stringify({ nonce: ppcp_add_payment_method.ajax.create_setup_token.nonce, + payment_method: PaymentMethods.CARDS, + verification_method: ppcp_add_payment_method.verification_method }) }) @@ -68,6 +119,7 @@ document.addEventListener( body: JSON.stringify({ nonce: ppcp_add_payment_method.ajax.create_payment_token.nonce, vault_setup_token: vaultSetupToken, + payment_method: PaymentMethods.CARDS }) }) @@ -83,98 +135,48 @@ document.addEventListener( console.error(error) errorHandler.message(ppcp_add_payment_method.error_message); } - }, - ).render(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`); - - const cardField = paypal.CardFields({ - createVaultSetupToken: async () => { - const response = await fetch(ppcp_add_payment_method.ajax.create_setup_token.endpoint, { - method: "POST", - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - nonce: ppcp_add_payment_method.ajax.create_setup_token.nonce, - payment_method: PaymentMethods.CARDS, - verification_method: ppcp_add_payment_method.verification_method - }) - }) - - const result = await response.json() - if (result.data.id) { - return result.data.id + }); + + if (cardField.isEligible()) { + const nameField = document.getElementById('ppcp-credit-card-gateway-card-name'); + if (nameField) { + let styles = cardFieldStyles(nameField); + cardField.NameField({style: {'input': styles}}).render(nameField.parentNode); + nameField.hidden = true; } - errorHandler.message(ppcp_add_payment_method.error_message); - }, - onApprove: async ({vaultSetupToken}) => { - const response = await fetch(ppcp_add_payment_method.ajax.create_payment_token.endpoint, { - method: "POST", - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - nonce: ppcp_add_payment_method.ajax.create_payment_token.nonce, - vault_setup_token: vaultSetupToken, - payment_method: PaymentMethods.CARDS - }) - }) - - const result = await response.json(); - if(result.success === true) { - window.location.href = ppcp_add_payment_method.payment_methods_page; - return; + const numberField = document.getElementById('ppcp-credit-card-gateway-card-number'); + if (numberField) { + let styles = cardFieldStyles(numberField); + cardField.NumberField({style: {'input': styles}}).render(numberField.parentNode); + numberField.hidden = true; } - errorHandler.message(ppcp_add_payment_method.error_message); - }, - onError: (error) => { - console.error(error) - errorHandler.message(ppcp_add_payment_method.error_message); - } - }); - - if (cardField.isEligible()) { - const nameField = document.getElementById('ppcp-credit-card-gateway-card-name'); - if (nameField) { - let styles = cardFieldStyles(nameField); - cardField.NameField({style: {'input': styles}}).render(nameField.parentNode); - nameField.hidden = true; - } - - const numberField = document.getElementById('ppcp-credit-card-gateway-card-number'); - if (numberField) { - let styles = cardFieldStyles(numberField); - cardField.NumberField({style: {'input': styles}}).render(numberField.parentNode); - numberField.hidden = true; - } - - const expiryField = document.getElementById('ppcp-credit-card-gateway-card-expiry'); - if (expiryField) { - let styles = cardFieldStyles(expiryField); - cardField.ExpiryField({style: {'input': styles}}).render(expiryField.parentNode); - expiryField.hidden = true; - } + const expiryField = document.getElementById('ppcp-credit-card-gateway-card-expiry'); + if (expiryField) { + let styles = cardFieldStyles(expiryField); + cardField.ExpiryField({style: {'input': styles}}).render(expiryField.parentNode); + expiryField.hidden = true; + } - const cvvField = document.getElementById('ppcp-credit-card-gateway-card-cvc'); - if (cvvField) { - let styles = cardFieldStyles(cvvField); - cardField.CVVField({style: {'input': styles}}).render(cvvField.parentNode); - cvvField.hidden = true; + const cvvField = document.getElementById('ppcp-credit-card-gateway-card-cvc'); + if (cvvField) { + let styles = cardFieldStyles(cvvField); + cardField.CVVField({style: {'input': styles}}).render(cvvField.parentNode); + cvvField.hidden = true; + } } - } - document.querySelector('#place_order').addEventListener("click", (event) => { - event.preventDefault(); + document.querySelector('#place_order').addEventListener("click", (event) => { + event.preventDefault(); - cardField.submit() - .catch((error) => { - console.error(error) - }); - }); - }) + cardField.submit() + .catch((error) => { + console.error(error) + }); + }); + }) + }, 1000) } ); diff --git a/modules/ppcp-save-payment-methods/src/Endpoint/CreatePaymentToken.php b/modules/ppcp-save-payment-methods/src/Endpoint/CreatePaymentToken.php index 7ed30b8eb..6698c4340 100644 --- a/modules/ppcp-save-payment-methods/src/Endpoint/CreatePaymentToken.php +++ b/modules/ppcp-save-payment-methods/src/Endpoint/CreatePaymentToken.php @@ -100,8 +100,7 @@ public function handle_request(): bool { if ( is_user_logged_in() && isset( $result->customer->id ) ) { update_user_meta( get_current_user_id(), '_ppcp_target_customer_id', $result->customer->id ); - $payment_method = $data['payment_method'] ?? ''; - if ( $payment_method === PayPalGateway::ID ) { + if ( isset( $result->payment_source->paypal ) ) { $email = ''; if ( isset( $result->payment_source->paypal->email_address ) ) { $email = $result->payment_source->paypal->email_address; @@ -114,7 +113,7 @@ public function handle_request(): bool { ); } - if ( $payment_method === CreditCardGateway::ID ) { + if ( isset( $result->payment_source->card ) ) { $token = new \WC_Payment_Token_CC(); $token->set_token( $result->id ); $token->set_user_id( get_current_user_id() );