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

Always show Express payment buttons for Pay for Order page #7535

Merged
merged 4 commits into from
Nov 2, 2023

Conversation

elazzabi
Copy link
Member

@elazzabi elazzabi commented Oct 23, 2023

Fixes #6650

Changes proposed in this Pull Request

A while ago, a regression was introduced making Express pay buttons not showing in the Pay for Order page. This fixes the issue.

Testing instructions

You'll need these requirements to test this PR:

  • Apple Pay/Google Pay setup
  • An SSL-accessible website for your local env (like Jurassic tunnel)

Testing instructions:

  • Take a Needs Payments order (you can create a new order and select cash)
  • Go to WooCommerce > Orders > Your order. Copy the link in "Customer Payment page"
Screenshot 2023-10-23 at 12 13 48
  • Open the link in either Safari/Chrome. There should not be a button for Google Pay/Apple Pay
  • Get this PR and refresh the page
  • The button for Google Pay/Apple Pay should be showing now next to WooPay (and after the order summary)

  • 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 Oct 23, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7535 or branch name fix/express-pay-pay-for-order-page 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: d5e949b
  • Build time: 2023-10-31 14:58:14 UTC

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

@github-actions
Copy link
Contributor

github-actions bot commented Oct 23, 2023

Size Change: +2.52 kB (0%)

Total Size: 1.44 MB

Filename Size Change
release/woocommerce-payments/assets/css/admin.css 1.06 kB +20 B (+2%)
release/woocommerce-payments/dist/blocks-checkout-rtl.css 1.8 kB +1 B (0%)
release/woocommerce-payments/dist/blocks-checkout.css 1.8 kB +1 B (0%)
release/woocommerce-payments/dist/blocks-checkout.js 75.1 kB -76 B (0%)
release/woocommerce-payments/dist/checkout-rtl.css 441 B +1 B (0%)
release/woocommerce-payments/dist/checkout.css 442 B +1 B (0%)
release/woocommerce-payments/dist/checkout.js 28.9 kB -72 B (0%)
release/woocommerce-payments/dist/index-rtl.css 36.4 kB -20 B (0%)
release/woocommerce-payments/dist/index.css 36.4 kB -18 B (0%)
release/woocommerce-payments/dist/index.js 284 kB +230 B (0%)
release/woocommerce-payments/dist/multi-currency-rtl.css 3.39 kB +509 B (+18%) ⚠️
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.2 kB -37 B (0%)
release/woocommerce-payments/dist/multi-currency.css 3.39 kB +513 B (+18%) ⚠️
release/woocommerce-payments/dist/multi-currency.js 55.4 kB +477 B (+1%)
release/woocommerce-payments/dist/order.js 41.1 kB -13 B (0%)
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.3 kB +609 B (+88%) 🆘
release/woocommerce-payments/dist/payment-gateways.css 1.3 kB +607 B (+88%) 🆘
release/woocommerce-payments/dist/payment-gateways.js 39 kB +442 B (+1%)
release/woocommerce-payments/dist/payment-request-rtl.css 153 B +7 B (+5%) 🔍
release/woocommerce-payments/dist/payment-request.css 153 B +7 B (+5%) 🔍
release/woocommerce-payments/dist/payment-request.js 13.1 kB -31 B (0%)
release/woocommerce-payments/dist/settings-rtl.css 9.99 kB +905 B (+10%) ⚠️
release/woocommerce-payments/dist/settings.css 10 kB +909 B (+10%) ⚠️
release/woocommerce-payments/dist/settings.js 232 kB -1.89 kB (-1%)
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.4 kB -40 B (0%)
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.5 kB -42 B (0%)
release/woocommerce-payments/dist/tos.js 22 kB -38 B (0%)
release/woocommerce-payments/dist/upe_checkout-rtl.css 441 B +1 B (0%)
release/woocommerce-payments/dist/upe_checkout.css 442 B +1 B (0%)
release/woocommerce-payments/dist/upe_split_checkout-rtl.css 441 B +1 B (0%)
release/woocommerce-payments/dist/upe_split_checkout.css 442 B +1 B (0%)
release/woocommerce-payments/dist/upe_with_deferred_intent_creation_checkout.js 37.1 kB +73 B (0%)
release/woocommerce-payments/dist/upe-blocks-checkout-rtl.css 1.8 kB +1 B (0%)
release/woocommerce-payments/dist/upe-blocks-checkout.css 1.8 kB +1 B (0%)
release/woocommerce-payments/dist/upe-blocks-checkout.js 40.9 kB -39 B (0%)
release/woocommerce-payments/dist/upe-split-blocks-checkout-rtl.css 1.8 kB +1 B (0%)
release/woocommerce-payments/dist/upe-split-blocks-checkout.css 1.8 kB +1 B (0%)
release/woocommerce-payments/dist/upe-split-blocks-checkout.js 42.5 kB -41 B (0%)
release/woocommerce-payments/dist/woopay-express-button-rtl.css 153 B +7 B (+5%) 🔍
release/woocommerce-payments/dist/woopay-express-button.css 153 B +7 B (+5%) 🔍
release/woocommerce-payments/dist/woopay-express-button.js 52 kB -54 B (0%)
release/woocommerce-payments/dist/woopay.js 71.7 kB -43 B (0%)
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.03 kB -170 B (-14%) 👏
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.6 kB +42 B (+1%)
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB -231 B (-2%)
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/order-rtl.css 676 B
release/woocommerce-payments/dist/order.css 679 B
release/woocommerce-payments/dist/product-details.js 898 B
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-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/tos-rtl.css 230 B
release/woocommerce-payments/dist/tos.css 231 B
release/woocommerce-payments/dist/upe_checkout.js 34.1 kB
release/woocommerce-payments/dist/upe_split_checkout.js 34.7 kB
release/woocommerce-payments/dist/woopay-rtl.css 3.91 kB
release/woocommerce-payments/dist/woopay.css 3.91 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 814 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/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/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/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.05 kB

