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 || '创建订阅失败,请重试');