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

Introduce Klarna PM #7282

Merged
merged 20 commits into from
Oct 5, 2023
Merged

Introduce Klarna PM #7282

merged 20 commits into from
Oct 5, 2023

Conversation

KarlisJ
Copy link
Contributor

@KarlisJ KarlisJ commented Sep 25, 2023

Fixes #7243

Changes proposed in this Pull Request

Introduces Klarna payment method.

Testing instructions

  • Enable Klarna payments Capability for your test account ( use https://github.com/Automattic/woocommerce-payments-server/pull/3968#top)
  • Refresh account cache
  • Go to payments->settings and enable Klarna PM
  • Make a test payment (you'll be asked to create a test account.
    • Use CC from here)
    • Use a valid phone number for the country. For example, 8332806812 for the US
  • Repeat test payment from Blocks checkouts
  • Repeat test payment from Legacy, Split, Deferred UPE

  • 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 25, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7282 or branch name add/7243-introduce-klarna-pm 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: 1cec35e
  • Build time: 2023-10-05 08:46:32 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 25, 2023

Size Change: +697 B (0%)

Total Size: 1.42 MB

Filename Size Change
release/woocommerce-payments/assets/css/admin.css 1.04 kB +10 B (+1%)
release/woocommerce-payments/dist/index.js 283 kB +335 B (0%)
release/woocommerce-payments/dist/multi-currency.js 54.9 kB +78 B (0%)
release/woocommerce-payments/dist/payment-gateways.js 38.5 kB +79 B (0%)
release/woocommerce-payments/dist/settings.js 233 kB +111 B (0%)
release/woocommerce-payments/dist/upe_checkout.js 34.1 kB +13 B (0%)
release/woocommerce-payments/dist/upe_split_checkout.js 34.6 kB +26 B (0%)
release/woocommerce-payments/dist/upe_with_deferred_intent_creation_checkout.js 36.7 kB +7 B (0%)
release/woocommerce-payments/dist/upe-blocks-checkout.js 39.6 kB +12 B (0%)
release/woocommerce-payments/dist/upe-split-blocks-checkout.js 41 kB +26 B (0%)
ℹ️ View Unchanged
Filename Size
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/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/order-rtl.css 676 B
release/woocommerce-payments/dist/order.css 679 B
release/woocommerce-payments/dist/order.js 41 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-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/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_split_checkout-rtl.css 440 B
release/woocommerce-payments/dist/upe_split_checkout.css 441 B
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-split-blocks-checkout-rtl.css 1.51 kB
release/woocommerce-payments/dist/upe-split-blocks-checkout.css 1.51 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.06 kB

compressed-size-action

@KarlisJ KarlisJ changed the title Introduce Klarna PM [WIP] Introduce Klarna PM Sep 27, 2023
@KarlisJ KarlisJ marked this pull request as ready for review September 27, 2023 11:04
@KarlisJ KarlisJ self-assigned this Sep 27, 2023
Copy link
Contributor

@kalessil kalessil left a comment

Choose a reason for hiding this comment

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

I did quick-check, leaving nit-picks and questions. But overall looks straightforward and clean!

includes/payment-methods/class-klarna-payment-method.php Outdated Show resolved Hide resolved
includes/class-wc-payments.php Show resolved Hide resolved
includes/class-wc-payments.php Show resolved Hide resolved
client/payment-methods-map.tsx Outdated Show resolved Hide resolved
client/payment-methods-map.tsx Show resolved Hide resolved
@KarlisJ
Copy link
Contributor Author

KarlisJ commented Sep 28, 2023

Starting from 6.4.0 version deferred Split UPE is the default UPE type but we haven't implemented the logic to restrict payment method to specific countries in it.

I've created a related bug #7313 that needs to be addressed as part of Klarna launch but to keep things separate, I'll tackle that as separate task.

Copy link
Contributor

@mgascam mgascam left a comment

Choose a reason for hiding this comment

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

Code changes read well and I manually tested and was able to complete the checkout with Klarna. I noticed a couple of things:

  • Since we still need to include Klarna assets, we can take the chance to add Klarna logo in the banner that appears when UPE is not enabled in the payment settings. I checked with designers in the slack thread: p1695896798254629/1695318697.479009-slack-C04VCT34PCP
  • Noticed an error when the Legacy UPE is enabled and the shopper does not fill the phone number. I created this ticket Improve Klarna phone number validation on checkout #7319 to look into it.

@dmvrtx
Copy link
Contributor

dmvrtx commented Sep 29, 2023

Did testing and the success path worked well with block checkout. Will do another round next week.

@KarlisJ KarlisJ changed the title [WIP] Introduce Klarna PM Introduce Klarna PM Oct 2, 2023
client/payment-methods-map.tsx Outdated Show resolved Hide resolved
client/payment-methods-map.tsx Outdated Show resolved Hide resolved
@KarlisJ
Copy link
Contributor Author

KarlisJ commented Oct 2, 2023

@dmvrtx

Did testing and the success path worked well with block checkout. Will do another round next week.

As far as happy path testing, I've tested from different merchant countries and currencies for all (flavors of UPE) x blocks/classic.

As for unhappy path, the biggest problem is that we always show generic error message upon redirecting back from provider page. I'll create a ticket for that as it impacts not only Klarna and should be tackled separately.

Copy link
Contributor

@kalessil kalessil left a comment

Choose a reason for hiding this comment

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

LGTM (code review).

Notes:

  • I tested against prod-alike server state (no fees, trunk) - settings/checkout works
  • I noted before, but we might need to update a banner as part of GA:
    Screenshot from 2023-10-02 15-50-17

Pre-approving.

client/payment-methods-map.tsx Outdated Show resolved Hide resolved
Copy link
Contributor

@mgascam mgascam left a comment

Choose a reason for hiding this comment

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

Did a new manual testing round of happy path with shortcode based checkout + Legacy and Deferred UPE. Works as expected (I'm using US based merchant account for my tests).

But I noticed that the Klarna icon is missing in the Source column of the transaction list and also not showing in payment details page:

Screenshot 2023-10-02 at 18 45 41 Screenshot 2023-10-02 at 18 46 08

@KarlisJ @dmvrtx are we adding those icons in a separate PR?

@dmvrtx
Copy link
Contributor

dmvrtx commented Oct 2, 2023

@KarlisJ @dmvrtx are we adding those icons in a separate PR?

No, the intent was to add all assets in one PR. Unless it turns out to be a complex issue, I'd rather like to see it here.

@KarlisJ
Copy link
Contributor Author

KarlisJ commented Oct 3, 2023

@mgascam The asset is there. The problem seems that the payment method is not recognised in those views. I'll investigate, thanks for finding this.

Copy link
Contributor

@dmvrtx dmvrtx left a comment

Choose a reason for hiding this comment

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

Provisionally approved, as comments are non-blocking.

client/payment-details/payment-method/index.js Outdated Show resolved Hide resolved
Comment on lines +88 to +92
isLoading={ isLoading }
label={ __( 'Category', 'woocommerce-payments' ) }
>
{ paymentMethodCategory }
</Detail>
Copy link
Contributor

Choose a reason for hiding this comment

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

Nice touch! I wonder if we should add mapping somewhere to show possible values of pay_later, pay_now, pay_with_financing, or pay_in_installments as a readable/translatable text?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We should probably TS it. But I'm not sure about translating them. At the end of the day, those are codes not messages. If merchant tries to figure out what it means, and it's translated, then it will be hard to Google it.

Copy link
Contributor

Choose a reason for hiding this comment

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

Stripe translates those in their dashboard, I don't think we should hesitate to do the same.

client/payment-methods-map.tsx Outdated Show resolved Hide resolved
client/types/charges.d.ts Outdated Show resolved Hide resolved
Copy link
Contributor

@mgascam mgascam left a comment

Choose a reason for hiding this comment

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

Leaving some comments after reviewing the payment method details section (great catch!)

isLoading={ isLoading }
label={ __( 'Category', 'woocommerce-payments' ) }
>
{ paymentMethodCategory }
Copy link
Contributor

Choose a reason for hiding this comment

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

I wonder if we should translate the paymentMethodCategory? According to Stripe docs this can be pay_later, pay_now, pay_with_financing, pay_in_installments .

Copy link
Contributor Author

Choose a reason for hiding this comment

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

client/payment-details/payment-method/klarna/index.js Outdated Show resolved Hide resolved
Copy link
Contributor

@mgascam mgascam left a comment

Choose a reason for hiding this comment

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

LGTM!

I left a couple of minor comments.

client/payment-details/payment-method/klarna/index.js Outdated Show resolved Hide resolved
client/payment-details/payment-method/klarna/index.js Outdated Show resolved Hide resolved
Copy link
Contributor

@kalessil kalessil left a comment

Choose a reason for hiding this comment

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

Something needs to be added.

Copy link
Contributor

@kalessil kalessil left a comment

Choose a reason for hiding this comment

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

LGTM (left a couple of comments about comments tweaks).

@KarlisJ KarlisJ added this pull request to the merge queue Oct 5, 2023
Merged via the queue into develop with commit 2c6d231 Oct 5, 2023
@KarlisJ KarlisJ deleted the add/7243-introduce-klarna-pm branch October 5, 2023 10:08
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.

[Klarna] Introduce necessary assets to enable Klarna in WooPayments interfaces
5 participants