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

如何使用Flutter调用WooCommerce API?

如何用Flutter正确调用带OAuth1认证的WooCommerce API

你之前调用WordPress的公开REST API没问题,但WooCommerce的API是需要OAuth1认证的,直接访问肯定会返回空响应或者权限错误——这就是问题所在!

下面给你两种可行的解决方案,从省心到灵活任你选:


方案一:用专门的WooCommerce Flutter包(最省心)

直接用社区维护的woocommerce包,它已经帮你封装好了所有OAuth1认证逻辑,不用自己写签名。

步骤1:添加依赖

在pubspec.yaml里加入:

dependencies:
  flutter:
    sdk: flutter
  woocommerce: ^0.3.0 # 建议使用最新版本

步骤2:修改你的代码

import 'package:woocommerce/woocommerce.dart';
import 'dart:convert';

// 替换成你自己的Consumer Key和Secret
final WooCommerce wooCommerce = WooCommerce(
  url: 'http://jalania.com',
  consumerKey: 'YOUR_CONSUMER_KEY',
  consumerSecret: 'YOUR_CONSUMER_SECRET',
);

Future<void> fetchProducts() async {
  try {
    // 直接调用封装好的方法获取产品列表
    List<WooProduct> products = await wooCommerce.getProducts();
    
    setState(() {
      // 把WooProduct对象转成JSON格式,适配你之前的data变量处理逻辑
      data = products.map((product) => product.toJson()).toList();
    });
  } catch (e) {
    print('获取产品失败: $e');
    // 这里可以添加错误提示的UI逻辑
  }
}

方案二:手动实现OAuth1签名(更灵活)

如果不想用第三方包,或者需要自定义请求逻辑,可以用oauth1包手动处理签名:

步骤1:添加依赖

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.5
  oauth1: ^2.0.0

步骤2:编写认证请求代码

import 'package:http/http.dart' as http;
import 'package:oauth1/oauth1.dart' as oauth1;
import 'dart:convert';

// 替换为你的密钥和站点地址
final String consumerKey = 'YOUR_CONSUMER_KEY';
final String consumerSecret = 'YOUR_CONSUMER_SECRET';
final String baseUrl = 'http://jalania.com';

// 配置OAuth1平台参数(WooCommerce的OAuth1不需要单独的请求/访问Token端点,直接签名即可)
final platform = oauth1.Platform(
  '${baseUrl}/wp-json/wc/v2/',
  '', // 留空即可
  '', // 留空即可
  oauth1.SignatureMethods.hmacSha1,
);

final clientCredentials = oauth1.ClientCredentials(consumerKey, consumerSecret);
final authClient = oauth1.Authorization(clientCredentials, platform);

Future<void> fetchProducts() async {
  try {
    // 创建GET请求
    final request = http.Request('GET', Uri.parse('${baseUrl}/wp-json/wc/v2/products'));
    
    // 给请求添加OAuth1签名
    await authClient.signRequest(request);
    
    // 发送请求并处理响应
    final response = await http.Client().send(request);
    final responseBody = await response.stream.bytesToString();
    
    setState(() {
      data = jsonDecode(responseBody);
    });
  } catch (e) {
    print('请求出错: $e');
  }
}

重要注意事项

  • 权限检查:确保你在WooCommerce后台创建的Consumer Key拥有「读产品」的权限(创建密钥时可以选择权限范围)
  • API版本:WooCommerce现在推荐用v3版本的API,把URL改成/wp-json/wc/v3/products兼容性更好
  • HTTPS问题:如果你的站点是HTTPS,要确保证书有效;本地测试如果遇到SSL错误,可以暂时添加http.Client的信任配置,但生产环境必须用合法证书

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:57:14