8000 fix: wechat pay payment method title on payment processing by frosso · Pull Request #10806 · Automattic/woocommerce-payments · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

fix: wechat pay payment method title on payment processing #10806

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

Open
wants to merge 19 commits into
base: develop
Choose a base branch
from

Conversation

frosso
Copy link
Contributor
@frosso frosso commented May 27, 2025

Fixes WOOPMNT-5015
Fixes #9981

Changes proposed in this Pull Request

There were a few issues with the main ticket.
First off, WeChat Pay didn't have a title attribute in its definition.
I adjusted the definitions and converted the Wechatpay_Payment_Method class to WeChatPayDefinition

We also needed to set the payment method title before the SI or PI early return logic.
Before these changes, the WeChat Pay payment method title was not correctly set, because this block was executed after an early return:

		if ( empty( $_POST['payment_request_type'] ) && empty( $_POST['express_payment_type'] ) ) {
			$this->set_payment_method_title_for_order( $order, $payment_method_type, $payment_method_details );
		}

Testing instructions

  • Ensure you have WeChat Pay enabled on your merchant's store (or enable the wechat_pay_enabled account meta)
  • Ensure you have WeChat Pay enabled on the WooPayments payment settings, so it can be displayed at checkout
  • As a customer, add a product to the cart
  • Navigate to the checkout page
  • If you have a US-based Stripe account, ensure you are using USD currency and a US-based billing address
  • Select WeChat Pay at checkout
  • Place the order with WeChat Pay, authorize & complete the payment process
  • As a merchant, navigate to WooCommerce > Orders
  • Click on "Screen options", ensure you have checked "Billing", save the changes
  • Test these changes with other payment methods, like Card, Alipay and/or Affirm, to ensure the payment method title is correctly set without any regressions
  • Notice below - before we were stating "via {blank}", now we're setting the correct payment method title
Screenshot 2025-05-27 at 6 17 58 PM
  • 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 May 27, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 10806 or branch name fix/payment-method-title-for-wechat-pay 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: 4903bf6
  • Build time: 2025-05-30 14:59:04 UTC

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

Comment on lines +121 to +223

// For all European countries in the supported list, return EUR.
if ( in_array(
$account_country,
[
Country_Code::AUSTRIA,
Country_Code::BELGIUM,
Country_Code::FINLAND,
Country_Code::FRANCE,
Country_Code::GERMANY,
Country_Code::IRELAND,
Country_Code::ITALY,
Country_Code::LUXEMBOURG,
Country_Code::NETHERLANDS,
Country_Code::PORTUGAL,
Country_Code::SPAIN,
],
true
) ) {
return [ Currency_Code::EURO ];
}

if ( Country_Code::AUSTRALIA === $account_country ) {
return [ Currency_Code::AUSTRALIAN_DOLLAR ];
}

if ( Country_Code::CANADA === $account_country ) {
return [ Currency_Code::CANADIAN_DOLLAR ];
}

if ( Country_Code::DENMARK === $account_country ) {
return [ Currency_Code::DANISH_KRONE ];
}

if ( Country_Code::HONG_KONG === $account_country ) {
return [ Currency_Code::HONG_KONG_DOLLAR ];
}

if ( Country_Code::JAPAN === $account_country ) {
return [ Currency_Code::JAPANESE_YEN ];
}

if ( Country_Code::NORWAY === $account_country ) {
return [ Currency_Code::NORWEGIAN_KRONE ];
}

if ( Country_Code::SINGAPORE === $account_country ) {
return [ Currency_Code::SINGAPORE_DOLLAR ];
}

if ( Country_Code::SWEDEN === $account_country ) {
return [ Currency_Code::SWEDISH_KRONA ];
}

if ( Country_Code::SWITZERLAND === $account_country ) {
return [ Currency_Code::SWISS_FRANC ];
}

if ( Country_Code::UNITED_KINGDOM === $account_country ) {
return [ Currency_Code::POUND_STERLING ];
}

if ( Country_Code::UNITED_STATES === $account_country ) {
return [ Currency_Code::UNITED_STATES_DOLLAR ];
}

return [ 'NONE_SUPPORTED' ];
}

