Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Fix free trial subscriptions orders missing payment method meta #4854

Merged
merged 1 commit into from
Sep 28, 2021

Conversation

ricardo
Copy link
Member

@ricardo ricardo commented Sep 28, 2021

Fixes #4853

Issue in Stripe: woocommerce/woocommerce-gateway-stripe#1964

When debugging the issue above in the Stripe plugin, I found that free trial subscriptions purchased via the blocks checkout didn't have the payment method post meta. This caused free trial subscriptions to always require manual renewals after the trial period ended.

This is possibly affecting pre-orders and other types of off-session based orders, although I only tested the issue with the subscriptions extension.

I reproduced the issue in Stripe and WooCommerce Payments, but this is probably happening in all payment gateways that support free trial subscriptions.

Apparently when the code got refactored, it wasn't refactored into its equivalent previous functionality, so it led to the inconsistency mentioned above.

Screenshots

Before: Payment method didn't get saved and required manual renewals

Free trial subscriptions purchased via checkout block - Before fix

After: Payment method gets saved and supports automatic renewals

Free trial subscriptions purchased via checkout block - After fix

Testing

Automated Tests

  • Changes in this PR are covered by Automated Tests.
    • Unit tests
    • E2E tests

Manual Testing

How to test the changes in this Pull Request:

  1. Ensure you have WooCommerce Subscriptions and Stripe installed and activated.
  2. Sign up for a stripe.com account
  3. Enable test mode and add test API private and secret keys to your account under WooCommerce > Settings > Payments > Stripe.
  4. Navigate to Products > Add new and type a product name: e.g "Free trial subscription".
  5. Set the product data to Simple subscription.
  6. Add a subscription price and a free trial period.
  7. Save the product.
  8. As a shopper, add the newly created free trial subscription to the cart and proceed to the checkout block.
  9. Complete the purchase with a Stripe test card: 4242424242424242 and any valid CVC and expiration date.
  10. Navigate to WooCommerce > Subscriptions and notice the newly created subscription is renewable "Via Credit card / debit card".

Performance Impact

Changelog

Fix missing payment method meta data for free orders

