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

Supply correct payment method instance to process_redirect_payment #6170

Merged
merged 9 commits into from
May 10, 2023

Conversation

mdmoore
Copy link
Member

@mdmoore mdmoore commented Apr 27, 2023

Fixes #5854, Fixes #5781

Changes proposed in this Pull Request

The crux of the the problem here is an early return in process_redirect_payment. It's this early return that prevents the UPE payment intent from being removed from the session, causing the issue described in #5781. UPE_Split_Payment_Gateway extends UPE_Payment_Gateway and overrides get_selected_payment_method to redefine the logic with a simple check against $this->stripe_id. The problem is that $this->stripe_id is always card due to hooks in the parent class resetting the stripe id for it's own uses. So redirect payment methods such as giropay are always compared to card and we return false. That's fine as that's what UPE_Payment_Gateway needs and UPE_Split_Payment_Gateway doesn't need the stripe_id at this point in the execution. We really only need an instance of the payment method which we can get from the upe_payment_method_map via WC_Payments::get_payment_method_by_id().

Testing

The goal is to test that process_redirect_payment fully completes. This would mean that remove_upe_intent_from_session() runs as well, which covers testing for both #5854 and #5781. Testing with Xdebug breakpoints has been problematic because the hooks that initiate this process fire multiple times, making it confusing as to whats actually occurring. I've found it best to just use Logger::log() to ensure the process completes.

  1. Add a log statement immediately after this line indicating that the process has completed, e.g. Logger::log( 'process_redirect_payment has completed' )
  2. Enable Split UPE Checkout via WCPay Dev Tools.
  3. Go to the client DB and delete all rows in the wp_woocommerce_sessions table. This will ensure no upe_payment_intent is present yet.
  4. Complete a checkout using a redirect payment method such as Giropay, making sure to Authorize Test Payment at Stripe.
  5. Repeat step 4 at least 2 more times, using the same product and payment method. Reports have indicated that the payment intent error in UPE: Purchasing same item twice in a row gives intent error #5781 requires 3 purchases.
  6. Check logs for the message used in step 1.
  7. Ensure that the following error doesn't occur on the checkout page:

Error: The parameter application_fee_amount cannot be updated on a PaymentIntent after a capture has already been made.


  • 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

@botwoo
Copy link
Collaborator

botwoo commented Apr 27, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 6170 or branch name fix/5854-use-correct-payment-method-id 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: f8340d4
  • Build time: 2023-05-10 17:59:22 UTC

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

@github-actions
Copy link
Contributor

github-actions bot commented Apr 27, 2023

Size Change: 0 B

Total Size: 1.1 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.01 kB
release/woocommerce-payments/assets/css/success.css 401 B
release/woocommerce-payments/dist/blocks-checkout.css 1.4 kB
release/woocommerce-payments/dist/blocks-checkout.js 39.8 kB
release/woocommerce-payments/dist/checkout.css 444 B
release/woocommerce-payments/dist/checkout.js 27.9 kB
release/woocommerce-payments/dist/index.css 37.8 kB
release/woocommerce-payments/dist/index.js 236 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 58.2 kB
release/woocommerce-payments/dist/multi-currency.css 2.99 kB
release/woocommerce-payments/dist/multi-currency.js 52.7 kB
release/woocommerce-payments/dist/order.css 248 B
release/woocommerce-payments/dist/order.js 15 kB
release/woocommerce-payments/dist/payment-gateways.css 704 B
release/woocommerce-payments/dist/payment-gateways.js 31.3 kB
release/woocommerce-payments/dist/payment-request.js 12 kB
release/woocommerce-payments/dist/platform-checkout-express-button.js 16.6 kB
release/woocommerce-payments/dist/platform-checkout.css 4.04 kB
release/woocommerce-payments/dist/platform-checkout.js 70.4 kB
release/woocommerce-payments/dist/settings.css 8.62 kB
release/woocommerce-payments/dist/settings.js 159 kB
release/woocommerce-payments/dist/subscription-edit-page.js 668 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 13 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 703 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 298 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 11.9 kB
release/woocommerce-payments/dist/tos.css 236 B
release/woocommerce-payments/dist/tos.js 14.5 kB
release/woocommerce-payments/dist/upe_checkout.css 444 B
release/woocommerce-payments/dist/upe_checkout.js 33.1 kB
release/woocommerce-payments/dist/upe_split_checkout.css 444 B
release/woocommerce-payments/dist/upe_split_checkout.js 33.5 kB
release/woocommerce-payments/dist/upe_with_deferred_intent_creation_checkout.js 31.4 kB
release/woocommerce-payments/dist/upe-blocks-checkout.css 1.4 kB
release/woocommerce-payments/dist/upe-blocks-checkout.js 39.1 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout.css 1.41 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout.js 39.7 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-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.07 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 387 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

@mdmoore mdmoore changed the title WIP Supply correct payment method instance to process_redirect_payment Apr 28, 2023
@mdmoore mdmoore requested review from a team and timur27 and removed request for a team April 28, 2023 18:39
@mdmoore mdmoore marked this pull request as ready for review April 28, 2023 18:40
@mdmoore mdmoore requested review from FangedParakeet and removed request for timur27 May 9, 2023 14:58
@mdmoore mdmoore requested a review from FangedParakeet May 10, 2023 17:53
Copy link
Contributor

@FangedParakeet FangedParakeet left a comment

Choose a reason for hiding this comment

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

Tested with a few different LPMs and all the metadata appears to be lining up now: transaction details look correct, with the correct order details and payment method details, and I was unable to produce the well-known and dreaded "application_fee_amount" error message.

Changes LGTM. It's worth noting that for now, the parent function UPE_Payment_Gateway::set_payment_method_title_for_order is still required for some payment flows with the split-UPE, but when the deferred intent UPE reaches fully operational parity, we will need to remove it.

But that'll be a story for another day. For today, let's :shipit:.

@mdmoore mdmoore added this pull request to the merge queue May 10, 2023
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks May 10, 2023
@mdmoore mdmoore added this pull request to the merge queue May 10, 2023
Merged via the queue into develop with commit 731a512 May 10, 2023
@mdmoore mdmoore deleted the fix/5854-use-correct-payment-method-id branch May 10, 2023 19:47
@isaacshed
Copy link

Unfortunately your order cannot be processed as the originating bank/merchant has declined your transaction. Please attempt your purchase again.

Quickteller Business Payment Gateway

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants