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

如何使用Flutter接入WooCommerce API?

用http包对接WooCommerce API的Flutter实现步骤

1. 获取WooCommerce API凭证

先在你的WooCommerce后台生成API密钥:

  • 登录商店后台,进入「设置」→「高级」→「REST API」
  • 点击「添加密钥」,填写描述、选择权限(只读/读写)后生成
  • 保存好生成的Consumer Key、Consumer Secret,以及你的商店Base URL(比如https://yourstore.com)

2. 添加http包依赖

在项目的pubspec.yaml文件中添加http包依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.5 # 可替换为最新版本

执行命令完成安装:

flutter pub get

3. 处理Basic认证

WooCommerce REST API采用Basic Auth认证,需要把Consumer Key:Consumer Secret编码为Base64格式,用dart自带的编码工具实现:

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

String generateAuthHeader(String consumerKey, String consumerSecret) {
  String credentials = '$consumerKey:$consumerSecret';
  String encoded = base64Encode(utf8.encode(credentials));
  return 'Basic $encoded';
}

4. 封装通用请求方法

为避免重复代码,封装通用API请求方法,统一处理请求头和基础URL:

class WooCommerceApi {
  final String baseUrl;
  final String authHeader;

  WooCommerceApi({required this.baseUrl, required this.authHeader});

  Future<http.Response> getRequest(String endpoint) async {
    final url = Uri.parse('$baseUrl/wp-json/wc/v3/$endpoint');
    return await http.get(
      url,
      headers: {
        'Authorization': authHeader,
        'Content-Type': 'application/json',
      },
    );
  }

  Future<http.Response> postRequest(String endpoint, Map<String, dynamic> data) async {
    final url = Uri.parse('$baseUrl/wp-json/wc/v3/$endpoint');
    return await http.post(
      url,
      headers: {
        'Authorization': authHeader,
        'Content-Type': 'application/json',
      },
      body: jsonEncode(data),
    );
  }

  // 可同理封装put、delete等请求方法
}

5. 具体API调用示例

获取产品列表

void fetchProducts() async {
  final consumerKey = '你的Consumer Key';
  final consumerSecret = '你的Consumer Secret';
  final baseUrl = 'https://yourstore.com';

  final authHeader = generateAuthHeader(consumerKey, consumerSecret);
  final api = WooCommerceApi(baseUrl: baseUrl, authHeader: authHeader);

  final response = await api.getRequest('products?per_page=10');

  if (response.statusCode == 200) {
    List<dynamic> products = jsonDecode(response.body);
    print('获取到${products.length}个产品');
    // 这里可以处理产品数据,比如转成实体类
  } else {
    print('请求失败:${response.statusCode}');
    print(response.body);
  }
}

创建新订单

void createOrder() async {
  final consumerKey = '你的Consumer Key';
  final consumerSecret = '你的Consumer Secret';
  final baseUrl = 'https://yourstore.com';

  final authHeader = generateAuthHeader(consumerKey, consumerSecret);
  final api = WooCommerceApi(baseUrl: baseUrl, authHeader: authHeader);

  Map<String, dynamic> orderData = {
    'status': 'processing',
    'customer_id': 1,
    'line_items': [
      {
        'product_id': 23,
        'quantity': 1,
      }
    ],
    'billing': {
      'first_name': 'John',
      'last_name': 'Doe',
      'address_1': '123 Main St',
      'city': 'Anytown',
      'postcode': '12345',
      'country': 'US',
      'email': 'john.doe@example.com',
      'phone': '555-1234'
    }
  };

  final response = await api.postRequest('orders', orderData);

  if (response.statusCode == 201) {
    Map<String, dynamic> order = jsonDecode(response.body);
    print('订单创建成功,ID:${order['id']}');
  } else {
    print('创建订单失败:${response.statusCode}');
    print(response.body);
  }
}

6. 错误处理与注意事项

  • 务必检查响应状态码:2xx表示成功,4xx多为客户端错误(如凭证无效、权限不足),5xx为服务器错误
  • 用try-catch包裹请求代码,捕获SocketException等网络异常
  • 注意WooCommerce的API速率限制,避免短时间内发送大量请求
  • 敏感信息不要硬编码:可以用环境变量或安全存储(如flutter_secure_storage)保存Consumer Key和Secret

内容的提问来源于stack exchange,提问作者Jean Luc Gouirand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:25:15