Shopify Functions
【Functions】冷凍品と常温品の同時購入ブロック・特定商品購入制限バリデーション
Shopify Functions(Cart Validation API)を用いて、カート内に温度帯が異なる商品が混在している場合や、特定商品の購入数量上限を超えている場合に、チェックアウトボタンをロックして警告メッセージを表示するロジック。
主な活用ユースケース: 食品ECの温度帯別同梱不可制御、限定スニーカーの1人1点制限、医薬品の確認事項同意チェック。
main.rsrust
use shopify_function::prelude::*;
use shopify_function::Result;
#[shopify_function_target(query_file = "src/run.graphql")]
fn run(input: input::ResponseData) -> Result<output::FunctionResult> {
let mut errors = Vec::new();
let mut has_frozen = false;
let mut has_room_temp = false;
for line in input.cart.lines {
if let Some(attribute) = line.merchandise.as_product_variant().and_then(|v| v.product.metafield) {
if attribute.value == "frozen" { has_frozen = true; }
if attribute.value == "normal" { has_room_temp = true; }
}
}
if has_frozen && has_room_temp {
errors.push(output::FunctionError {
localized_message: "冷凍商品と常温商品は同時にご注文いただけません。別々にご注文ください。".to_string(),
target: "cart".to_string(),
});
}
Ok(output::FunctionResult { errors })
}アーキテクチャ & 実装のポイント
WasmバイナリとしてShopifyサーバー上で5ms未満で実行
テーマのJavaScript書き換えによる回避が不可能な完全バックエンド制御
Shopify PlusのCheckout Extensibilityに完全対応
このレシピに関するFAQ
Q. このバリデーションはスマホのブラウザバック時にも機能しますか?
A. はい。Shopifyのサーバーサイドで検証されるため、不正なリクエストや画面戻り時でも確実に購入をブロックします。