From 7c73f9f82115244ad65110ca60a59f7cb48256af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 15 Jul 2026 14:25:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(subscription):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=AE=A2=E9=98=85=E5=8F=8A=E6=94=AF=E4=BB=98=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 统一调用 subscribe 接口创建订阅,确保后端设置价格类型 - 免费应用订阅成功后直接激活,提示订阅成功并刷新订阅信息 - 付费应用订阅成功后调用 pay 接口生成支付小程序码 - 支持显示支付二维码,展示付费信息,弹出支付模态框 - 增加支付状态轮询逻辑以跟踪支付进度 - 优化错误处理,打印错误日志并提示用户重试 --- src/views/shop/dashboard/index.vue | 43 ++++++++++++++++-------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/views/shop/dashboard/index.vue b/src/views/shop/dashboard/index.vue index 096752e..97403bc 100644 --- a/src/views/shop/dashboard/index.vue +++ b/src/views/shop/dashboard/index.vue @@ -499,32 +499,35 @@ const confirmSubscribe = async () => { if (!product?.productId) return; subscribing.value = true; try { - if (isFreeProduct.value) { - // 免费应用:直接创建并激活 - await subscriptionStore.subscribe({ - productId: product.productId, - subscriptionPeriod: selectedPeriod.value - }); + // 1. 创建订阅(subscribe 后端会 setPriceType,避免 generatePayQrcode 的 price_type 报错) + const subResult = await subscriptionStore.subscribe({ + productId: product.productId, + subscriptionPeriod: selectedPeriod.value + }); + // 免费应用:subscribe 直接激活,status=active + if (subResult.status === 'active') { message.success('订阅成功'); subscribeModalVisible.value = false; refreshSubscription(); return; } - // 付费应用:生成支付小程序码 - const result = await subscriptionStore.generatePayQrcode({ - productId: product.productId, - subscriptionPeriod: selectedPeriod.value, + // 2. 付费应用:用 pay 生成支付小程序码(参考 websopy-pc 的 subscribe + pay 模式) + const payResult = await subscriptionStore.pay( + subResult.subscriptionId, + 'wechat', envVersion - }); - paySubscriptionNo.value = result.subscriptionNo; - payQrcode.value = result.qrcodeBase64; - payPrice.value = Number(result.payPrice) || 0; - payProductName.value = - result.productName || product.productName || '应用订阅'; - subscribeModalVisible.value = false; - payModalVisible.value = true; - // 开始轮询支付状态 - startPolling(result.subscriptionNo); + ); + if ('miniappQrcode' in payResult) { + paySubscriptionNo.value = + payResult.subscriptionNo || subResult.subscriptionNo; + payQrcode.value = payResult.miniappQrcode; + payPrice.value = Number(payResult.payPrice) || 0; + payProductName.value = product.productName || '应用订阅'; + subscribeModalVisible.value = false; + payModalVisible.value = true; + // 开始轮询支付状态 + startPolling(paySubscriptionNo.value); + } } catch (e: any) { console.error('创建订阅失败:', e); message.error(e?.message || '创建订阅失败,请重试');