Flutter请求Shopify数据的正确HTTP URL写法及支付集成问题
问题1:Flutter中拉取Shopify商店数据的正确HTTP请求写法
报错原因说明
你得到{errors: Not Found}的核心原因是Uri.https构造方法的第一个参数仅支持传入纯域名,不能将API密钥、密码拼接在域名前缀中,这部分认证信息需要单独配置。
正确代码示例
import 'dart:convert'; import 'package:http/http.dart' as http; getShopifyData() async { const String hostname = "verdenapp310.myshopify.com"; const String apiKey = "c948656b86f9a9e0bf8beffad653e484"; const String apiPassword = "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"; // 建议替换为当前Shopify仍在维护的API版本,2021-07版本已停止服务支持 const String apiVersion = "2024-01"; const String resourcePath = "/admin/api/$apiVersion/graphql.json"; // 正确构造Uri final Uri requestUri = Uri( scheme: "https", host: hostname, path: resourcePath, userInfo: "$apiKey:$apiPassword", ); // 推荐将认证信息放在请求头中,兼容性更强 final http.Response response = await http.get( requestUri, headers: { "Content-Type": "application/json", // 不需要配置userInfo时可直接用请求头传认证 // "Authorization": "Basic ${base64Encode(utf8.encode('$apiKey:$apiPassword'))}", }, ); if (response.statusCode == 200) { final Map<String, dynamic> resData = jsonDecode(response.body); print(resData); } else { print("请求失败,状态码:${response.statusCode},返回:${response.body}"); } }
额外注意事项
- 调用Admin API前需要在Shopify后台给对应应用开启你要访问资源的读权限,否则会返回权限错误
- 高权限的Admin API密钥禁止硬编码在客户端代码中,建议所有Admin API请求走自己的服务端中转,避免密钥泄露导致店铺数据被篡改
- 如果是面向普通买家的客户端,优先使用Shopify Storefront API调用,权限更低更安全
问题2:Flutter对接Shopify支付功能实现思路
- 方案1:封装官方Shopify Buy SDK
官方提供了Android、iOS端原生Buy SDK,已经封装了订单创建、支付、状态同步的全流程逻辑,你可以通过Flutter的Platform Channel封装原生层SDK能力,暴露给Flutter层调用,不需要自行处理签名、合规等底层逻辑 - 方案2:基于WebView实现支付
先调用Shopify接口创建待支付订单草稿,获取官方的支付页面链接,用Flutter WebView组件加载该链接,用户在页面内完成支付后,监听WebView的支付成功回调跳转地址,即可判断支付状态,再同步订单信息到你的业务后台 - 方案3:对接第三方支付服务商
如果你的Shopify店铺已经接入了第三方支付服务,可以直接对接该支付服务商的Flutter SDK,支付完成后调用Shopify接口同步订单状态即可
内容的提问来源于stack exchange,提问作者navidanchitrali
相关产品推荐
相关产品推荐

