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

RPP: Minimal Checkout #7332

Merged
merged 76 commits into from
Oct 6, 2023
Merged

RPP: Minimal Checkout #7332

merged 76 commits into from
Oct 6, 2023

Conversation

RadoslavGeorgiev
Copy link
Contributor

@RadoslavGeorgiev RadoslavGeorgiev commented Sep 30, 2023

Fixes #7497

Changes proposed in this Pull Request

This PR adds everything needed for a happy-path basic payment to the new checkout process.

  • Empty SystemErrorState and PaymentErrorState classes are added.
  • PaymentContext receives support for the following props: currency, manual_capture, metadata, level3_data, metadata, cvc_confirmation, fingerprint, user_id and customer_id
  • PaymentRequest:
    • Has new getters for cvc_confirmation and fingerprint.
    • Populates the two new proeprties into the context.
  • The process method of InitialState now calls all needed services to process a simple payment:
    • Import data from the order to the context through the order service.
    • Generate metadata through the order service.
    • Generate level3 data through the new Level3 service.
    • Create a customer (no updates yet).
    • Create an intent.
    • Deletegate to the order service to add all necessary details to the order, and update its status.
  • OrderService is now responsible for both loading data, and post-processing. We will need to split it in a meaningful way, suggestions are welcome. Keep in mind that we'll probably work on them later through a separate issue.
  • The new PaymentRequestService is responsible for generating API/server requests, keeping things composed instead of inheriting or huge classes.
  • The legacy WC_Payments_Customer_Service class has a new method to create a customer based on order details. Should we keep it there, or add it to a new service?

Testing instructions

As always, check tests first, and make sure that they are sound.

With this PR, checkout with a saved/new payment method should work, adding the necessary order status, data and notes. Sounds simple, but just try it.


  • 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 (100% coverage 😎)
  • Tested on mobile (does not apply)

@botwoo
Copy link
Collaborator

botwoo commented Sep 30, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7332 or branch name rpp/basic-process 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: 25fd144
  • Build time: 2023-10-06 07:11:07 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 30, 2023

Size Change: 0 B

Total Size: 1.42 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.04 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 74.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.8 kB
release/woocommerce-payments/dist/index-rtl.css 36.4 kB
release/woocommerce-payments/dist/index.css 36.4 kB
release/woocommerce-payments/dist/index.js 284 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.2 kB
release/woocommerce-payments/dist/multi-currency.css 2.88 kB
release/woocommerce-payments/dist/multi-currency.js 54.9 kB
release/woocommerce-payments/dist/order-rtl.css 676 B
release/woocommerce-payments/dist/order.css 679 B
release/woocommerce-payments/dist/order.js 41.1 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.5 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.8 kB
release/woocommerce-payments/dist/product-details.js 898 B
release/woocommerce-payments/dist/settings-rtl.css 8.93 kB
release/woocommerce-payments/dist/settings.css 8.94 kB
release/woocommerce-payments/dist/settings.js 233 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.5 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.1 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.8 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.6 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 51.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 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/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.05 kB

compressed-size-action

Copy link
Contributor

@marcinbot marcinbot 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 almost ready to be shipped. Two small suggestions below.

src/Internal/Payment/State/InitialState.php Outdated Show resolved Hide resolved
src/Internal/Payment/State/InitialState.php Show resolved Hide resolved
Copy link
Contributor

@marcinbot marcinbot left a comment

Choose a reason for hiding this comment

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

:shipit: either with or without the generic exception handling mentioned here but let's make sure we can handle errors properly in the future.

Base automatically changed from rpp/extract-gateway-methods to develop October 5, 2023 12:26
@RadoslavGeorgiev
Copy link
Contributor Author

@htdat the gateway type is now added to the metadata: a72e816

Copy link
Member

@htdat htdat left a comment

Choose a reason for hiding this comment

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

Besides my inline comments (most of which are nitpick), I've tried to test this PR in my local dev site. iI turns that there are some errors. @RadoslavGeorgiev - could you have a look at them?

  1. After enabling enough factors in WCPay Dev Tools for my testing flow, I could test it, and face this error Too few arguments to function WCPay\Internal\Payment\State\InitialState::__construct(), 4 passed and exactly 5 expected. This can be easily fixed by updating PaymentsServiceProvider https://gist.github.com/htdat/5d15b253341e8c0e2e8f304ad40de47d

  2. After applying the diff in the gist link above, I got another error, which I have not been able to figure out yet.

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to WCPay\Core\Server\Request\Create_Intention::set_fingerprint() must be of the type string, null given, called in /var/www/html/wp-content/plugins/woocommerce-payments/src/Internal/Service/PaymentRequestService.php on line 41 and defined in /var/www/html/wp-content/plugins/woocommerce-payments/includes/core/server/request/class-create-intention.php:156
Stack trace:
#0 /var/www/html/wp-content/plugins/woocommerce-payments/src/Internal/Service/PaymentRequestService.php(41): WCPay\Core\Server\Request\Create_Intention->set_fingerprint(NULL)
#1 /var/www/html/wp-content/plugins/woocommerce-payments/src/Internal/Payment/State/InitialState.php(102): WCPay\Internal\Service\PaymentRequestService->create_intent(Object(WCPay\Internal\Payment\PaymentContext))
#2 /var/www/html/wp-content/plugins/woocommerce-payments/src/Internal/Service/PaymentProcessingService.php(69): WCPay\Internal\Payment\State\InitialState->process(Object(WCPay\Internal\Payment\PaymentRequest))
#3 /var/www/html/w in /var/www/html/wp-content/plugins/woocommerce-payments/includes/core/server/request/class-create-intention.php on line 156

tests/unit/src/Internal/Payment/State/InitialStateTest.php Outdated Show resolved Hide resolved
src/Internal/Payment/State/InitialState.php Show resolved Hide resolved
src/Internal/Service/OrderService.php Outdated Show resolved Hide resolved
src/Internal/Proxy/LegacyProxy.php Outdated Show resolved Hide resolved
@RadoslavGeorgiev
Copy link
Contributor Author

@htdat I pushed f2412c1, fixing most of your comments, and more importantly, making it work again.

Tomorrow I'll check for more left-overs from all the merges.

Copy link
Member

@htdat htdat left a comment

Choose a reason for hiding this comment

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

  • LGTM, pre-approving! Only one minor comment, then it's good to ship 🚢.
  • I've run another manual testing too. Everything works like a charm 🎉

src/Internal/Service/PaymentRequestService.php Outdated Show resolved Hide resolved
@RadoslavGeorgiev RadoslavGeorgiev added this pull request to the merge queue Oct 6, 2023
Merged via the queue into develop with commit c95ef55 Oct 6, 2023
@RadoslavGeorgiev RadoslavGeorgiev deleted the rpp/basic-process branch October 6, 2023 10:57
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.

RPP: Minimal Checkout
5 participants