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

Store balance transaction ID in order metadata #7945

Merged
merged 21 commits into from
Jan 18, 2024

Conversation

anu-rock
Copy link
Contributor

@anu-rock anu-rock commented Dec 27, 2023

Fixes #7856

Changes proposed in this Pull Request

  • Add a new key _wcpay_payment_transaction_id in order metadata to store Stripe's balance transaction ID for each payment to aid in transaction reconciliation in third-party accounting systems.
  • Refactor the attach_intent_info_to_order method to make it easier to add new intent-based data values to order meta.

Testing instructions

  • Place a new order in WooCommerce frontend with any payment method.
  • Make a GET request to /wp-json/wc/v3/orders/<order_id> (see Retrieve an order API).
  • Verify that there is a new key _payment_transaction_id in the response order object's meta_data property with a value starting with 'txn_'.
  • Also verify in WP Admin that the transaction id for the above order on the Transactions page matches the value in the previous step.
Screen.Recording.2024-01-16.at.4.12.05.PM.mp4

  • 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 (does not apply)

Post merge

The method has too many params whose values can easily be derived from a single intent object.

This commit replaces all derivable params with an intent param.

This will make it easier to add new intent-based data values to order meta.
@anu-rock anu-rock self-assigned this Dec 27, 2023
@anu-rock anu-rock added the component: reporting Issues related to Reporting label Dec 27, 2023
@botwoo
Copy link
Collaborator

botwoo commented Dec 27, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7945 or branch name update/7856-add-charge-txn-id-to-order-meta 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: d3d2655
  • Build time: 2024-01-18 10:06:55 UTC

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

Copy link
Contributor

github-actions bot commented Dec 27, 2023

Size Change: 0 B

Total Size: 1.27 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.06 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 1.81 kB
release/woocommerce-payments/dist/blocks-checkout.css 1.81 kB
release/woocommerce-payments/dist/blocks-checkout.js 85.1 kB
release/woocommerce-payments/dist/checkout-rtl.css 318 B
release/woocommerce-payments/dist/checkout.css 319 B
release/woocommerce-payments/dist/checkout.js 37.2 kB
release/woocommerce-payments/dist/index-rtl.css 37 kB
release/woocommerce-payments/dist/index.css 37 kB
release/woocommerce-payments/dist/index.js 289 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.4 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.8 kB
release/woocommerce-payments/dist/multi-currency.css 3.4 kB
release/woocommerce-payments/dist/multi-currency.js 56 kB
release/woocommerce-payments/dist/order-rtl.css 676 B
release/woocommerce-payments/dist/order.css 679 B
release/woocommerce-payments/dist/order.js 42.4 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.31 kB
release/woocommerce-payments/dist/payment-gateways.css 1.31 kB
release/woocommerce-payments/dist/payment-gateways.js 39.6 kB
release/woocommerce-payments/dist/payment-request-rtl.css 153 B
release/woocommerce-payments/dist/payment-request.css 153 B
release/woocommerce-payments/dist/payment-request.js 13.5 kB
release/woocommerce-payments/dist/product-details.js 919 B
release/woocommerce-payments/dist/settings-rtl.css 10.4 kB
release/woocommerce-payments/dist/settings.css 10.4 kB
release/woocommerce-payments/dist/settings.js 234 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.5 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 710 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.6 kB
release/woocommerce-payments/dist/tos-rtl.css 230 B
release/woocommerce-payments/dist/tos.css 231 B
release/woocommerce-payments/dist/tos.js 22.1 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 153 B
release/woocommerce-payments/dist/woopay-express-button.css 153 B
release/woocommerce-payments/dist/woopay-express-button.js 52.5 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.18 kB
release/woocommerce-payments/dist/woopay.css 4.19 kB
release/woocommerce-payments/dist/woopay.js 72.1 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 812 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.37 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.5 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.37 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.03 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.6 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.4 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.52 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

* @param WC_Order $order The order.
* @param WC_Payments_API_Abstract_Intention $intent The payment or setup intention object.
* @param WC_Order $order The order.
* @param WC_Payments_API_Payment_Intention|WC_Payments_API_Setup_Intention $intent The payment or setup intention object.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I was getting Psalm UndefinedMethod linting error, so replaced the abstract class type hint with a list of possible concrete types. I wonder if there's a proper way to use abstract types as type hints without Psalm complaining.

Looks like new reference of the method that came with the latest code from develop.
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, however I have some minor remarks.
I did only code review, I will do the tests after the above are addressed

*
* @throws Order_Not_Found_Exception
*/
public function attach_intent_info_to_order( WC_Order $order, $intent ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

part of this method ( calling the setters and calling the save method) is identical to attach_intent_info_to_order__legacy .
This method extracts the data that needs to be added to the order, and saves it on the order. attach_intent_info_to_order__legacy only saves the information to the order.
We can keep this method to extract the data and call the attach_intent_info_to_order__legacy in this method.
So, we could:

  1. change this method name to add_intent_info_to_order
  2. keep the old name for attach_intent_info_to_order__legacy ( attach_intent_info_to_order )
  3. call attach_intent_info_to_order in this method

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 this, common code can be extracted to a separate function as part of this refactor.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@dpaun1985 @naman03malhotra Thanks for the feedback. I fixed the code duplication in a7bef87.

In the long term, I think it's desirable to remove the legacy method and keep only the refactored one. This will allow us to care about only one method when adding new intent properties to order meta.

change this method name to add_intent_info_to_order

Unfortunately, I cannot change the name as I'd like my changes to apply to all uses of this method.

*
* @throws Order_Not_Found_Exception
*/
public function attach_intent_info_to_order( WC_Order $order, $intent ) {
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 this, common code can be extracted to a separate function as part of this refactor.

@anu-rock
Copy link
Contributor Author

anu-rock commented Jan 9, 2024

Some more feedback from Gamma: p1704266984371909-slack-C01BPL3ALGP

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
Tested and the transaction id meta was added on the order.
Screenshot 2024-01-15 at 17 04 20

@anu-rock
Copy link
Contributor Author

@dpaun1985 Thanks for your re-testing and approval. But I wonder why the key is named _payment_transaction_id in your screenshot when it should be _wcpay_payment_transaction_id as per changes I pushed last week as per your suggestion.

@dpaun1985
Copy link
Contributor

@dpaun1985 Thanks for your re-testing and approval. But I wonder why the key is named _payment_transaction_id in your screenshot when it should be _wcpay_payment_transaction_id as per changes I pushed last week as per your suggestion.

I think I didn't updated the branch and was an older commit. I just tested and it's the correct key
Screenshot 2024-01-16 at 11 19 19

Copy link
Contributor

@mordeth mordeth left a comment

Choose a reason for hiding this comment

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

✅ Code looks good!
✅ Manual checks have been successful.

Screenshot 2024-01-16 at 16 18 57

@anu-rock anu-rock added this pull request to the merge queue Jan 18, 2024
Merged via the queue into develop with commit 173b56d Jan 18, 2024
25 of 28 checks passed
@anu-rock anu-rock deleted the update/7856-add-charge-txn-id-to-order-meta branch January 18, 2024 10:45
Jinksi pushed a commit that referenced this pull request Jan 30, 2024
Co-authored-by: Cvetan Cvetanov <[email protected]>
Co-authored-by: Naman Malhotra <[email protected]>
Co-authored-by: Dan Paun <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Adding WooPayments transaction id (txn_xxxx) into order meta
5 participants