feat(subscription): 优化订阅及支付二维码生成流程
- 统一调用 subscribe 接口创建订阅,确保后端设置价格类型 - 免费应用订阅成功后直接激活,提示订阅成功并刷新订阅信息 - 付费应用订阅成功后调用 pay 接口生成支付小程序码 - 支持显示支付二维码,展示付费信息,弹出支付模态框 - 增加支付状态轮询逻辑以跟踪支付进度 - 优化错误处理,打印错误日志并提示用户重试
This commit is contained in:
@@ -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 || '创建订阅失败,请重试');
|
||||
|
||||
Reference in New Issue
Block a user