Commit Graph
3483 Commits
Author SHA1 Message Date
erio 3ce57cade8 fix(payment): use Stripe built-in QR dialog for WeChat Pay
Remove handleActions:false and custom QR rendering. Let Stripe's
native QR dialog handle WeChat Pay display in the popup window.
2026-04-09 18:04:04 +08:00
erio 5c17718633 chore: bump version to 0.1.108.130 2026-04-09 17:49:09 +08:00
erio ae1709a616 fix(payment): use normal style for order number column 2026-04-09 17:49:09 +08:00
erio aa1b87fdbb chore: bump version to 0.1.108.129 2026-04-09 17:43:42 +08:00
erio 3098651bdd fix(payment): show order number as separate column in order list 2026-04-09 17:43:42 +08:00
erio 8c73ded205 chore: bump version to 0.1.108.128 2026-04-09 17:34:23 +08:00
erio 49a36e55a9 feat(payment): show out_trade_no in order list 2026-04-09 17:34:23 +08:00
erio 2f6d926a9b chore: bump version to 0.1.108.127 2026-04-09 17:29:18 +08:00
erio cb9dcaec2e fix(payment): show both order ID and order number in result pages
Display order ID (#24) and order number (sub2_xxx) as separate rows
in payment result and status panel success views.
2026-04-09 17:29:18 +08:00
erio e42838eb82 chore: bump version to 0.1.108.126 2026-04-09 17:23:23 +08:00
erio 01864a7a1e fix(payment): ensure providers loaded before webhook, show out_trade_no
- Call EnsureProviders before webhook provider lookup to fix
  "provider not registered" error after restart or config changes
- Display out_trade_no instead of numeric ID in payment result pages
2026-04-09 17:23:23 +08:00
erio 3f557d0f9d chore: bump version to 0.1.108.125 2026-04-09 17:14:39 +08:00
erio cfc20f6670 fix(admin): preserve provider list order after editing
Update provider in place instead of reloading the entire list,
which could change the display order.
2026-04-09 17:14:39 +08:00
erio 8e4641e176 chore: bump version to 0.1.108.124 2026-04-09 16:39:22 +08:00
erio 5ae2061d05 fix(admin): fix payment provider settings issues
- Remove "at least one payment type required" validation, allow
  saving providers with no payment types selected
- Auto-fill current domain for empty notify/return URL on save
  (trim whitespace, fall back to window.location.origin)
- Add type="button" to all buttons inside the settings form that
  are not submit buttons (edit, delete, refresh, create provider)
  to prevent accidental form submission triggering main settings save
2026-04-09 16:39:22 +08:00
erio 9fdc7c92e2 chore: bump version to 0.1.108.123 2026-04-09 16:07:26 +08:00
erio 11ba3b6ecd fix(payment): restore Stripe popup flow, fix WeChat double QR dialog
Restore popup handling for Stripe Alipay/WeChat (reverts inline-only change).
Fix WeChat double QR issue by passing handleActions: false to
confirmWechatPayPayment, which prevents Stripe's built-in QR dialog
and lets our popup render the QR code directly.

Flow after fix:
- Stripe Alipay: popup → redirects to Alipay
- Stripe WeChat: popup → directly shows QR code (no Stripe dialog)
- Stripe Card: inline confirm → success page
2026-04-09 16:07:26 +08:00
erio 1ffea8faec chore: bump version to 0.1.108.122 2026-04-09 15:41:24 +08:00
erio 8b4e6bf317 refactor(payment): unify Stripe payment flow, remove StripePopupView dependency
All Stripe methods now use confirmPayment({redirect: 'if_required'}):
- Card: confirms inline, shows success page
- WeChat: Stripe shows QR modal overlay on same page, no popup
- Alipay: Stripe redirects to Alipay page, returns to result page

Removes POPUP_METHODS, StripePopupView postMessage handshake, and
onStripeRedirect handler. Eliminates double-popup issue for WeChat
(3 windows → 1) and simplifies Alipay (2 windows → 1 redirect).
2026-04-09 15:41:07 +08:00
erio 7505c745d2 chore: bump version to 0.1.108.121 2026-04-09 15:21:44 +08:00
erio 8a98f726b9 fix(payment): show success screen after Stripe card payment instead of auto-returning
Stripe card payment now shows a success page with order details and a
manual confirm button, matching the QR code payment success flow.
Previously it auto-returned to the recharge page after 1.5 seconds.
2026-04-09 15:21:23 +08:00
erio 5c94b51d04 chore: bump version to 0.1.108.120 2026-04-09 14:56:38 +08:00
erio 03b97f14ad fix(payment): add return_url verification for popup payment mode
EasyPay popup mode relies on notify_url (webhook) to update order status,
but if the callback is missed, orders stay PENDING forever. This adds:

- POST /api/v1/payment/orders/verify endpoint that actively queries
  the upstream provider to check payment status
- Frontend PaymentResultView calls verify when receiving EasyPay
  return_url params (out_trade_no)
- Fix checkPaid to fall back to OutTradeNo when PaymentTradeNo is empty
  (popup mode doesn't have trade_no until the notify callback)
2026-04-09 14:56:24 +08:00
erio 6575fc1d1c chore: bump version to 0.1.108.119 2026-04-09 13:09:28 +08:00
erio 3844c8688e refactor(payment): remove DB ID from order number, use out_trade_no lookup
Order ID format changed from sub2_5 to sub2_20250409aB3kX9mQ
(prefix + date + 8-char random, no DB ID embedded).

- Add out_trade_no column to payment_orders table
- Store generated external ID on order creation
- Webhook handler looks up order by out_trade_no instead of parsing DB ID
- Fallback to legacy sub2_N format for existing orders
2026-04-09 13:09:27 +08:00
erio a7a7257603 chore: bump version to 0.1.108.118 2026-04-09 12:21:13 +08:00
erio f211c7f22b fix: order ID format sub2_20250409aB3kX9mQ_N, parse via last underscore 2026-04-09 12:21:13 +08:00
erio 7ef11b3180 chore: bump version to 0.1.108.117 2026-04-09 11:58:49 +08:00
erio 6c9fd2ed00 fix: prevent settings save on provider edit, randomize order IDs
- Remove saveSettings() call from handleSaveProvider - editing a
  provider should not save the entire settings form
- Change order ID format from sub2_5 to sub2_20250409_5_aB3kX9mQ
  (prefix + date + dbID + 8-char alphanumeric random) to avoid
  collisions with external payment providers
- parseOrderID supports both legacy and new format
2026-04-09 11:58:49 +08:00
erio 7de6de09d7 chore: bump version to 0.1.108.116 2026-04-09 11:44:32 +08:00
erio 53bcd4ce53 fix(admin): compact provider dialog layout, fix broken template 2026-04-09 11:44:32 +08:00
erio 1d8f39e473 chore: bump version to 0.1.108.115 2026-04-09 03:35:38 +08:00
erio 7c2dbb07b5 fix(admin): skip null values when loading settings from backend
Backend returns null for unconfigured fields. Object.assign overwrites
form defaults (e.g. payment_enabled_types: []) with null, causing
"Cannot read properties of null" errors. Now only non-null values
are applied, preserving safe defaults for unconfigured environments.
2026-04-09 03:35:38 +08:00
erio 7d45fad287 chore: bump version to 0.1.108.114 2026-04-09 03:20:53 +08:00
erio 382b96b7b4 feat(payment): support alipay_direct/wxpay_direct in method selector
Add alipay_direct and wxpay_direct to METHOD_ORDER so they appear
in the correct position when enabled. The checkout API already returns
these types from direct provider instances; the method selector's
icon/style matching (includes('alipay')) already handles them.
2026-04-09 03:20:52 +08:00
erio 2fc413c82e chore: bump version to 0.1.108.113 2026-04-09 03:13:35 +08:00
erio 7f2877363d feat(payment): lightweight Stripe popup with postMessage credentials
Create StripePopupView.vue - a standalone minimal page (no AppLayout)
that receives clientSecret/publishableKey via postMessage from parent:
- Alipay: auto-calls confirmAlipayPayment(), shows "正在跳转..."
- WeChat: calls confirmWechatPayPayment(), shows QR code inline
- Much faster than loading full StripePaymentView (no API calls needed)
2026-04-09 03:13:35 +08:00
erio dd87c273da chore: bump version to 0.1.108.112 2026-04-09 03:00:49 +08:00
erio f50b48c482 fix(payment): restore easypay toggle, disable instances when provider disabled
- Add easypay back to enabled provider toggles (alongside alipay, wxpay, stripe)
- Disabling a provider toggle now also disables all matching provider instances
- Simplify enabledProviderKeyOptions - direct mapping instead of special cases
- Label: "启用的服务商" with hint about instance auto-disable
2026-04-09 03:00:49 +08:00
erio 173aa9325e chore: bump version to 0.1.108.111 2026-04-09 02:29:18 +08:00
erio a8a98cc5a1 fix: order expiry cancels upstream, subscription layout, popup & label fixes
- ExpireTimedOutOrders now cancels upstream payment (Stripe PaymentIntent)
  before marking order as expired
- Active subscriptions moved below plan list with compact inline style
- StripePaymentView uses minimal layout (no AppLayout) in popup mode
- Fix misleading "服务商" label → "支持的支付方式" for payment type toggles
2026-04-09 02:29:18 +08:00
erio 302e6acbd9 chore: bump version to 0.1.108.110 2026-04-09 02:13:34 +08:00
erio 21bcc04356 fix(payment): widen Stripe popup for Alipay checkout page (1250px) 2026-04-09 02:13:34 +08:00
erio 74a38ead49 chore: bump version to 0.1.108.109 2026-04-09 02:04:23 +08:00
erio fbdb68a0aa refactor(payment): direct Stripe confirm for alipay/wechat popup
Instead of opening a popup that renders the full Payment Element again
(forcing users to re-select payment method), pass the selected method
via query param. The popup now directly calls:
- confirmAlipayPayment() for Alipay (redirects to Alipay page)
- confirmWechatPayPayment() for WeChat (displays QR code)
Card and Google Pay remain inline on the main page.
2026-04-09 02:04:23 +08:00
erio 204fa00bf5 chore: bump version to 0.1.108.108 2026-04-09 01:50:48 +08:00
erio 090f2e721f fix(payment): show result inline for all terminal states instead of auto-returning
Success, cancelled, and expired states now all display a result screen
in-place. User must click confirm to return, matching sub2apipay behavior.
2026-04-09 01:50:48 +08:00
erio ad2b240fd8 chore: bump version to 0.1.108.107 2026-04-09 01:24:30 +08:00
erio 373464db26 fix(payment): add cid and fix double-slash in easypay redirect mode
createRedirectPayment was missing the cid parameter (channel ID) that
createAPIPayment already included via resolveCID(). This caused EasyPay
to use a default channel instead of the configured one (e.g. 13256/13264).

Also trim trailing slash from apiBase to prevent double-slash in URLs.
2026-04-09 01:24:15 +08:00
erio bfef48f932 chore: bump version to 0.1.108.106 2026-04-09 01:13:32 +08:00