Automattic / woocommerce-payments

Accept payments via credit card. Manage transactions within WordPress.
https://wordpress.org/plugins/woocommerce-payments/
Other
173 stars 69 forks source link

[GlobalStep] "The payment request button is not supported.... " error message is displayed while purchasing a subscription product via Payment request from the cart page. #2493

Closed gglobalstep closed 8 months ago

gglobalstep commented 3 years ago

Bug Description:

When Shipping zone is not defined and user tries to purchase a subscription product from cart page via payment request, an error message stating "The Payment Request button is not supported in United States (US) because some required fields couldn't be verified." is displayed.

Environment:

Woocommerce Version : WooCommerce 5.5.1 WooCommerce Payments: v2.7.0-test-3

PC: Windows 10, Mac 10.14.6 Chrome(Version 91.0.4472.77) Firefox(Version 88.0) Safari: v14.0

Steps To Reproduce:

  1. Create any test site using JN site.
  2. Install and activate all the required plugins.
  3. Upload and activate the WooCommerce Payments v2.8.0 test-1 plugin.
  4. Complete the setup wizard.
  5. Install and activate the WCPay dev plugin.
  6. Complete the KYC flow.
  7. Add a Subscription product.
  8. As a shopper add a Subscription product to the cart.
  9. Go to Cart page and click on "Buy Now" button.
  10. Select the Card on Chrome payment UI and click on "Pay" button.
  11. Observe that "The Payment Request button is not supported...." error message is displayed.

Actual Result:

"The payment request button is not supported.... " error message is displayed while purchasing a subscription product via Payment request from the cart page.

Expected Result:

User should be able to complete the payment via payment request for subscription product from Cart page.

Screenshot:

#2493

Isolating the problem (mark completed items with an [x]):

` ### WordPress Environment ### WC Version: 5.5.1 REST API Version: ✔ 5.5.1 WC Blocks Version: ✔ 5.5.1 Action Scheduler Version: ✔ 3.2.1 WC Admin Version: ✔ 2.4.1 Log Directory Writable: ✔ WP Version: 5.8-RC4-51460 WP Multisite: – WP Memory Limit: 256 MB WP Debug Mode: ✔ WP Cron: ✔ Language: en_US External object cache: – ### Server Environment ### Server Info: Apache/2.4.48 (Unix) OpenSSL/1.0.2g PHP Version: 7.4.21 PHP Post Max Size: 1 GB PHP Time Limit: 30 PHP Max Input Vars: 5000 cURL Version: 7.47.0 OpenSSL/1.0.2g SUHOSIN Installed: – MySQL Version: 5.7.33-0ubuntu0.16.04.1-log Max Upload Size: 512 MB Default Timezone is UTC: ✔ fsockopen/cURL: ✔ SoapClient: ✔ DOMDocument: ✔ GZip: ✔ Multibyte String: ✔ Remote Post: ✔ Remote Get: ✔ ### Database ### WC Database Version: 5.5.1 WC Database Prefix: wp_ Total Database Size: 8.96MB Database Data Size: 6.19MB Database Index Size: 2.77MB wp_woocommerce_sessions: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_woocommerce_api_keys: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_woocommerce_attribute_taxonomies: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_woocommerce_downloadable_product_permissions: Data: 0.02MB + Index: 0.06MB + Engine InnoDB wp_woocommerce_order_items: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_woocommerce_order_itemmeta: Data: 0.05MB + Index: 0.03MB + Engine InnoDB wp_woocommerce_tax_rates: Data: 0.02MB + Index: 0.06MB + Engine InnoDB wp_woocommerce_tax_rate_locations: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_woocommerce_shipping_zones: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_woocommerce_shipping_zone_locations: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_woocommerce_shipping_zone_methods: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_woocommerce_payment_tokens: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_woocommerce_payment_tokenmeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_woocommerce_log: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_actionscheduler_actions: Data: 0.09MB + Index: 0.13MB + Engine InnoDB wp_actionscheduler_claims: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_actionscheduler_groups: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_actionscheduler_logs: Data: 0.06MB + Index: 0.03MB + Engine InnoDB wp_commentmeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_comments: Data: 0.06MB + Index: 0.09MB + Engine InnoDB wp_gla_budget_recommendations: Data: 0.22MB + Index: 0.14MB + Engine InnoDB wp_gla_merchant_issues: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_gla_shipping_rates: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_gla_shipping_times: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_links: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailchimp_carts: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_mailchimp_jobs: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_mailpoet_custom_fields: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_dynamic_segment_filters: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_feature_flags: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_forms: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_mailpoet_log: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_mailpoet_mapping_to_external_entities: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_newsletters: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_mailpoet_newsletter_links: Data: 0.02MB + Index: 0.05MB + Engine InnoDB wp_mailpoet_newsletter_option: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_newsletter_option_fields: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_newsletter_posts: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_newsletter_segment: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_newsletter_templates: Data: 2.52MB + Index: 0.00MB + Engine InnoDB wp_mailpoet_scheduled_tasks: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_mailpoet_scheduled_task_subscribers: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_segments: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_mailpoet_sending_queues: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_mailpoet_settings: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_statistics_clicks: Data: 0.02MB + Index: 0.05MB + Engine InnoDB wp_mailpoet_statistics_forms: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_statistics_newsletters: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_mailpoet_statistics_opens: Data: 0.02MB + Index: 0.08MB + Engine InnoDB wp_mailpoet_statistics_unsubscribes: Data: 0.02MB + Index: 0.05MB + Engine InnoDB wp_mailpoet_statistics_woocommerce_purchases: Data: 0.02MB + Index: 0.06MB + Engine InnoDB wp_mailpoet_stats_notifications: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_mailpoet_subscribers: Data: 0.02MB + Index: 0.13MB + Engine InnoDB wp_mailpoet_subscriber_custom_field: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_subscriber_ips: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_mailpoet_subscriber_segment: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_mailpoet_user_flags: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_options: Data: 1.42MB + Index: 0.08MB + Engine InnoDB wp_postmeta: Data: 0.22MB + Index: 0.19MB + Engine InnoDB wp_posts: Data: 0.06MB + Index: 0.06MB + Engine InnoDB wp_termmeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_terms: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_term_relationships: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_term_taxonomy: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_usermeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_users: Data: 0.02MB + Index: 0.05MB + Engine InnoDB wp_wcu_modules: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_wcu_modules_type: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_wcu_usage_stat: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_wc_admin_notes: Data: 0.05MB + Index: 0.00MB + Engine InnoDB wp_wc_admin_note_actions: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_wc_category_lookup: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_wc_customer_lookup: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_wc_download_log: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_wc_order_coupon_lookup: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_wc_order_product_lookup: Data: 0.02MB + Index: 0.06MB + Engine InnoDB wp_wc_order_stats: Data: 0.02MB + Index: 0.05MB + Engine InnoDB wp_wc_order_tax_lookup: Data: 0.02MB + Index: 0.03MB + Engine InnoDB wp_wc_product_meta_lookup: Data: 0.02MB + Index: 0.09MB + Engine InnoDB wp_wc_reserved_stock: Data: 0.02MB + Index: 0.00MB + Engine InnoDB wp_wc_tax_rate_classes: Data: 0.02MB + Index: 0.02MB + Engine InnoDB wp_wc_webhooks: Data: 0.02MB + Index: 0.02MB + Engine InnoDB ### Post Type Counts ### attachment: 23 mailpoet_page: 1 page: 8 post: 2 product: 22 product_variation: 7 revision: 3 shop_order: 25 shop_order_refund: 3 shop_subscription: 6 ### Security ### Secure connection (HTTPS): ✔ Hide errors from visitors: ✔ ### Active Plugins (12) ### Query Monitor: by John Blackbourn – 3.7.1 Companion Plugin: by Osk – 1.18 Google Listings and Ads: by WooCommerce – 1.2.1 Mailchimp for WooCommerce: by Mailchimp – 2.5.1 MailPoet 3 (New): by MailPoet – 3.65.0 WBW Currency Switcher for WooCommerce: by woobewoo – 1.5.4 WooCommerce Blocks: by Automattic – 5.5.1 WooCommerce Payments Dev Tools: by Automattic – WooCommerce Payments: by Automattic – 2.8.0-test-1 WooCommerce Subscriptions: by WooCommerce – 3.1.3 WooCommerce: by Automattic – 5.5.1 WordPress Beta Tester: by Peter Westwood Andy Fragen – 3.1.1 ### Inactive Plugins (2) ### Akismet Anti-Spam: by Automattic – 4.1.10 Hello Dolly: by Matt Mullenweg – 1.7.2 ### Dropin Plugins (1) ### db.php: Query Monitor Database Class ### Settings ### API Enabled: – Force SSL: – Currency: USD ($) Currency Position: left Thousand Separator: , Decimal Separator: . Number of Decimals: 2 Taxonomies: Product Types: external (external) grouped (grouped) simple (simple) subscription (subscription) variable (variable) variable subscription (variable-subscription) Taxonomies: Product Visibility: exclude-from-catalog (exclude-from-catalog) exclude-from-search (exclude-from-search) featured (featured) outofstock (outofstock) rated-1 (rated-1) rated-2 (rated-2) rated-3 (rated-3) rated-4 (rated-4) rated-5 (rated-5) Connected to WooCommerce.com: – ### WC Pages ### Shop base: #5 - /shop/ Cart: #6 - /cart/ Checkout: #7 - /checkout/ My account: #8 - /my-account/ Terms and conditions: ❌ Page not set ### Theme ### Name: Storefront Version: 3.7.0 Author URL: https://woocommerce.com/ Child Theme: ❌ – If you are modifying WooCommerce on a parent theme that you did not build personally we recommend using a child theme. See: How to create a child theme WooCommerce Support: ✔ ### Templates ### Overrides: – ### Subscriptions ### WCS_DEBUG: ✔ No Subscriptions Mode: ✔ Live Subscriptions Live URL: https://cheap-sloth.jurassic.ninja Subscription Statuses: wc-active: 6 WooCommerce Account Connected: ❌ No Report Cache Enabled: ✔ Yes Cache Update Failures: ✔ 0 failure ### Store Setup ### Country / State: United States (US) — California ### Subscriptions by Payment Gateway ### WooCommerce Payments: wc-active: 6 ### Payment Gateway Support ### WooCommerce Payments: products refunds subscriptions subscription_cancellation subscription_suspension subscription_reactivation subscription_amount_changes subscription_date_changes subscription_payment_method_change subscription_payment_method_change_customer subscription_payment_method_change_admin multiple_subscriptions tokenization add_payment_method ### Action Scheduler ### Complete: 154 Oldest: 2021-07-20 10:32:48 +0000 Newest: 2021-07-20 14:44:01 +0000 Pending: 9 Oldest: 2021-07-21 10:37:22 +0000 Newest: 2021-09-20 10:34:44 +0000 ### Status report information ### Generated at: 2021-07-20 14:45:34 +00:00 `
haszari commented 2 years ago

@james-allan (current reviewer) – can you try reproducing this? My read on the report is that subscriptions can't be purchased with payment request (i.e. Chrome Pay).

That sounds serious, though perhaps there's something about the store or shipping config that makes this unlikely in the real world.

haszari commented 2 years ago

Assuming this is reproducible and marking as high priority.

dreamtooloud commented 2 years ago

Potential case reported in 5553160-zen but it is not connected to a subscription but rather a simple product. Waiting to get more details from the customer to confirm it's not a conflict with another plugin.

mdmoore commented 9 months ago

Some quick notes on my findings so far. This is still reproducible and occurs only when there's no shipping zones defined. State validation is failing here due to needs_shipping_address() returning true here. It's returning true because WC Subscriptions is filtering woocommerce_cart_needs_shipping_address here. For comparison, needs_shipping_address returns false for a simple product under the same conditions and the purchase can complete. I'm considering filtering woocommerce_cart_needs_shipping_address just for this scenario, but will do a bit more research first.

c-shultz commented 8 months ago

@pierorocca correcting the error on this issue would be good, but maybe we should prioritize an effort to detect this condition and educate merchants ahead of time. This almost feels like something that should be considered as part of a Woo core onboarding checklist.

pierorocca commented 8 months ago

This is still reproducible and occurs only when there's no shipping zones defined.

I have a recurring wine club membership and I'm set to "pickup" so it is possible to have no zones yet still support local pickup or even local delivery (e.g. food, appliances).

Where shipping is offered and a zone MUST be setup, I agree @c-shultz either this falls under a core configuration improvement either through improved onboarding/documentation, improved admin notifications e.g. "warning, no shipping zones have been set and shipping is enabled." or by setting a default.

So this is likely a broader issue than PRBs. How does this create problems for standard checkout credit card shoppers? Incorrect or free shipping?

mdmoore commented 8 months ago

This almost feels like something that should be considered as part of a Woo core onboarding checklist.

@c-shultz - Core does include a task to review shipping options:

A zone is added as well, which appears to be selected based on the shop location, and a Free Shipping Method added. So it seems that this scenario would be deliberate, though I can't readily think of a use case for having no shipping methods and not using virtual products. Though a notification of some type could possibly be triggered when a store attempts to publish a physical / non-virtual product and no shipping methods exist.

I have a recurring wine club membership and I'm set to "pickup" so it is possible to have no zones yet still support local pickup or even local delivery (e.g. food, appliances).

@pierorocca - This also seems like a scenario where either a local pickup(core shipping method) or local delivery shipping method could be used. If not needed, then this would become a virtual product which doesn't require shipping.

With this said, I've been operating under the idea that there is most likely some use case for this setup. Having 0 shipping methods doesn't block purchase for other product types via credit card or PRBs. Subscriptions can also be purchased via credit card when 0 shipping methods are configured on the store. The problem is only apparent with PRBs and only because Woo Subscriptions triggers a filter that the cart needs shipping when a non-virtual subscription is in the cart. Unlike other payment methods, PRBs are validating on that and an error is thrown.

pierorocca commented 8 months ago

@mdmoore the wine feels quite physical in my belly :) That makes sense that local pickup and local delivery (if that existed) would be considered shipping methods from a core perspective.