You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify自定义App获取购物车数据报错unable to access myshopify.com求助

解决方案

问题分析

你遇到的unable to access myshopify.com错误核心原因有两个:

  1. 端点与认证逻辑不匹配:/cart.json是Shopify商店前端的用户会话关联端点,需要携带当前用户的会话Cookie才能返回对应购物车数据,而你用自定义应用的API密钥直接请求,既缺少正确的Admin API认证,也没有必要的会话标识。
  2. 依赖库过时:request库已停止维护,存在兼容性和安全隐患,容易引发请求异常。

修复步骤

1. 选择正确的API端点

如果要通过服务器端获取店铺的购物车相关数据,应使用Shopify Admin API的Checkouts端点(Shopify中购物车最终会转化为未完成的结账会话),而非前端的/cart.json。Admin API需通过API密钥+密码做基础认证。

2. 替换为现代请求库

用维护活跃的axios替代request,先安装依赖:

npm install axios

3. 修正代码实现

以下是可直接运行的修正代码:

const axios = require('axios');
const express = require('express');
const cors = require('cors');

const app = express();
app.use(cors());

// 自定义应用的API密钥和密码
const apiKey = '0520e894b0d93f2af3be7a07f3ef8yec';
const apiPassword = 'shpat_d59f83a39d031d34ecbea8dqqq6f12ac';
const storeDomain = 'store.myshopify.com';
// 使用Shopify最新稳定API版本
const apiVersion = '2024-07';

// Admin API获取所有未完成结账(对应购物车数据)的端点
const apiEndpoint = `https://${apiKey}:${apiPassword}@${storeDomain}/admin/api/${apiVersion}/checkouts.json?status=open`;

app.get("/", async (req, res) => {
    try {
        const response = await axios.get(apiEndpoint);
        res.send(response.data);
        console.log(response.data);
    } catch (error) {
        console.error('请求失败:', error.response?.data || error.message);
        res.status(error.response?.status || 500).send(error.response?.data || '请求出错');
    }
});

app.listen(3900, () => {
    console.log('服务器运行在localhost:3900');
});

4. 确认应用权限

确保你的自定义应用已在Shopify后台申请read_checkouts权限,否则会返回权限不足的错误。

特殊场景:获取前端用户的购物车

若你需要获取当前访问浏览器用户的购物车,不能通过服务器端直接请求/cart.json,需通过代理转发前端的会话Cookie:

// 代理前端请求,转发会话Cookie
app.get("/cart", async (req, res) => {
    try {
        const response = await axios.get(`https://${storeDomain}/cart.json`, {
            headers: {
                Cookie: req.headers.cookie // 转发前端的会话标识
            }
        });
        res.send(response.data);
    } catch (error) {
        res.status(error.response?.status || 500).send(error.message);
    }
});

这种方式需确保前端页面与服务器同域,或Shopify已配置允许跨域携带Cookie。

内容的提问来源于stack exchange,提问作者mohit vamja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:33:29