mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 18:16:38 +08:00
Merge pull request #2156 from woocommerce/PCP-2920-incorrect-pricing-issue-with-variable-subscriptions-in-pay-pal-subscriptions-mode
Incorrect Pricing Issue with Variable Subscriptions in PayPal Subscriptions Mode (2920)
This commit is contained in:
commit
f0bb72d421
7 changed files with 47 additions and 7 deletions
|
@ -120,8 +120,13 @@ const PayPalComponent = ({
|
||||||
};
|
};
|
||||||
|
|
||||||
const createSubscription = async (data, actions) => {
|
const createSubscription = async (data, actions) => {
|
||||||
|
let planId = config.scriptData.subscription_plan_id;
|
||||||
|
if (config.scriptData.variable_paypal_subscription_variation_from_cart !== '') {
|
||||||
|
planId = config.scriptData.variable_paypal_subscription_variation_from_cart;
|
||||||
|
}
|
||||||
|
|
||||||
return actions.subscription.create({
|
return actions.subscription.create({
|
||||||
'plan_id': config.scriptData.subscription_plan_id
|
'plan_id': planId
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,11 @@ class CartActionHandler {
|
||||||
this.errorHandler = errorHandler;
|
this.errorHandler = errorHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
subscriptionsConfiguration() {
|
subscriptionsConfiguration(subscription_plan_id) {
|
||||||
return {
|
return {
|
||||||
createSubscription: (data, actions) => {
|
createSubscription: (data, actions) => {
|
||||||
return actions.subscription.create({
|
return actions.subscription.create({
|
||||||
'plan_id': this.config.subscription_plan_id
|
'plan_id': subscription_plan_id
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onApprove: (data, actions) => {
|
onApprove: (data, actions) => {
|
||||||
|
|
|
@ -12,7 +12,7 @@ class CheckoutActionHandler {
|
||||||
this.spinner = spinner;
|
this.spinner = spinner;
|
||||||
}
|
}
|
||||||
|
|
||||||
subscriptionsConfiguration() {
|
subscriptionsConfiguration(subscription_plan_id) {
|
||||||
return {
|
return {
|
||||||
createSubscription: async (data, actions) => {
|
createSubscription: async (data, actions) => {
|
||||||
try {
|
try {
|
||||||
|
@ -22,7 +22,7 @@ class CheckoutActionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
return actions.subscription.create({
|
return actions.subscription.create({
|
||||||
'plan_id': this.config.subscription_plan_id
|
'plan_id': subscription_plan_id
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onApprove: (data, actions) => {
|
onApprove: (data, actions) => {
|
||||||
|
|
|
@ -90,7 +90,12 @@ class CartBootstrap {
|
||||||
PayPalCommerceGateway.data_client_id.has_subscriptions
|
PayPalCommerceGateway.data_client_id.has_subscriptions
|
||||||
&& PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled
|
&& PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled
|
||||||
) {
|
) {
|
||||||
this.renderer.render(actionHandler.subscriptionsConfiguration());
|
let subscription_plan_id = PayPalCommerceGateway.subscription_plan_id
|
||||||
|
if(PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart !== '') {
|
||||||
|
subscription_plan_id = PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart
|
||||||
|
}
|
||||||
|
|
||||||
|
this.renderer.render(actionHandler.subscriptionsConfiguration(subscription_plan_id));
|
||||||
|
|
||||||
if(!PayPalCommerceGateway.subscription_product_allowed) {
|
if(!PayPalCommerceGateway.subscription_product_allowed) {
|
||||||
this.gateway.button.is_disabled = true;
|
this.gateway.button.is_disabled = true;
|
||||||
|
|
|
@ -106,7 +106,11 @@ class CheckoutBootstap {
|
||||||
PayPalCommerceGateway.data_client_id.has_subscriptions
|
PayPalCommerceGateway.data_client_id.has_subscriptions
|
||||||
&& PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled
|
&& PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled
|
||||||
) {
|
) {
|
||||||
this.renderer.render(actionHandler.subscriptionsConfiguration(), {}, actionHandler.configuration());
|
let subscription_plan_id = PayPalCommerceGateway.subscription_plan_id
|
||||||
|
if(PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart !== '') {
|
||||||
|
subscription_plan_id = PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart
|
||||||
|
}
|
||||||
|
this.renderer.render(actionHandler.subscriptionsConfiguration(subscription_plan_id), {}, actionHandler.configuration());
|
||||||
|
|
||||||
if(!PayPalCommerceGateway.subscription_product_allowed) {
|
if(!PayPalCommerceGateway.subscription_product_allowed) {
|
||||||
this.gateway.button.is_disabled = true;
|
this.gateway.button.is_disabled = true;
|
||||||
|
|
|
@ -1111,6 +1111,7 @@ document.querySelector("#payment").before(document.querySelector("#ppcp-messages
|
||||||
'subscription_plan_id' => $this->subscription_helper->paypal_subscription_id(),
|
'subscription_plan_id' => $this->subscription_helper->paypal_subscription_id(),
|
||||||
'vault_v3_enabled' => $this->vault_v3_enabled,
|
'vault_v3_enabled' => $this->vault_v3_enabled,
|
||||||
'variable_paypal_subscription_variations' => $this->subscription_helper->variable_paypal_subscription_variations(),
|
'variable_paypal_subscription_variations' => $this->subscription_helper->variable_paypal_subscription_variations(),
|
||||||
|
'variable_paypal_subscription_variation_from_cart' => $this->subscription_helper->paypal_subscription_variation_from_cart(),
|
||||||
'subscription_product_allowed' => $this->subscription_helper->checkout_subscription_product_allowed(),
|
'subscription_product_allowed' => $this->subscription_helper->checkout_subscription_product_allowed(),
|
||||||
'locations_with_subscription_product' => $this->subscription_helper->locations_with_subscription_product(),
|
'locations_with_subscription_product' => $this->subscription_helper->locations_with_subscription_product(),
|
||||||
'enforce_vault' => $this->has_subscriptions(),
|
'enforce_vault' => $this->has_subscriptions(),
|
||||||
|
|
|
@ -315,4 +315,29 @@ class SubscriptionHelper {
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the variation subscription plan id from the cart.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function paypal_subscription_variation_from_cart(): string {
|
||||||
|
$cart = WC()->cart ?? null;
|
||||||
|
if ( ! $cart || $cart->is_empty() ) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$items = $cart->get_cart_contents();
|
||||||
|
foreach ( $items as $item ) {
|
||||||
|
$variation_id = $item['variation_id'] ?? 0;
|
||||||
|
if ( $variation_id ) {
|
||||||
|
$variation_product = wc_get_product( $variation_id ) ?? '';
|
||||||
|
if ( $variation_product && $variation_product->meta_exists( 'ppcp_subscription_plan' ) ) {
|
||||||
|
return $variation_product->get_meta( 'ppcp_subscription_plan' )['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue