• erio's avatar
    fix(payment): alipay redirect-only flow, H5 detection and popup sizing · c3cb0280
    erio authored
    The native Alipay provider previously tried to embed the payment page
    URL into a QR code on the client — the URL is not a scannable payload
    so the QR never worked. Merchants also hit a H5 detection mismatch
    whenever the backend UA sniffer missed iPadOS 13+ or embedded browsers,
    and the popup window was too small for Alipay's standard checkout
    layout (QR + account-login panel on the right), forcing the user to
    scroll horizontally and vertically.
    
    Changes:
    
    Backend
    - alipay.go: drop QR-on-URL path. Use redirect-only flow —
      alipay.trade.page.pay for PC (returns a gateway URL the browser
      opens in a new window) and alipay.trade.wap.pay for H5 (returns a
      URL the browser jumps to). Both flows produce pages on
      openapi.alipaydev.com / excashier.alipay.com; the client never
      renders a QR itself.
    - payment_handler.go: add optional is_mobile bool to
      CreateOrderRequest so the frontend can declare the device
      explicitly. Server still falls back to UA sniffing when absent.
    
    Frontend
    - types/payment.ts, PaymentView.vue: declare is_mobile in
      CreateOrderRequest and pass the computed isMobileDevice() value.
    - providerConfig.ts: replace the two fixed POPUP_WINDOW_FEATURES
      constants with getPaymentPopupFeatures(), which prefers 1250×900
      (Alipay's checkout footprint), clamps to window.screen.avail* and
      centers the popup so it never overflows on smaller laptops.
    - PaymentQRDialog.vue, PaymentStatusPanel.vue, StripePaymentInline.vue,
      PaymentView.vue: use the new helper at all popup call sites.
    c3cb0280
PaymentStatusPanel.vue 11 KB