Files
websopy-taro/.workbuddy/memory/MEMORY.md
赵忠林 1b21f5e5b1 feat(pay-bak): 新增小程序支付页面及相关配置
- 新增确认支付页面配置,设置导航栏标题和样式
- 实现小程序支付页完整组件逻辑,包括加载订单、发起JSAPI支付等
- 支持通过 scene 或 subscriptionNo 获取订单参数
- 完善支付流程接口请求及错误处理,支持自动登录和支付确认
- 增加支付成功、支付中、支付失败、取消等状态页面展示
- 支持支付成功后跳转已购产品页或用户页
- 提供取消支付返回逻辑和界面展示
- 细化支付金额显示和提示用户支付后可使用应用功能
2026-07-16 00:06:03 +08:00

3.3 KiB
Raw Blame History

websopy-taro 项目记忆

Tailwind CSS 在小程序中的兼容性规则

以下 Tailwind 类名在 WXSS 中不兼容,项目内禁止使用,已通过 PostCSS 插件 postcss-remove-wxss-incompatible.js 自动移除对应的 CSS 规则:

  1. !xxx important 修饰符(如 !visible):生成 .!visible 选择器WXSS 不支持反斜杠转义的 !

  2. 0.5 的类名(如 w-0.5h-0.5gap-0.5):类名中的 . 被转义为 \.,生成 .w-0\.5 这样的选择器WXSS 不兼容。应改用等效的整数尺寸或自定义值替代。

  3. space-x-* / space-y-*(如 space-y-4):依赖 :not() + ~ 兄弟组合器 + CSS 变量 + 嵌套 calc()WXSS 全不支持。应改用 flex flex-col gap-* 实现等效间距。

  4. divide-x-* / divide-y-*:同样依赖 :not() + ~WXSS 不兼容。

替代方案速查

禁用类名 替代写法
space-y-4 flex flex-col gap-4
space-x-4 flex flex-row gap-4
!visible 直接写 style={{ visibility: 'visible' }} 或自定义类
w-0.5 用自定义值或 w-1 替代

微信小程序接口合规

剪切板接口(运营规范 5.15.4

  1. 只允许用户主动触发复制:所有 Taro.setClipboardData 调用必须绑定在明确的用户点击事件上,禁止在无用户操作时自动读写剪切板。
  2. 禁止复制后强制中断流程:复制成功后不得强制跳转、强制关注、强制添加客服等,不能要求用户通过其他方式才能完成当前业务流程。
  3. 避免重复/失败 Toast 干扰体验:微信小程序调用 setClipboardData 成功后系统会自带「内容已复制」提示。为避免重复提示及误报失败,统一封装 utils/common.ts 中的 copyText 函数:
    • 小程序端weapp直接调用原生 wx.setClipboardData,不再额外显示自定义 复制成功 / 复制失败 Toast
    • 失败时仅通过 console.error 输出错误日志,便于排查
    • 非小程序端保留原有成功/失败提示

项目内剪切板使用现状

已审查所有 setClipboardData 调用:

  • 均通过按钮点击触发(复制咨询模板、复制密钥、复制链接、复制兑换码等)
  • getClipboardData(自动读取剪切板)调用
  • 无复制后强制跳转或中断业务流程的行为
  • 首页「立即开通」等外链按钮点击后复制链接;相对路径入口(如开发者中心)改为 Taro.navigateTo 跳转,不再复制

当前实现基本符合 5.15.4 规范。

AppSubscription 状态字段语义(踩坑必读)

判断"是否已支付"必须用 payStatus0=未支付 / 1=已支付)这个支付状态字段,不能status(订阅生命周期 active/pending/expired/cancelled

  • status:订阅的生命周期状态,不等于支付状态。后端 renewPay 为了避免放弃支付导致服务中断,会故意保留原 status='active'、只把 payStatus 设为 0。
  • payStatus本次订单的支付状态。支付成功mp-confirm / handleBalancePay后才置 1。

续费场景下这两个字段完全解耦:用 status === 'active' 判支付会直接误判为已支付,详见 2026-07-16.md 修复记录。