Wix Velo JS在创建电子商务验证服务插件时遇到的问题

前端开发 2026-07-11

在Wix Velo创建电子商务验证服务插件时遇到问题。自动生成的模板代码创建了这个:

import * as ecomValidations from 'interfaces-ecommerce-v1-validations-provider';
import { getSupabaseClient } from 'backend/supabase';

/**
 * This method retrieves validation violations from your app.
 *
 * Wix calls this method when certain actions are performed on a visitor's cart and checkout...
 * @param {import('interfaces-ecommerce-v1-validations-provider').GetValidationViolationsOptions} options
 * @param {import('interfaces-ecommerce-v1-validations-provider').Context} context
 * @returns {Promise<import('interfaces-ecommerce-v1-validations-provider').GetValidationViolationsResponse | import('interfaces-ecommerce-v1-validations-provider').BusinessError>}
 */
// export const getValidationViolations = async (options, context) => {};

/** @param {import('interfaces-ecommerce-v1-validations-provider').GetValidationViolationsRequest} options */
export async function getValidationViolations(options, context) {
    const checkout = options.checkout;
    const checkoutId = checkout._id;

主要错误已经在Wix代码中以警告的形式高亮显示:
Cannot find module 'interfaces-ecommerce-v1-validations-provider' or its corresponding type declaration.

我得到这个错误所做的一切,仅仅是按照Wix开发者界面来创建它,错误就内置在模板代码中了。

复现步骤:
https://editor.wix.com/ > 开发者模式 > 后端与公共 > 添加服务插件 > eCommerce Validation > 输入名称 > 添加与编辑代码 > .js和 config.js文件中显示错误

此警告在对 interfaces-ecommerce-v1-validations-provider 的每一次引用时都会出现。

我的最终目标是在结账超过29分钟时阻止完成结账。我只需要一个可靠的自动化方法,在结账完成时触发代码,以便验证自结账创建以来是否已超过29分钟(防止对过时结账进行支付)。

解决方案

这是Wix的 Service Plugin模板生成器的已知问题——interfaces-ecommerce-v1-validations-provider模块在Wix平台的运行时解析,而不是在编辑器中。这个警告是表面上的,不会阻止你的代码运行。

对于你的实际目标(阻止超过29分钟的结账),问题在于options.validationInfo对象包含商品项、运费、账单和折扣——但不包含结账创建的时间戳。该验证SPI不会在传给此函数的结账对象上暴露createdDate。

你有几种选择:

选项1:自行存储时间戳

使用Wix Data集合记录结账开始的时间,然后在验证阶段进行检查:

import * as ecomValidations from 'interfaces-ecommerce-v1-validations-provider';
import wixData from 'wix-data';

export const getValidationViolations = async (options, context) => {
  const violations = [];
  const checkoutId = options.validationInfo?.purchaseFlowId;

  if (checkoutId) {
    const result = await wixData.query('CheckoutTimestamps')
      .eq('checkoutId', checkoutId)
      .find();

    if (result.items.length > 0) {
      const createdAt = new Date(result.items[0].createdAt).getTime();
      const minutesElapsed = (Date.now() - createdAt) / 1000 / 60;

      if (minutesElapsed > 29) {
        violations.push({
          severity: ecomValidations.Severity.ERROR,
          target: { other: { name: ecomValidations.NameInOther.OTHER_DEFAULT } },
          description: 'This checkout session has expired. Please start a new checkout.',
        });
      }
    }
  }

  return { violations };
};

你需要在结账创建时向CheckoutTimestamps集合填充数据(通过 https://dev.wix.com/docs/velo/api-reference/wix-ecom-v2/events/checkout)。

选项2:改用电子商务事件API

如果你不一定需要在结账时就阻止完成,可以使用onCheckoutCompleted事件来检查时机,并在事后进行退款或标记订单。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章