Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable deferred intent creation UPE for SEPA #7232

Merged
merged 12 commits into from
Sep 20, 2023

Conversation

timur27
Copy link
Contributor

@timur27 timur27 commented Sep 19, 2023

Fixes #7113

Changes proposed in this Pull Request

After SEPA has been disabled as a reusable payment method (including Subscriptions) in #7107, this PR removes the fallback from the deferred intent creation UPE to legacy UPE so that SEPA can be seamlessly used with the deferred intent creation UPE.

Testing instructions

Legacy UPE

  1. Navigate to WCPay DevTools and enable legacy UPE
  2. Enable SEPA in Payments -> Settings
  3. Confirm that shortcode & Blocks checkout both work as expected when paying with SEPA for a physical product (check the order status in WC Core and Stripe Dashboard)
  4. Confirm that shortcode & Blocks checkout don't list SEPA as an option for subscription-based carts nor allow saving SEPA payment method for future usage (more details in: Temporarily disable saving SEPA #7107)
  5. Enable Stripe Link and perform two payments (shortcode checkout & Blocks) to confirm that Stripe Link works as expected after changes that touched this area a bit

Deferred intent creation UPE

  1. Navigate to WCPay DevTools and enable deferred intent creation UPE
  2. Enable SEPA in Payments -> Settings
  3. Open the shortcode checkout page and confirm that there's no fallback to the legacy UPE and instead SEPA is listed as part of the deferred UPE gateways list
  4. Perform steps 3-5 from the previous testing block above on the legacy UPE

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@timur27 timur27 force-pushed the feature/enable-sepa-for-deferred-intent-upe branch from 01a8998 to df9e9bf Compare September 19, 2023 09:27
@botwoo
Copy link
Collaborator

botwoo commented Sep 19, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7232 or branch name feature/enable-sepa-for-deferred-intent-upe in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: ad9ca3c
  • Build time: 2023-09-20 10:37:52 UTC

Note: the build is updated when a new commit is pushed to this PR.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 19, 2023

Size Change: 0 B

Total Size: 1.41 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.03 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 1.51 kB
release/woocommerce-payments/dist/blocks-checkout.css 1.51 kB
release/woocommerce-payments/dist/blocks-checkout.js 73.7 kB
release/woocommerce-payments/dist/checkout-rtl.css 440 B
release/woocommerce-payments/dist/checkout.css 441 B
release/woocommerce-payments/dist/checkout.js 28.7 kB
release/woocommerce-payments/dist/index-rtl.css 36.2 kB
release/woocommerce-payments/dist/index.css 36.2 kB
release/woocommerce-payments/dist/index.js 281 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 2.88 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.1 kB
release/woocommerce-payments/dist/multi-currency.css 2.88 kB
release/woocommerce-payments/dist/multi-currency.js 54.7 kB
release/woocommerce-payments/dist/order-rtl.css 676 B
release/woocommerce-payments/dist/order.css 679 B
release/woocommerce-payments/dist/order.js 40.9 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 690 B
release/woocommerce-payments/dist/payment-gateways.css 692 B
release/woocommerce-payments/dist/payment-gateways.js 38.4 kB
release/woocommerce-payments/dist/payment-request-rtl.css 146 B
release/woocommerce-payments/dist/payment-request.css 146 B
release/woocommerce-payments/dist/payment-request.js 11.6 kB
release/woocommerce-payments/dist/product-details.js 789 B
release/woocommerce-payments/dist/settings-rtl.css 8.9 kB
release/woocommerce-payments/dist/settings.css 8.91 kB
release/woocommerce-payments/dist/settings.js 231 kB
release/woocommerce-payments/dist/subscription-edit-page.js 669 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 519 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 519 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.3 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 693 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 117 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 117 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.4 kB
release/woocommerce-payments/dist/tos-rtl.css 230 B
release/woocommerce-payments/dist/tos.css 231 B
release/woocommerce-payments/dist/tos.js 21.9 kB
release/woocommerce-payments/dist/upe_checkout-rtl.css 440 B
release/woocommerce-payments/dist/upe_checkout.css 441 B
release/woocommerce-payments/dist/upe_checkout.js 34 kB
release/woocommerce-payments/dist/upe_split_checkout-rtl.css 440 B
release/woocommerce-payments/dist/upe_split_checkout.css 441 B
release/woocommerce-payments/dist/upe_split_checkout.js 34.6 kB
release/woocommerce-payments/dist/upe_with_deferred_intent_creation_checkout.js 36.6 kB
release/woocommerce-payments/dist/upe-blocks-checkout-rtl.css 1.51 kB
release/woocommerce-payments/dist/upe-blocks-checkout.css 1.51 kB
release/woocommerce-payments/dist/upe-blocks-checkout.js 39.5 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout-rtl.css 1.51 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout.css 1.51 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout.js 41 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 146 B
release/woocommerce-payments/dist/woopay-express-button.css 146 B
release/woocommerce-payments/dist/woopay-express-button.js 50.6 kB
release/woocommerce-payments/dist/woopay-rtl.css 3.85 kB
release/woocommerce-payments/dist/woopay.css 3.85 kB
release/woocommerce-payments/dist/woopay.js 71.6 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 633 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 720 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.43 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.01 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 522 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 581 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 160 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.32 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.8 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.32 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 291 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 403 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.56 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 299 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 742 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 572 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 411 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.63 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.8 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.83 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 502 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 355 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 429 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 781 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.27 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 392 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.06 kB

