首页 > 解决方案 > Wix 网站路由器页面代码执行两次。在准备好的页面上,我正在执行 Wix Velo 的 OrderPlan 功能。创建 2 个具有相同计划的订阅

问题描述

这是我正在谈论的 wix 页面https://hotbodypal.wixsite.com/website/create-order?email=newuser4@ex.com&slug=premium-monthly-gp

这是 routes.js 中处理路由的代码

    export function create_order_Router(request) {
    return wixUsersBackend.generateSessionToken(request.query.email)
        .then((sessionToken) => {
            console.log("session token", sessionToken);
            return ok("create-order-page", {sessionToken, query: request.query});
        });
}

在此代码中,我在查询参数中传递电子邮件,然后在 routes.js 文件中,我正在执行 generateSessionToken 方法以获取登录会话令牌。然后将路由器数据中的这个令牌传递给页面“create-order-page”

在 Ready 的前端代码中:

import wixPaidPlans from 'wix-paid-plans';
import wixWindow from 'wix-window';
import wixData from 'wix-data';
import wixUsers from 'wix-users'
import wixLocation from 'wix-location';
$w.onReady(async function () {
    $w("#group17").hide();
    $w("#socialBar7").hide();
    var routerData = wixWindow.getRouterData();
    
    console.log("router data", routerData.query)
    if ((routerData.query.status == "done") || (routerData.query.status == "failed")) {
        console.log("done");
    } else {
        await wixUsers.logout();
        await wixUsers.applySessionToken(routerData.sessionToken)
        wixData.query("PaidPlans/Plans").eq("slug", routerData.query.slug)
            .find()
            .then(async (res) => {

                if (res.items.length > 0) {
                    console.log("create order page");
                    wixPaidPlans.orderPlan(res.items[0]._id)
                        .then((myOrder) => {
                            console.log("my order", myOrder);
                            setTimeout(function () {
                                wixLocation.to(wixLocation.url + "&status=done")
                            }, 500)
                        })
                        .catch(async (error) => {
                            console.log("error", error)
                            setTimeout(function () {
                                wixLocation.to(wixLocation.url + "&status=failed")
                            }, 500)
                        })
                } else {
                    setTimeout(function () {
                        wixLocation.to(wixLocation.url + "&status=failed")
                    }, 500)
                }
            })
    }
});

在前端,我首先获取会话令牌和定价计划的 slug,我调用 applySessionToken 以使用 oken 登录用户。然后我从数据库usign plan slu中获取计划数据

然后使用计划 ID 我正在执行 orderPlan 方法来创建免费计划订阅。但结果是它激活了 2 个具有相同计划的订阅。

没有其他页面或代码调用 orderPlan 方法。

请帮我解决这个奇怪的问题

标签: javascriptnode.jsreactjsvelo

解决方案


推荐阅读