如何使 Shopify 功能仅在结账时运行,而不是在其他购物车操作(例如添加到购物车)上运行

问题描述 投票:0回答:1

我创建了一个 Shopify 函数,作为购物车和结账验证扩展。它尝试要求名字、姓氏和电话号码输入字段。我知道 Shopify 管理设置中有一种本地方法可以执行此操作,但是,如果您在 Shopify B2B 中启用运送到任何地址,它将覆盖此设置。

该功能的问题在于它在结帐之外的其他购物车操作中运行。当客户登录并且没有与其关联的名字或电话号码时,这会带来问题,并且在将产品添加到购物车时会引发错误。

我尝试在 run.js 文件中添加各种条件,例如检查 paymentAddress、deliveryOptions、selectedDeliveryOption 等,作为确定我们是否处于结帐步骤的一种方式,但是,所有这些条件也都会返回/可访问由于某种原因在结帐之前。

有没有办法让这个函数只在结账时执行?

您可以在下面看到我的shopify.extension.toml:

api_version = "2024-10"

[[extensions]]
name = "t:name"
handle = "required-input-field-validations"
type = "function"

description = "t:description"

  [[extensions.targeting]]
  target = "purchase.validation.run"
  input_query = "src/run.graphql"
  export = "run"

  [extensions.build]
  command = ""
  path = "dist/function.wasm"

这是我的 run.js 文件:

// @ts-check

/**
 * @typedef {import("../generated/api").RunInput} RunInput
 * @typedef {import("../generated/api").FunctionRunResult} FunctionRunResult
 */

/**
 * The entry point for the Shopify Function
 *
 * @param {RunInput} input
 * @returns {FunctionRunResult}
 */
export function run(input) {
  const errors = [];

  // Access delivery address information from the input
  const deliveryGroups = input.cart.deliveryGroups || [];
  const deliveryAddress = deliveryGroups[0]?.deliveryAddress || {};

  const firstName = deliveryAddress.firstName || '';
  const lastName = deliveryAddress.lastName || '';
  const phone = deliveryAddress.phone || '';

  // Debugging logs
  console.log('First Name:', firstName);
  console.log('Last Name:', lastName);
  console.log('Phone:', phone);

  // Validate First Name
  if (!firstName.trim()) {
    errors.push({
      localizedMessage: 'Please enter your first name.',
      target: 'deliveryAddressFirstName',
    });
  }

  // Validate Last Name
  if (!lastName.trim()) {
    errors.push({
      localizedMessage: 'Please enter your last name.',
      target: 'deliveryAddressLastName',
    });
  }

  // Validate Phone Number
  if (!phone.trim()) {
    errors.push({
      localizedMessage: 'Please enter your phone number.',
      target: 'deliveryAddressPhone',
    });
  }

  return { errors };
}

谢谢你。

shopify shopify-app shopify-api
1个回答
0
投票

我提出了一个想法,但尚未完全测试它。

我相信购物车级别有一个 BuyerJourney 输入并具有以下值:

购物车互动 买家正在与购物车互动。

CHECKOUT_COMPLETION 买家正在完成结帐。

结账_互动 买家正在与结账互动。

我打赌你可以为 BuyerJouneyStep 等于 CHECKOUT_INTERACTION 做一个逻辑门,然后在那里运行你的验证逻辑。

https://shopify.dev/docs/api/functions/reference/cart-checkout-validation/graphql/common-objects/buyerjourneystep

© www.soinside.com 2019 - 2024. All rights reserved.