compressed-size-action

@timur27 timur27 changed the title Feature/enable sepa for deferred intent upe Enable deferred intent creation UPE for SEPA Sep 19, 2023
@timur27 timur27 marked this pull request as ready for review September 19, 2023 14:58
@timur27 timur27 requested review from a team and frosso and removed request for a team September 19, 2023 15:01
Copy link
Contributor

@frosso frosso left a comment

Choose a reason for hiding this comment

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

Tested, all the changes look good 👍 just a minor question on the mandate check

* @return boolean True if mandate must be shown and acknowledged by customer before deferred intent UPE payment can be processed, false otherwise.
*/
public function does_payment_method_require_mandate_data() {
$is_link_payment = Payment_Method::CARD === $this->get_selected_stripe_payment_type_id() && in_array( Payment_Method::LINK, $this->get_upe_enabled_payment_method_ids(), true );
Copy link
Contributor

Choose a reason for hiding this comment

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

Is it accurate to say that $is_link_payment could be true if the payment method was CC and the merchant enabled Stripe Link? (i.e.: does this check accurately tell us if the customer paid with Stripe Link, and not just with CC?)
And would it matter?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Is it accurate to say that $is_link_payment could be true if the payment method was CC and the merchant enabled Stripe Link?

Yes. But it'd be inaccurate to say that $is_link_payment could be true if and only if the payment method was CC and the merchant chose Stripe Link. Because for the use-case, when someone's paying with CC w/o choosing Stripe Link (but having it enabled), $is_link_payment will be true as well.

does this check accurately tell us if the customer paid with Stripe Link, and not just with CC?

Unfortunately, no.

The check will be true for Stripe Link enabled, even if it's not used. Consequently, the mandate_data will be sent for plain CC payments as well. This logic is being followed to support the process. I think that the Stripe Link initialisation logic on the back-end has a room for improvement and should be further improved/refined.

And would it matter?

mandate_data is added to the payment intent request only in case we're confirming the intent, and Stripe uses it to validate that we've shown the terms to a user before the order placement. I think Stripe takes this parameter only if it's needed (e.g. when SEPA payment is used) and checks if we've sent it. For card payments, this parameter will be redundant and in my opinion won't be checked by Stripe.

I think I need to change $is_link_payment name to something like $is_link_enabled to better reflect the reality. (done in 361cef7) Other than that, I'm happy to refine this existing Stripe Link logic further if needed. Let me know your thoughts!

Copy link
Contributor

Choose a reason for hiding this comment

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

Thank you for the explanation! I like the rename you've done, I think it'll provide better clarity for future wanderers and adventurers 👍

*
* @return boolean False since card payment does not require mandate.
*/
protected function does_payment_method_require_mandate_data() {
Copy link
Contributor

Choose a reason for hiding this comment

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

(minor) just as an alternative with the is_/has_ prefixes convention that is present in most of the codebase, what are your thoughts on naming this new method to is_mandate_data_required?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sure, makes total sense, thank you! 765db74

@timur27 timur27 force-pushed the feature/enable-sepa-for-deferred-intent-upe branch from 21e814b to 765db74 Compare September 20, 2023 10:31
@timur27 timur27 requested a review from frosso September 20, 2023 10:32
Copy link
Contributor

@frosso frosso left a comment

Choose a reason for hiding this comment

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

Looking good, thanks for the changes!

@timur27 timur27 added this pull request to the merge queue Sep 20, 2023
Merged via the queue into develop with commit 4f668be Sep 20, 2023
@timur27 timur27 deleted the feature/enable-sepa-for-deferred-intent-upe branch September 20, 2023 11:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Make stores eligible for deferred intent UPE when SEPA is active
3 participants