/**
* Get the list of supported countries
*
* @return string[] Array of country codes
*/
public static function get_supported_countries(): array {
return [
Country_Code::UNITED_STATES,
Country_Code::AUSTRALIA,
Country_Code::CANADA,
Country_Code::AUSTRIA,
Country_Code::BELGIUM,
Country_Code::DENMARK,
Country_Code::FINLAND,
Country_Code::FRANCE,
Country_Code::GERMANY,
Country_Code::IRELAND,
Country_Code::ITALY,
Country_Code::LUXEMBOURG,
Country_Code::NETHERLANDS,
Country_Code::NORWAY,
Country_Code::PORTUGAL,
Country_Code::SPAIN,
Country_Code::SWEDEN,
Country_Code::SWITZERLAND,
Country_Code::UNITED_KINGDOM,
Country_Code::HONG_KONG,
Country_Code::JAPAN,
Country_Code::SINGAPORE,
];
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ported from the old Wechatpay_Payment_Method

Comment on lines +153 to +155
if ( ! $webhook ) {
return $payload;
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

A quick cheeky fix: wc_get_webhook could also return null, so $webhook->get_delivery_url() could fail.

@@ -831,6 +828,127 @@ public function test_correct_payment_method_title_for_order() {
}
}

public function test_process_payment_sets_card_payment_method_and_title() {
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 added these tests to check my new changes in the process_payment method, ensuring the payment method title is correctly set.

Copy link
Contributor
github-actions bot commented May 27, 2025

Size Change: 0 B

Total Size: 1.24 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.45 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.45 kB
release/woocommerce-payments/assets/css/success.css 1.06 kB
release/woocommerce-payments/assets/css/success.rtl.css 1.06 kB
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.68 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.68 kB
release/woocommerce-payments/dist/blocks-checkout.js 54 kB
release/woocommerce-payments/dist/cart-block.js 17.1 kB
release/woocommerce-payments/dist/cart.js 5.71 kB
release/woocommerce-payments/dist/checkout-rtl.css 1.08 kB
release/woocommerce-payments/dist/checkout.css 1.08 kB
release/woocommerce-payments/dist/checkout.js 33.9 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 367 B
release/woocommerce-payments/dist/express-checkout.css 367 B
release/woocommerce-payments/dist/express-checkout.js 16.8 kB
release/woocommerce-payments/dist/frontend-tracks.js 833 B
release/woocommerce-payments/dist/index-rtl.css 20 kB
release/woocommerce-payments/dist/index.css 20 kB
release/woocommerce-payments/dist/index.js 234 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 4.39 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.9 kB
release/woocommerce-payments/dist/multi-currency.css 4.39 kB
release/woocommerce-payments/dist/multi-currency.js 56.6 kB
release/woocommerce-payments/dist/order-rtl.css 740 B
release/woocommerce-payments/dist/order.css 740 B
release/woocommerce-payments/dist/order.js 42.6 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.34 kB
release/woocommerce-payments/dist/payment-gateways.css 1.34 kB
release/woocommerce-payments/dist/payment-gateways.js 37.6 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 375 B
release/woocommerce-payments/dist/plugins-page.css 375 B
release/woocommerce-payments/dist/plugins-page.js 20.1 kB
release/woocommerce-payments/dist/product-details-rtl.css 433 B
release/woocommerce-payments/dist/product-details.css 436 B
release/woocommerce-payments/dist/product-details.js 12.3 kB
release/woocommerce-payments/dist/settings-rtl.css 11.8 kB
release/woocommerce-payments/dist/settings.css 11.7 kB
release/woocommerce-payments/dist/settings.js 221 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.2 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 730 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.3 kB
release/woocommerce-payments/dist/success.js 6.03 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 21.8 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 6.11 kB
release/woocommerce-payments/dist/woopay-express-button.js 23.1 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.31 kB
release/woocommerce-payments/dist/woopay.css 4.28 kB
release/woocommerce-payments/dist/woopay.js 71.1 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 625 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.46 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/jetpack-script-data.js 957 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.02 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/script-data.js 69 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/babel.config.js 163 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.js 14.3 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.rtl.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.css 10.1 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.js 29.7 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.rtl.css 10.1 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.js 280 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.rtl.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.css 625 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.js 333 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.rtl.css 626 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-users.js 417 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-users-connection.js 161 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 585 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.css 215 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.css 721 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.js 412 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-users.js 625 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.04 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 294 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 408 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.59 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 301 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 746 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 574 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 414 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 543 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.78 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.84 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 545 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.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.7 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 507 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 358 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 428 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 782 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.09 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.26 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 391 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.04 kB

compressed-size-action

@@ -1777,6 +1776,33 @@ public function process_payment_for_order( $cart, $payment_information, $schedul

$this->maybe_add_customer_notification_note( $order, $processing );

if ( empty( $_POST['payment_request_type'] ) && empty( $_POST['express_payment_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
// Extract payment method details for setting the payment method title.
if ( $payment_needed ) {
Copy link
Contributor Author
@frosso frosso May 27, 2025

Choose a reason for hiding this comment

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

Moving this logic from below - this is one of the main fixes.

@frosso frosso self-assigned this May 27, 2025
@@ -169,7 +169,7 @@ public function test_woopay_order_payment_status_changed_with_verified_user_stor
$order = \WC_Helper_Order::create_order( $verified_user->ID );
$order->set_billing_email( $verified_user->user_email );
$order->save();
WooPay_Session::woopay_order_payment_status_changed( $order->get_Id() );
Copy link
Contributor Author

Choose a reason for hiding this comment

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

There was a little typo in the method's name

@frosso frosso requested a review from Copilot May 28, 2025 15:41
Copy link
Contributor
@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR refactors the WeChat Pay integration to use the new config-driven WechatPayDefinition and ensures the payment method title is set before early exits during payment processing. Tests and legacy classes are updated or removed accordingly.

  • Converts legacy Wechatpay_Payment_Method to WechatPayDefinition and updates registries
  • Moves title-setting logic before early returns in process_payment_for_order
  • Adds/updates unit tests and fixes a method name casing issue in an existing test

Reviewed Changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
includes/payment-methods/Configs/Definitions/WechatPayDefinition.php Adds the new WeChat Pay definition class
includes/class-wc-payment-gateway-wcpay.php Moves title-setting earlier in process_payment_for_order
includes/class-wc-payments.php Removes legacy WeChat Pay class includes
includes/payment-methods/Configs/Registry/PaymentMethodDefinitionRegistry.php Registers the new WechatPayDefinition
includes/woopay/class-woopay-order-status-sync.php Guards against missing webhook object in payload creation
tests/unit/woopay/test-class-woopay-session.php Fixes get_Id() to get_id() call
tests/unit/payment-methods/test-class-upe-split-payment-gateway.php Adds tests for setting titles on card and SEPA payments
tests/WCPAY_UnitTestCase.php Cleans up test products and transients before each test
changelog/fix-payment-method-title-for-wechat-pay Adds changelog entry for this patch
Comments suppressed due to low confidence (1)

tests/unit/woopay/test-class-woopay-session.php:172

  • The method name was corrected from get_Id() to get_id(). Verify that all other calls to this method in tests use the correct lowercase id casing to avoid failures.
WooPay_Session::woopay_order_payment_status_changed( $order->get_id() );

@@ -38,6 +38,34 @@ class WooPay_Session_Test extends WCPAY_UnitTestCase {
public function set_up() {
parent::set_up();

// Clear any existing test products and their lookup table entries.
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 needed to add this change to the base unit test case. I'm still not sure why, but the WC_Helper_Order::create_order() call started to become problematic. I started seeing these kinds of errors in the WooPay_Session_Test unit tests:

WordPress database error Duplicate entry '327' for key 'wptests_wc_product_meta_lookup.PRIMARY' for query INSERT INTO wptests_wc_product_meta_lookup [...]

It seems that there is a problem with duplicate keys. I ended up clearing up any dummy sku products that have been added by the helper, which seems to fix the issue 🤷

@frosso frosso requested a review from a team May 28, 2025 15:48
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 - the core change makes sense and so do the additional fixes. Thanks for taking care of them!

:shipit:

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.

[GlobalStep] Payment method name fails to appear in the "Refund via WooPayments" button on the "Edit order" page.
4 participants
0