@@ -461,7 +461,7 @@ private function update_customer_from_request( \WP_REST_Request $request ) {
*/
private function update_order_from_request( \WP_REST_Request $request ) {
$this->order->set_customer_note( $request['customer_note'] ?? '' );
$this->order->set_payment_method( $this->order->needs_payment() ? $this->get_request_payment_method( $request ) : '' );
$this->order->set_payment_method( $this->get_request_payment_method( $request ) );
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Initially I just thought I should keep the diff small as I'm not familiar with the codebase, but apparently the function get_request_payment_method is only being used here.

We could perhaps replace it for get_request_payment_method_id and remove the other one.

@github-actions
Copy link
Contributor

Size Change: 0 B

Total Size: 1.23 MB

ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 8.35 kB
build/active-filters.js 8.01 kB
build/all-products-frontend.js 23.1 kB
build/all-products.js 37 kB
build/all-reviews.js 9.56 kB
build/atomic-block-components/add-to-cart--atomic-block-components/button--atomic-block-components/image---a7e2bb9b.js 2.66 kB
build/atomic-block-components/add-to-cart--atomic-block-components/button.js 1.81 kB
build/atomic-block-components/add-to-cart--atomic-block-components/image--atomic-block-components/title.js 332 B
build/atomic-block-components/add-to-cart-frontend.js 8.39 kB
build/atomic-block-components/add-to-cart.js 7.72 kB
build/atomic-block-components/button-frontend.js 1.74 kB
build/atomic-block-components/button.js 875 B
build/atomic-block-components/category-list-frontend.js 472 B
build/atomic-block-components/category-list.js 476 B
build/atomic-block-components/image-frontend.js 1.88 kB
build/atomic-block-components/image.js 1.35 kB
build/atomic-block-components/price-frontend.js 2.13 kB
build/atomic-block-components/price.js 2.11 kB
build/atomic-block-components/rating-frontend.js 563 B
build/atomic-block-components/rating.js 567 B
build/atomic-block-components/sale-badge-frontend.js 861 B
build/atomic-block-components/sale-badge.js 869 B
build/atomic-block-components/sku-frontend.js 392 B
build/atomic-block-components/sku.js 392 B
build/atomic-block-components/stock-indicator-frontend.js 612 B
build/atomic-block-components/stock-indicator.js 611 B
build/atomic-block-components/summary-frontend.js 908 B
build/atomic-block-components/summary.js 911 B
build/atomic-block-components/tag-list-frontend.js 467 B
build/atomic-block-components/tag-list.js 472 B
build/atomic-block-components/title-frontend.js 1.47 kB
build/atomic-block-components/title.js 1.29 kB
build/attribute-filter-frontend.js 18.6 kB
build/attribute-filter.js 12.2 kB
build/blocks-checkout.js 21.1 kB
build/cart-blocks/checkout-button-frontend.js 2.4 kB
build/cart-blocks/empty-cart-frontend.js 327 B
build/cart-blocks/express-payment--checkout-blocks/express-payment--checkout-blocks/payment-frontend.js 4.73 kB
build/cart-blocks/express-payment-frontend.js 1.58 kB
build/cart-blocks/filled-cart-frontend.js 781 B
build/cart-blocks/items-frontend.js 254 B
build/cart-blocks/line-items-frontend.js 5.52 kB
build/cart-blocks/order-summary--checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 3.69 kB
build/cart-blocks/order-summary-frontend.js 7.31 kB
build/cart-blocks/totals-frontend.js 269 B
build/cart-frontend.js 91.6 kB
build/cart-i2-frontend.js 52.5 kB
build/cart-i2.js 47.8 kB
build/cart.js 46.6 kB
build/checkout-blocks/actions-frontend.js 1.47 kB
build/checkout-blocks/billing-address-frontend.js 2.64 kB
build/checkout-blocks/contact-information-frontend.js 3.88 kB
build/checkout-blocks/express-payment-frontend.js 1.92 kB
build/checkout-blocks/fields-frontend.js 290 B
build/checkout-blocks/order-note-frontend.js 1.56 kB
build/checkout-blocks/order-summary-frontend.js 12.7 kB
build/checkout-blocks/payment-frontend.js 4.58 kB
build/checkout-blocks/shipping-address-frontend.js 3.04 kB
build/checkout-blocks/shipping-methods-frontend.js 5.55 kB
build/checkout-blocks/terms-frontend.js 1.64 kB
build/checkout-blocks/totals-frontend.js 271 B
build/checkout-frontend.js 54.4 kB
build/checkout.js 52.6 kB
build/featured-category.js 7.73 kB
build/featured-product.js 9.42 kB
build/handpicked-products.js 6.26 kB
build/mini-cart-component-frontend.js 36.5 kB
build/mini-cart-frontend.js 2.35 kB
build/mini-cart.js 2.34 kB
build/price-filter-frontend.js 14.3 kB
build/price-filter.js 9.63 kB
build/price-format.js 1.37 kB
build/product-best-sellers.js 6.61 kB
build/product-categories.js 3.38 kB
build/product-category.js 7.49 kB
build/product-new.js 6.77 kB
build/product-on-sale.js 7.13 kB
build/product-search.js 2.66 kB
build/product-tag.js 6.58 kB
build/product-top-rated.js 6.74 kB
build/products-by-attribute.js 7.7 kB
build/reviews-by-category.js 11.5 kB
build/reviews-by-product.js 13 kB
build/reviews-frontend.js 8.96 kB
build/single-product-frontend.js 26.2 kB
build/single-product.js 9.77 kB
build/stock-filter-frontend.js 8.76 kB
build/stock-filter.js 7.81 kB
build/vendors--atomic-block-components/add-to-cart--cart-blocks/order-summary--checkout-blocks/billing-ad--c5eb4dcd-frontend.js 16.2 kB
build/vendors--atomic-block-components/add-to-cart-frontend.js 4.77 kB
build/vendors--atomic-block-components/price--cart-blocks/line-items--cart-blocks/order-summary--checkout--8a3571de-frontend.js 5.71 kB
build/vendors--cart-blocks/line-items--checkout-blocks/order-summary-frontend.js 3.1 kB
build/vendors--cart-blocks/order-summary--checkout-blocks/billing-address--checkout-blocks/order-summary---eb4d2cec-frontend.js 5.02 kB
build/wc-blocks-data.js 11.3 kB
build/wc-blocks-editor-style-rtl.css 15.6 kB
build/wc-blocks-editor-style.css 15.6 kB
build/wc-blocks-google-analytics.js 1.98 kB
build/wc-blocks-middleware.js 1.47 kB
build/wc-blocks-registry.js 3.71 kB
build/wc-blocks-shared-context.js 1.54 kB
build/wc-blocks-shared-hocs.js 1.75 kB
build/wc-blocks-style-rtl.css 20.4 kB
build/wc-blocks-style.css 20.4 kB
build/wc-blocks-vendors-style-rtl.css 1.37 kB
build/wc-blocks-vendors-style.css 1.37 kB
build/wc-blocks-vendors.js 254 kB
build/wc-blocks.js 3.5 kB
build/wc-payment-method-bacs.js 806 B
build/wc-payment-method-cheque.js 806 B
build/wc-payment-method-cod.js 898 B
build/wc-payment-method-paypal.js 839 B
build/wc-payment-method-stripe.js 12.2 kB
build/wc-settings.js 2.91 kB

compressed-size-action

Copy link
Contributor

@tjcafferkey tjcafferkey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. This tests well, and I get the expected outcome.

Screenshot 2021-09-28 at 10 59 13

@github-actions github-actions bot added this to the 6.0.0 milestone Sep 28, 2021
@ricardo ricardo merged commit 90e513b into trunk Sep 28, 2021
@ricardo ricardo deleted the fix/free-orders-missing-payment-method branch September 28, 2021 15:30
senadir added a commit that referenced this pull request Oct 18, 2021
senadir added a commit that referenced this pull request Oct 26, 2021
senadir added a commit that referenced this pull request Oct 26, 2021
* Revert "Fix free orders missing payment method (#4854)"

This reverts commit 90e513b.

* use Cart needs payment instead of Order needs payment

* switch to nullish coalescing

* remove extra line
jonny-bull pushed a commit to jonny-bull/woocommerce-gutenberg-products-block that referenced this pull request Dec 14, 2021
* Revert "Fix free orders missing payment method (woocommerce#4854)"

This reverts commit 90e513b.

* use Cart needs payment instead of Order needs payment

* switch to nullish coalescing

* remove extra line
jonny-bull pushed a commit to jonny-bull/woocommerce-gutenberg-products-block that referenced this pull request Dec 16, 2021
* Revert "Fix free orders missing payment method (woocommerce#4854)"

This reverts commit 90e513b.

* use Cart needs payment instead of Order needs payment

* switch to nullish coalescing

* remove extra line
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Payment method doesn't get saved for free trial subscriptions
2 participants