compressed-size-action

Copy link
Contributor

@dpaun1985 dpaun1985 left a comment

Choose a reason for hiding this comment

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

LGTM
Screenshot 2023-10-23 at 16 08 34

I tested and works as described, however I have the question above.

@@ -499,6 +499,11 @@ public function should_show_payment_request_button() {
return false;
}

// Order total doesn't matter for Pay for Order page. Thus, this page should always display payment buttons.
if ( $this->is_pay_for_order_page() ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

shouldn't we check if all the products are supported by the payment request button ( most of the conditions from has_allowed_items_in_cart method ) ?

Copy link
Member Author

Choose a reason for hiding this comment

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

Hmmm, I think you are right! I'm unfamiliar with the logic and helpers here, but it looks like $this->is_product_supported() does that check right?

Copy link
Contributor

Choose a reason for hiding this comment

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

yes. I think so.

Copy link
Member Author

Choose a reason for hiding this comment

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

Moved the check a little down as discussed.

Copy link
Contributor

Choose a reason for hiding this comment

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

I agree with @elazzabi, moving the check down LGTM.

Copy link
Contributor

@hsingyuc hsingyuc left a comment

Choose a reason for hiding this comment

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

@elazzabi LGTM

@pierorocca @elizaan36 Pinging you here for the design input. Below is what I see on the pay-for-order page with the Google pay button. Does the button separation look good or should the button display next to the WooPay button?
Screen Shot 2023-10-27 at 4 10 21 PM

@elazzabi
Copy link
Member Author

Thank you @hsingyuc for looking! I agree that it should probably show close to the WooPay button. I'll take a look and see why it's showing there

@pierorocca
Copy link
Contributor

Thank you @hsingyuc for looking! I agree that it should probably show close to the WooPay button. I'll take a look and see why it's showing there

Most likely because we were under the assumption Pay for Order didn't support GPay and Apple Pay so we chose a button location based what we felt was the optimal location - after the invoice, and before the payment form. That pattern best matches the pattern found on cart and checkout.

@pierorocca
Copy link
Contributor

For clarity the GPay and Apple Pay button should render below the WooPay button.

Copy link
Contributor

@dpaun1985 dpaun1985 left a comment

Choose a reason for hiding this comment

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

✅ LGTM

@elazzabi
Copy link
Member Author

@pierorocca @elizaan36 I had some problems replicating this, but with help from @hsingyuc I got it working.

So the problem is the Woo Pay button is showing only if WooCommerce Blocks is installed (at least in the Pay for Order page). This means, if a user doesn't have WooCommerce Blocks, it will only show Apple/Google Pay at the top. If they have the WC Blocks, it will show Apple/Google Pay at the top, and Woo Pay and the button like @hsingyuc shared ^.

I've taken a look into the code and it still seems unclear to me why the handling is different for this page. So I'll need some help from folks working on WooCommerce Blocks to help with that.

That being said, is this issue out of the scope of this PR, or would you like this to be fixed part of this PR? (Also, I'll be on a long AFK, so maybe someone else should pick it over if we decide to go with the second option)

@pierorocca
Copy link
Contributor

Thanks Ahmed. We definitely cannot go to market with a split scenario where buttons are showing up in multiple locations. Additionally I'd argue the existing button location at the top is not ideal placement. So we'd want 1) all buttons after the invoice 2) consistent behavior regardless if the merchant has shortcode or block checkout.

@elizaan36
Copy link

+1 to what Piero shared here.

@elazzabi
Copy link
Member Author

I agree, we should have everything in one place to deliver a good UX.

I have a proposal for a solution, but I'll need to check with other folks to make sure I'm not breaking something else 😅

Screenshot 2023-10-31 at 10 43 02

@@ -381,8 +381,6 @@ public function display_pay_for_order_page_html( $order ) {
];

wp_localize_script( 'WCPAY_PAYMENT_REQUEST', 'wcpayPaymentRequestPayForOrderParams', $data );

$this->display_payment_request_button_html();
Copy link
Member Author

Choose a reason for hiding this comment

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

For future eyes: This is removed from here because it injects a div in the page with the same id expected for Apple/Google Pay creating the button in the top of the page instead of close to WooPay and other express payments.

Copy link
Contributor

@hsingyuc hsingyuc left a comment

Choose a reason for hiding this comment

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

Looks good to me and tested well.

I created a follow-up PR to restructure the pay-for-order check for express buttons so that it works with older WC Blocks versions.

@elazzabi
Copy link
Member Author

elazzabi commented Nov 2, 2023

Thank you for testing, reviewing, and creating a follow-up change @hsingyuc 🙇

Given this has enough reviews now, I'll go ahead and merge it.

@elazzabi elazzabi added this pull request to the merge queue Nov 2, 2023
Merged via the queue into develop with commit 45b8d13 Nov 2, 2023
25 of 28 checks passed
@elazzabi elazzabi deleted the fix/express-pay-pay-for-order-page branch November 2, 2023 11:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

QuickPay buttons don't fire on Pay For Order page (manual order payment page)
6 participants