Liquidで書いたPaymentButtonを押すと「Checkout unavailable」エラー

Topic summary

Shopifyのカスタムページテンプレートで商品一覧を作成中、各商品に配置したPayment Buttonが「Checkout unavailable」エラーで機能しない問題が報告されました。

問題の詳細:

  • Liquidコードでcollections.all.productsをループし、form 'product'payment_buttonを使用
  • Custom contentセクション内のHTMLブロックに実装
  • 商品タイトルは表示されるが、ボタンがdisabled状態またはエラーになる
  • 標準の商品詳細ページでは正常に動作

トラブルシューティング:

  • form変数への商品情報の受け渡し確認
  • 開発ストアでの検証中、チェックアウト画面への遷移が不安定で400エラーが発生
  • コレクションテンプレートの使用が推奨される

解決:
最終的に<input type="hidden" name="id" />がform内に存在していないことが原因と判明。このinputタグをformに追加することで正常に動作するようになりました。問題が複雑な場合はShopifyサポートへの問い合わせも推奨されています。

Summarized with AI on November 13. AI used: claude-sonnet-4-5-20250929.

Shopifyのテーマ編集からページテンプレートを新規追加しています。
商品一覧のような画面になる予定で、各商品にPaymentButtonを配置したいのですが、以下のようにLiquidへコードを追加してもPaymentButtonが機能しません。(添付動画参考)

{% for product in collections.all.products %}
  {% if product.id == 'aaa' %}
    {% form 'product', product %}
      {{ form | payment_button }}
    {% endform %}
  {% endif %}
{% endfor %}

前提として該当のストアはまだ未公開です。
テーマ標準の商品詳細ページのPaymentButtonは機能しています。

原因・修正方法をご教示いただけますと幸いです…。

@daiki44

初めまして。新垣です。

全体のコードを見てみないと具体的な解決策をお伝えできないのですが、確認すべき点としては下記になります。

・formタグのproduct変数には、該当商品の情報が渡されているか

・管理画面 > 商品管理 > 該当商品 > プレビューから購入しようとすると同様のエラーが発生します

また、商品一覧画面を作るのであれば、ページテンプレートではなくコレクションテンプレートを利用した方が統一性が持てて良いかと思います。

以上、参考になりましたら幸いです。

解決できないようであれば、お気兼ねなく個別でメッセージを下さい。

@NIIGAKI_HYUGA

ご返信ありがとうございます!

・formタグのproduct変数には、該当商品の情報が渡されているか

カスタムページに「Custom content」セクションを追加し、「HTML」ブロックを追加しております。

「HTML」ブロックの中に以下のコードを書いておりまして、「title」は表示されるのですがFormのButtonがエラーの状態となっております…。

1週間ほど触っていなかったのですが、元々スクリーンショットの動画のように押せてエラーが出る状態だったのですが、現状はButtonがdisabledの状態となっています。

## Custom content

xxx

{% for product in collections.all.products %}
  {% if product.id == xxx %}
    {{ product.title }}
    {% form 'product', product %}
      {{ form | payment_button }}
    {% endform %}
  {% endif %}
{% endfor %}

・管理画面 > 商品管理 > 該当商品 > プレビューから購入しようとすると同様のエラーが発生します

同様の商品かつプレビュー画面で「Buy it now」ボタンを押すと、同様のエラーとなっております。

前提として開発ストアなのですが、パスワード入力後のストア画面ではエラーにならずCheckout画面に遷移します。

また、商品一覧画面を作るのであれば、ページテンプレートではなくコレクションテンプレートを利用した方が統一性が持てて良いかと思います。

ありがとうございます。こちらも参考にさせていただきます。

@daiki44

弊テストストア(開発アウト)の方で検証していましたら、チェックアウト画面に遷移できたりできなかったりを繰り返し、原因を探っていたところ400エラーが起こってしまいました。

御ストアで検証の上、同エラーが起きてしまう場合もしかするとShopifyに問い合わせした方が良いかも知れません。

参考までにチェックアウト画面に遷移したりしなかったりを繰り返した時のコードはこちらです。

ちなみに最初のバリアントを追加するコードになっているので、バリアントを選択したい場合は追加のロジックが必要になります。

{% for product in collections.all.products %}

{{ product.title }}

{{ product.price | money }}

{% form 'product', product, novalidate: 'novalidate' %}
  
  
{{ form | payment_button }} // ダイナミックチェックアウトボタン
{% endform %}
{% endfor %}

以上、参考になりましたら幸いです。

@NIIGAKI_HYUGA

ご丁寧にありがとうございます!

記載いただいたコードを参考にさせていただいたところ、 が存在していないことが原因のようでした。


をform内に追記したところ無事に動きました。

ドキュメントに記載がなくだいぶハマっていたので、ご丁寧に教えてくださって本当にありがとうございました?‍