mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 18:16:38 +08:00
Allow create payment when changing subscription payment method (WIP)
This commit is contained in:
parent
16eebecc5a
commit
dc9ad87b3e
3 changed files with 59 additions and 43 deletions
|
@ -212,6 +212,19 @@ trait ContextTrait {
|
||||||
return $page_id && is_page( $page_id ) && isset( $wp->query_vars['add-payment-method'] );
|
return $page_id && is_page( $page_id ) && isset( $wp->query_vars['add-payment-method'] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether this user is changing the payment method for a subscription.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function is_subscription_change_payment_method_page(): bool {
|
||||||
|
if ( isset( $_GET['change_payment_method'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
|
||||||
|
return wcs_is_subscription( wc_clean( wp_unslash( $_GET['change_payment_method'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if it is the block editor page.
|
* Checks if it is the block editor page.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -38,54 +38,57 @@ document.addEventListener(
|
||||||
.then((paypal) => {
|
.then((paypal) => {
|
||||||
errorHandler.clear();
|
errorHandler.clear();
|
||||||
|
|
||||||
paypal.Buttons(
|
const paypalButtonContainer = document.querySelector(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`);
|
||||||
{
|
if(paypalButtonContainer) {
|
||||||
createVaultSetupToken: async () => {
|
paypal.Buttons(
|
||||||
const response = await fetch(ppcp_add_payment_method.ajax.create_setup_token.endpoint, {
|
{
|
||||||
method: "POST",
|
createVaultSetupToken: async () => {
|
||||||
credentials: 'same-origin',
|
const response = await fetch(ppcp_add_payment_method.ajax.create_setup_token.endpoint, {
|
||||||
headers: {
|
method: "POST",
|
||||||
'Content-Type': 'application/json',
|
credentials: 'same-origin',
|
||||||
},
|
headers: {
|
||||||
body: JSON.stringify({
|
'Content-Type': 'application/json',
|
||||||
nonce: ppcp_add_payment_method.ajax.create_setup_token.nonce,
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
nonce: ppcp_add_payment_method.ajax.create_setup_token.nonce,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
|
||||||
|
|
||||||
const result = await response.json()
|
const result = await response.json()
|
||||||
if (result.data.id) {
|
if (result.data.id) {
|
||||||
return result.data.id
|
return result.data.id
|
||||||
}
|
}
|
||||||
|
|
||||||
errorHandler.message(ppcp_add_payment_method.error_message);
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
||||||
},
|
},
|
||||||
onApprove: async ({vaultSetupToken}) => {
|
onApprove: async ({vaultSetupToken}) => {
|
||||||
const response = await fetch(ppcp_add_payment_method.ajax.create_payment_token.endpoint, {
|
const response = await fetch(ppcp_add_payment_method.ajax.create_payment_token.endpoint, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
credentials: 'same-origin',
|
credentials: 'same-origin',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
nonce: ppcp_add_payment_method.ajax.create_payment_token.nonce,
|
nonce: ppcp_add_payment_method.ajax.create_payment_token.nonce,
|
||||||
vault_setup_token: vaultSetupToken,
|
vault_setup_token: vaultSetupToken,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
|
||||||
|
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
if(result.success === true) {
|
if(result.success === true) {
|
||||||
window.location.href = ppcp_add_payment_method.payment_methods_page;
|
window.location.href = ppcp_add_payment_method.payment_methods_page;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error(error)
|
||||||
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
errorHandler.message(ppcp_add_payment_method.error_message);
|
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
).render(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`);
|
||||||
console.error(error)
|
}
|
||||||
errorHandler.message(ppcp_add_payment_method.error_message);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
).render(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`);
|
|
||||||
|
|
||||||
const cardField = paypal.CardFields({
|
const cardField = paypal.CardFields({
|
||||||
createVaultSetupToken: async () => {
|
createVaultSetupToken: async () => {
|
||||||
|
@ -167,7 +170,7 @@ document.addEventListener(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.querySelector('#place_order').addEventListener("click", (event) => {
|
document.querySelector('#place_order')?.addEventListener("click", (event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
cardField.submit()
|
cardField.submit()
|
||||||
|
|
|
@ -176,7 +176,7 @@ class SavePaymentMethodsModule implements ModuleInterface {
|
||||||
add_action(
|
add_action(
|
||||||
'wp_enqueue_scripts',
|
'wp_enqueue_scripts',
|
||||||
function() use ( $c ) {
|
function() use ( $c ) {
|
||||||
if ( ! is_user_logged_in() || ! $this->is_add_payment_method_page() ) {
|
if ( ! is_user_logged_in() || ! ( $this->is_add_payment_method_page() || $this->is_subscription_change_payment_method_page() ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue