e66f79fdf6
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
39 lines
1.3 KiB
Dart
39 lines
1.3 KiB
Dart
// payment_api.dart — /v1/pay 代理端点封装(JWT 经 ApiClient 自动注入)。
|
|
import '../models/payment.dart';
|
|
import 'api_client.dart';
|
|
|
|
class PaymentApi {
|
|
PaymentApi(this._c);
|
|
final ApiClient _c;
|
|
|
|
Future<List<PayCatalogItem>> catalog() async {
|
|
final body = await _c.getJson('/v1/pay/catalog');
|
|
final items = (body['items'] as List<dynamic>?) ?? const [];
|
|
return [for (final it in items) PayCatalogItem.fromJson(it as Map<String, dynamic>)];
|
|
}
|
|
|
|
Future<PayOrder> createOrder({
|
|
required String sku,
|
|
required String method,
|
|
Map<String, String>? metadata,
|
|
}) async =>
|
|
PayOrder.fromJson(await _c.postJson('/v1/pay/orders', {
|
|
'sku': sku,
|
|
'method': method,
|
|
if (metadata != null && metadata.isNotEmpty) 'metadata': metadata,
|
|
}));
|
|
|
|
Future<PayOrderStatus> orderStatus(String orderNo) async =>
|
|
PayOrderStatus.fromJson(await _c.getJson('/v1/pay/orders/$orderNo'));
|
|
|
|
Future<PayOrder> retry(String orderNo, {required String method, Map<String, String>? metadata}) async =>
|
|
PayOrder.fromJson(await _c.postJson('/v1/pay/orders/$orderNo/retry', {
|
|
'method': method,
|
|
if (metadata != null && metadata.isNotEmpty) 'metadata': metadata,
|
|
}));
|
|
|
|
Future<void> cancel(String orderNo) async {
|
|
await _c.postJson('/v1/pay/orders/$orderNo/cancel');
|
|
}
|
|
}
|