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

Adds environment metadata to Stripe Billing subscription and invoice payment intents #7190

Merged
merged 11 commits into from
Sep 14, 2023

Conversation

james-allan
Copy link
Contributor

Fixes #6529

Changes proposed in this Pull Request

This PR adds 2 pieces of meta data to Stripe Billing objects:

  • Subscriptions when they are created to reference the store's subscription plugin environment. (see example below).
  • Invoice (renewal) payment intents to refer to the store's setup at the time of processing the invoice. (see example below).

Subscription metadata

Woo Subscriptions inactive Woo Subscriptions active
Screenshot 2023-09-12 at 8 04 45 pm Screenshot 2023-09-12 at 8 04 57 pm

Rationale
When a store has the Woo Subscriptions plugin active and a Stripe Billing subscription is created they must have had Stripe Billing enabled at the time. If the plugin isn't active and they are still creating Stripe Billing subscriptions. Then they are still using WCPay Subscriptions. This meta data can be used to identify how many merchants are actively using Stripe Billing subscriptions, or still using WCPay Subscriptions.

Payment intent metadata

Woo Subscriptions OR Stripe Billing inactive Woo Subscriptions AND Stripe Billing active
Screenshot 2023-09-12 at 4 54 26 pm Screenshot 2023-09-12 at 4 52 52 pm

Rationale

When we receive a webhook for a Stripe Billing renewal order (paid of failed), we want to know under what context this payment is being processed. Have they actively opted into Stripe Billing, are still using WCPay subscriptions, or have installed Woo Subscriptions but haven't migrated their subscriptions.

Testing instructions

  • ⚠️ Requires the add/support_for_subscription_and_invoice_meta server branch for these changes to work correctly.
  • Make sure you're listening to webhooks in your local Server repo.

Subscriptions

With Woo Subscriptions inactive

  1. Purchase a Subscription using WCPay Subscriptions.
  2. View the subscription in the Stripe Billing dashboard.
  3. You should see this metadata wcpay_subscriptions meta.

With Woo Subscriptions active

  1. Purchase a Subscription using Stripe Billing enabled.
  2. View the subscription in the Stripe Billing dashboard.
  3. You should see this metadata woo_subscription meta.

Subscription Renewals

  1. Activate Woo Subscriptions.
  2. Enable Stripe Billing.
  3. Enable billing clocks on at least 1 of your Stripe Billing Subscriptions
    • It doesn't matter if it was created with or with the Woo Subscriptions plugin active.
  4. Process a paid of failed renewal order.
  5. Go to the Payments list table in the Stripe dashboard.
  6. View the latest payment with the Subscription updated description.
  7. Scroll down to the meta data.
  8. Note that new meta (subscription_context stripe_billing) is added.
    • 📓 Even if this subscription was previously a WCPay subscription. The merchant has opted into Stripe Billing and so this payment is effectively a Stripe Billing payment.
  9. Disable Stripe Billing but prevent it from migrating. (Use snippet below).
  10. Run the renewal flow again via the Billing Clocks UI.
  11. View the latest payment in the Stripe dashboard with the Subscription updated description.
  12. Scroll down to the meta data.
  13. Note that new meta (subscription_context legacy_wcpay_subscription) is added.
  • 📓 Even though the store has Woo Subscriptions, any Stripe Billing payments must have been legacy WCPay subscriptions that haven't been migrated.
  1. Disable Woo Subscriptions.
  2. Enable WCPay Subscriptions.
  3. Run the renewal flow again via the Billing Clocks UI.
  4. View the latest payment in the Stripe dashboard with the Subscription updated description.
  5. Scroll down to the meta data.
  6. Note that new meta (subscription_context legacy_wcpay_subscription) is added.
update_option( '_wcpay_feature_stripe_billing', '0' );

  • 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 Sep 13, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7190 or branch name fix/6529-add-stripe-billing-context 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: a07bb70
  • Build time: 2023-09-14 22:32:08 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 13, 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.6 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.6 kB
release/woocommerce-payments/dist/index-rtl.css 36 kB
release/woocommerce-payments/dist/index.css 36 kB
release/woocommerce-payments/dist/index.js 278 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 2.87 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 59.8 kB
release/woocommerce-payments/dist/multi-currency.css 2.87 kB
release/woocommerce-payments/dist/multi-currency.js 54.4 kB
release/woocommerce-payments/dist/order-rtl.css 675 B
release/woocommerce-payments/dist/order.css 676 B
release/woocommerce-payments/dist/order.js 40.5 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 686 B
release/woocommerce-payments/dist/payment-gateways.css 688 B
release/woocommerce-payments/dist/payment-gateways.js 38 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.2 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.3 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.8 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.5 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

Copy link
Contributor

@mattallan mattallan left a comment

Choose a reason for hiding this comment

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

  • With Woo Subscriptions inactive
  • With Woo Subscriptions active
  • Subscription Renewals with Woo Subscriptions active and inactive
    • Confirmed subscription_context is "stripe_billing" when plugin active
    • Confirmed "legacy_wcpay_subscription" when deactivated
  • With Woo Subscriptions and Stripe Billing disabled, confirmed "regular_subscription" payment context on parent and renewal order charges

Code changes look good and tests all went well alongside the changes on server. Happy to approve this!

@james-allan james-allan added this pull request to the merge queue Sep 14, 2023
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to no response for status checks Sep 14, 2023
@james-allan
Copy link
Contributor Author

Merging with just the php 7.3 check stuck in limbo. It was broken in #7134 and is being reverted in #7213.

@james-allan james-allan merged commit c05aaf3 into develop Sep 14, 2023
27 checks passed
@james-allan james-allan deleted the fix/6529-add-stripe-billing-context branch September 14, 2023 23:05
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.

Add meta to Stripe Billing subscription requests noting the store's Stripe billing opt-in status
3 participants