Composio Shopify Toolkit 实战指南:OAuth2/S2S 认证、完整工具发现与订单 GraphQL 操作
【免费下载链接】composioComposio powers 1000+ toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio
本篇指南以 Composio 开源仓库中 Shopify 工具包的公开支持文档(docs/kb/source/toolkits/shopify/public.md)为核心,系统讲解在 Composio 中接入 Shopify 的正确姿势:如何避开已废弃的 Admin API Key 认证、正确配置 OAuth2/S2S、处理回调与常见 400/403 错误、抓取完整工具集,以及基于SHOPIFY_GRAPH_QL_QUERY与订单类工具完成真实业务操作。读完本文,你将能够独立完成 Shopify 工具包的认证配置、工具发现与订单/GraphQL 调用链路的搭建与排障。
认证配置:放弃 Admin API Key,改用 OAuth2 或 S2S
Shopify 已经废弃了旧的"管理员自建应用"(admin-created custom app)复制粘贴 Access Token 的认证路径。新建的 Dev Dashboard 应用只会暴露Client ID与Client Secret,访问令牌需要通过 Shopify 的 client-credentials 流程以编程方式换取。
因此,在 Composio 中不要引导新用户使用 API-key / Admin API Access Token 认证,而应按下述原则选择:
- 面向终端用户(user-facing)的集成:使用OAuth2,走标准授权码流程,让店主在自己的 Shopify 店铺中完成授权;
- 服务端到服务端(server-to-server)场景:当应用形态与 Shopify 的 client-credentials 用例匹配时,使用S2S auth。
可参考 Shopify 官方文档的 client credentials grant 与 admin-created custom app tokens 两篇说明理解两种模式的区别。
自查信号:如果某个认证页面仍然要求填写 Admin API Key,请检查对应的 authConfig 是否误用了已废弃的 API-key 模式,应切换到 OAuth2/S2S 配置。在 Composio 中,authConfig 是认证配置的核心载体,仓库的 Python SDK 在 python/composio/core/models/auth_configs.py 中定义了其数据模型,示例用法可参考 python/examples/auth_configs.py。
回调地址:以 Composio 当前展示的 toolkit auth callback 为准
配置 Shopify OAuth 应用时,redirect URL 必须设置为 Composio 当前 custom-auth-config 流程中展示的确切回调地址。不要依赖本文章或旧资料里硬编码的 URL,也不要凭记忆手写 v1/v3 时代的旧回调路径——过时或拼写错误的回调路径会导致 OAuth 重定向失败(redirect failure)。
正确做法是:在 Composio 创建自定义认证配置时,从界面流程中直接复制当前的回调值,粘贴到 Shopify 应用后台的 redirect URL 配置中。仓库侧对应实现在 python/examples/auth_configs.py 中有所演示,AuthConfig 模型的字段定义见 python/composio/core/models/auth_configs.py。
自定义凭据不影响托管认证体验,Composio 仍负责令牌刷新
使用自定义 Shopify OAuth 凭据(即你自己的 Client ID / Client Secret)不会改变终端用户的托管认证体验:
- 用户仍然走相同的 Composio connect 流程完成授权与重定向;
- 授权完成后,Composio 自动负责令牌刷新与凭据管理,开发者无需自行处理 refresh token 的过期与续期;
- 托管凭据(managed credentials)相关的掩码(masking)改动,对自定义凭据(custom-credential)的 toolkit 影响方式不同,不应按同一逻辑处理。
也就是说,自建凭据只影响"应用是谁"(你的 Shopify 应用),不影响"授权怎么走"(Composio 的托管 connect 流程)。
OAuth 400 排障:先查 Client Secret 与 Gated Scopes
如果 Shopify OAuth 在**令牌交换(token exchange)或连接发起(connection initiation)**阶段返回 400,最常见的原因有两类:
- 凭据错误,尤其是 Client Secret 填错:请仔细核对 authConfig 中的 client secret(注意前后空格、大小写、复制时的隐藏字符),重新填写后发起一次全新连接;
- gated scopes 未经验证/批准:Shopify 部分权限范围需要应用通过审核后才可用。请确认请求的 scopes 在 Shopify 应用后台已申请并获批,且确实归属于当前应用。
此外,仓库 FAQ 还提示另一种现象:当默认 Shopify OAuth 应用处于审核中或已过期时,连接会报 "App not found",此时应换用你自己的 OAuth 应用或 API 认证方式,见 docs/content/toolkits/faq/shopify.md。
subdomain 只填店铺名,不要带.myshopify.com
当 Composio 询问 Shopify subdomain 时,只需填写店铺名:
your-store-name不要传完整主机名,例如:
your-store-name.myshopify.com # 错误Composio 会基于 subdomain 自行拼接出完整的 Shopify 域名,多传后缀会导致域名拼接错误、连接失败。
工具发现:抓取超过默认 20 个 Shopify 工具
Composio 的工具抓取(tool fetching)默认可能只返回有限数量的工具(默认约 20 个),而 Shopify 工具包的工具远不止这些。抓取完整工具集时,需要显式传入更高的limit:
from composio import Composio composio = Composio() tools = composio.tools.get( user_id="<userId>", toolkits=["shopify"], limit=1000, # 显式提高上限,抓取完整 Shopify 工具集 )这一调用模式与仓库示例 python/examples/tools.py 中composio.tools.get(user_id="default", toolkits=["GITHUB"])的用法一致,toolkits参数按工具包名过滤,limit控制返回数量。
MCP 场景补充:如果通过 MCP 使用,除了抓取数量,还要确认目标 Shopify 工具在创建 MCP 配置时已被启用;若配置已存在,则需要修改现有配置来启用该工具。MCP 相关的认证与配置模型可参考 python/composio/core/models/mcp.py 与 python/examples/mcp_example.py。
GraphQL 查询:使用SHOPIFY_GRAPH_QL_QUERY工具
对 Shopify 发起 GraphQL 查询时,应使用更新后的工具 slugSHOPIFY_GRAPH_QL_QUERY。
如果该工具在工具发现(tool discovery)中不可见,按以下顺序排查:
- 确认抓取的工具数量足够多(参考上节
limit=1000); - 确认该工具在所使用的 MCP 配置或相关配置中已被启用;
- 重新抓取后再次搜索该 slug。
订单操作:先SHOPIFY_GET_ORDERS_WITH_FILTERS,再取 ID 跟进
对订单执行读取/更新前,先调用SHOPIFY_GET_ORDERS_WITH_FILTERS:
- 通过该工具确认店铺中确实存在订单;
- 从响应 payload 中提取订单 ID;
- 当可能存在多页匹配时,跟进响应中的
page_info游标继续翻页; - 将拿到的订单 ID 传入后续动作,例如
SHOPIFY_GET_ORDER或SHOPIFY_UPDATE_ORDER。
注意:旧的
SHOPIFY_GET_ORDER_LIST动作已被废弃,不要再使用。
403 排障:如果订单更新/读取返回 403,通常是连接缺少read_all_ordersscope。检查 Shopify 连接上的 scopes,若缺少该权限,请以包含所需订单权限的 scope 重新连接后再重试——默认订单 scope 集合无法覆盖超出其范围的读取/更新操作。该场景在 docs/content/toolkits/faq/shopify.md 中同样有记录。
自定义 Shopify 工具:在工具内部调用 GraphQL,认证由 Composio 注入
在 Shopify toolkit 下创建自定义工具/动作(custom tool/action),即可在工具内部直接调用 Shopify 的 GraphQL 端点,Composio 会通过自定义工具执行路径自动注入 Shopify 认证,无需手动携带令牌。
关键实现要点:
- 端点地址:新示例可直接使用相对端点
/graphql.json;旧代码片段使用的是完整地址https://<shopify-sub-domain>.myshopify.com/admin/api/<version>/graphql.json; - 请求头:必须携带 JSON content type 头(
Content-Type: application/json); - 请求体:在 body 中传入 GraphQL 查询。
自定义工具的模型与执行路径可参考 python/composio/core/models/custom_tool.py 以及 python/examples/custom_tools_agent_test.py。
仓库中的延伸参考
- 渲染后的知识库指南:docs/content/kb/guide/toolkits-shopify.mdx(与本文同源,适合作为文档页展示);
- 知识库文章版本:docs/kb/articles/toolkits-shopify.md;
- 公开支持问答:docs/content/toolkits/faq/shopify.md;
- SDK 工具抓取与执行示例:python/examples/tools.py;
- 认证配置示例:python/examples/auth_configs.py;
- 变更日志佐证:Shopify 属于强类型响应升级的 57 个 toolkit 之一(docs/content/changelog/12-10-25.mdx),其多类型联合字段(union type)也已按标准
anyOf保留(docs/content/changelog/01-07-26.mdx),调用时注意按工具包最新版本抓取 schema。
小结:接入 Composio Shopify 工具包时,认证层优先选择 OAuth2/S2S 并严格使用 Composio 当前回调地址;工具层通过提高limit与启用 MCP 配置获取完整工具集;业务层以SHOPIFY_GET_ORDERS_WITH_FILTERS起步、以SHOPIFY_GRAPH_QL_QUERY承接 GraphQL 查询,并结合read_all_orders等 scope 排查 403——遵循这套流程即可稳定落地 Shopify 相关的 AI Agent 集成。
【免费下载链接】composioComposio powers 1000+ toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考