Shopify Link Checkout — Shopify 链接结账
v1.0.0使用 Stripe Link 进行支付和 Playwright 进行浏览器结账的自主 Shopify 购买。跨所有 Shopify 商家搜索产品,生成一个...
运行时依赖
安装命令
点击复制技能文档
Shopify + Link 自动结账 使用 Stripe Link 进行支付和 Playwright 进行浏览器结账,从任何 Shopify 商店购买产品。
前提条件 Stripe Link CLI npm install -g @stripe/link-cli link-cli auth login --client-name "YourAgent" --format json 用户在返回的 verification_url 上进行授权。 从 ~/.config/link-cli-nodejs/config.json 备份凭据。
Shopify Catalog API 在 dev.shopify.com/dashboard → Catalogs → Get API key 获取凭据。 在环境变量中存储 CLIENT_ID 和 CLIENT_SECRET。
Playwright + Chromium npm install playwright npx playwright install chromium 如果缺少系统库(无头服务器),请手动下载 Debian 包并设置 LD_LIBRARY_PATH。 请参阅 references/chromium-deps.md。
工作流程 步骤 1:找到产品 选项 A — Catalog API(跨所有 Shopify 商家搜索): # 获取 auth token(60 分钟 TTL) TOKEN=$(curl -s -X POST https://api.shopify.com/auth/access_token \ -H 'Content-Type: application/json' \ -d '{"client_id":"'$CLIENT_ID'","client_secret":"'$CLIENT_SECRET'","grant_type":"client_credentials"}' \ | jq -r .access_token) # 搜索 curl -s -X POST https://catalog.shopify.com/api/ucp/mcp \ -H "Authorization: Bearer $TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "jsonrpc":"2.0","method":"tools/call","id":1, "params":{"name":"search_catalog","arguments":{ "meta":{"ucp-agent":{"profile":"https://shopify.dev/ucp/agent-profiles/examples/2026-04-08/valid-with-capabilities.json"}}, "catalog":{"query":"YOUR SEARCH QUERY","filters":{"ships_to":{"country":"US"},"available":true}} }} }' 响应包括 variants[].id、variants[].seller.domain、variants[].price 和 variants[].checkout_url。
选项 B — 直接商店查找(已知商店): GET https://{store-domain}/products/{handle}.json 返回变体 ID 和价格。
步骤 2:创建 Link 支付请求 link-cli spend-request create \ --payment-method-id "" \ --amount \ --context "" \ --merchant-name "" \ --merchant-url "" \ --request-approval \ --format json 金额应涵盖产品、税费和运费(估算为慷慨)。 上下文必须是 100+ 个字符,描述购买内容(用户在授权时阅读)。 将返回的 approval_url 发送给用户。 列出支付方式:link-cli payment-methods list --format json
步骤 3:用户授权 轮询授权:link-cli spend-request retrieve --interval 2 --max-attempts 150 --format json
步骤 4:获取一次性卡 link-cli spend-request retrieve --include card --format json 返回:card.number、card.exp_month、card.exp_year、card.cvc、card.billing_address。
步骤 5:运行结账 export LD_LIBRARY_PATH="" # 如果需要 node scripts/shopify-checkout.mjs \ --email --first --last \ --address "" --apt "" --city "" --state --zip \ --phone 请参阅 scripts/shopify-checkout.mjs 以获取完整的自动化脚本。
关键技术细节 购物车永久链接 始终使用 https://{domain}/cart/{variantId}:1 进入结账。 这绕过了 Cloudflare 的机器人检测,防止直接导航到 /checkout。
结账类型 Shopify 有两种结账布局: 单页:电子邮件、地址、运费和支付全部可见。 常见于新商店。 多步骤:信息 → 运费 → 支付。 必须在步骤之间单击“继续”。 通过检查页面加载时的按钮:has-text(“继续到运费”)来检测。
地址输入 使用 pressSequentially(),包括城市,触发 Shopify 的自动完成,然后单击 [role="option"] 建议。 这正确地验证了地址。 纯粹的 fill() 可能不会触发验证事件。
电话号码 有些商店需要电话号码。 始终使用 pressSequentially(),永远不要使用 fill()。 永远不要使用假电话号码(555-xxxx)- 商店会验证它们。 然后 Tab 模糊字段。
卡片 PCI 框架 Shopify 结账使用隔离的 PCI 合规框架进行卡片输入: number-ltr → #number(卡号) expiry-ltr → #expiry(MM/YY 格式) verification_value-ltr → #verification_value(CVC) name-ltr → #name(卡持有者名称) 通过 page.frames().find(f => f.url().includes('number-ltr')) 访问。
模态弹出窗口 有些商店在结账加载时显示 Shop Pay/登录模态弹出窗口。 使用以下代码消除: await page.keyboard.press('Escape'); await page.evaluate(() => { document.querySelectorAll('[data-type="modal"]').forEach(el => el.remove()); });
点击即为购买 一旦单击“立即支付”,订单就会在服务器端立即下单。 在无头模式下,浏览器可能会延迟或失败地重定向到 /thank_you。 不要将缺少确认页面视为失败 - 而是检查电子邮件。
错误处理 错误原因 修复方法 Cloudflare “请稍等...” 机器人检测 使用购物车永久链接,而不是 /checkout “请输入电话号码” 必填字段或假电话号码 使用真实电话号码和 pressSequentially “我遇到问题...” 请参阅错误日志以获取更多信息。