如何使用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
相关产品推荐
相关产品推荐

