Flutter支付结算插件checkout_api的使用
Flutter支付结算插件checkout_api的使用
开始使用
请确保您已经仔细阅读了Checkout.com API参考文档,并且创建了一个账户(每月收入需要30,000美元)。您可以轻松地创建一个沙盒账户进行测试。
使用方法
该包实现了以下端点:
- 客户
- 支付
- 令牌
- 仪器
// 初始化Checkout
final checkout = Checkout(secretKey: 'secretKey', publicKey: 'publicKey');
// 创建客户
Customer customer = Customer(
id: "",
email: "$randomNumber@gmail.com",
instruments: [],
name: "Saleh",
);
final customerId = await checkout.createCustomer(customer);
customer = customer.copyWith(id: customerId);
// 获取客户详情
customer = await checkout.getCustomerDetails(customer.email);
// 既可以使用email也可以使用id
// 为用户创建卡片模型
// 1. 创建信用卡模型
final CreditCard card = CreditCard(
number: "4242424242424242",
cvv: "100",
expiryMonth: 6,
expiryYear: 2025,
last4: "4242",
scheme: "visa",
);
String token = "";
final TokenRequest tokenRequest =
TokenRequest(type: PaymentMethod.Card, card: card);
final TokenResponse tokenResponse =
await checkout.requestToken(tokenRequest);
token = tokenResponse.token;
// 3. 将卡片添加到用户
final InstrumentRequest instrumentRequest = InstrumentRequest(
type: PaymentSourceType.Token,
token: token,
customer: customer,
);
Instrument instrument = await checkout.createInstrument(
instrumentRequest: instrumentRequest);
// 获取卡片详情
Instrument instrument =
await checkout.getInstrumentDetails(instrument.instrumentId);
// 使用token进行支付
final PaymentRequest paymentRequest = PaymentRequest(
type: PaymentSourceType.Token,
amount: 20,
currency: "SAR",
customer: customer,
description: "参与者付款",
reference: "",
);
final PaymentResponse paymentResponse =
await checkout.requestTokenPayment(
paymentRequest: paymentRequest,
// 用于生成token
card: card,
method: PaymentMethod.Card,
);
// 使用instrument id进行支付
final paymentRequest = PaymentRequest(
type: PaymentSourceType.Id,
amount: 200,
reference: "1q23",
description: "一笔付款",
customer: customer,
cardId: instrumentId,
currency: "SAR");
final PaymentResponse response = await checkout
.requestIdPayment(paymentRequest: paymentRequest);
其他信息
并非所有操作都已实现,例如退款。您可以查看Checkout类的实现来了解哪些功能已被覆盖。
示例代码
import 'package:checkout_api/lib.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
enum Environment { dev, prod }
Future<void> mainCommon(Environment env) async {
WidgetsFlutterBinding.ensureInitialized();
runApp(
ProviderScope(overrides: [
if (env == Environment.dev)
checkoutPvdr.overrideWithValue(
Checkout(
secretKey: 'sanbox-key',
publicKey: 'sandbox-key',
testing: true,
),
)
], child: const Home()),
);
}
// 创建客户提供器
// 如果客户未注册,通知器将使用电子邮件创建新客户
// 以便稍后通过此标识符获取客户
final customerAsyncPvdr = StateNotifierProvider<CustomerNotifier, AsyncValue<Customer>>(
(ref) => CustomerNotifier(
checkout: ref.watch(checkoutPvdr),
customerId: "e.g. firebase_auth.email",
name: "",
),
);
class Home extends ConsumerWidget {
const Home({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context, ScopedReader watch) {
final checkout = watch(checkoutPvdr);
final customer = watch(customerAsyncPvdr).value!;
final customerNotifier = watch(customerAsyncPvdr.notifier);
return Column(
children: [
for (final i in customer.instruments) ...[
CreditCardWidget(instrument: i),
ElevatedButton(
onPressed: () => customerNotifier.setInstrumentToDefault(i),
child: const Text("设为默认")),
ElevatedButton(
onPressed: () => customerNotifier.updateInstrument(
instrument: i,
instrumentRequest: InstrumentRequest(
customer: customer,
expiryMonth: 7,
expiryYear: 2027,
),
),
child: const Text("更新卡片")),
ElevatedButton(
onPressed: () => customerNotifier.deleteInstrument(i.id),
child: const Text("删除卡片")),
],
ElevatedButton(
onPressed: () {
customerNotifier.addInstrument(
creditCard: CreditCard(
number: "4242424242424242",
expiryMonth: 4,
expiryYear: 2027,
cvv: "100"),
);
},
child: const Text("添加卡片")),
ElevatedButton(
onPressed: () => checkout.requestIdPayment(
paymentRequest: PaymentRequest(
type: PaymentSourceType.Id,
amount: 200,
reference: "1q23",
description: "一笔付款",
customer: customer,
cardId: customer.defaultInstrument?.id,
currency: "SAR")),
child: Text("使用${customer.defaultInstrument?.last4}支付200")),
],
);
}
}
class CreditCardWidget extends StatelessWidget {
final Instrument instrument;
const CreditCardWidget({
Key? key,
required this.instrument,
}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
children: [
Text(instrument.last4),
const SizedBox(
height: 8,
),
Text(instrument.isDefault.toString())
],
);
}
}
更多关于Flutter支付结算插件checkout_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付结算插件checkout_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
checkout_api
是一个用于处理支付结算的 Flutter 插件,通常用于集成支付网关、处理交易、管理订单等操作。以下是使用 checkout_api
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 checkout_api
插件的依赖:
dependencies:
flutter:
sdk: flutter
checkout_api: ^1.0.0 # 请根据实际版本号进行替换
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Dart 代码中,首先需要导入 checkout_api
插件并初始化它:
import 'package:checkout_api/checkout_api.dart';
void main() {
// 初始化插件
CheckoutApi.initialize(apiKey: 'your_api_key_here');
runApp(MyApp());
}
3. 创建支付订单
使用 checkout_api
创建一个支付订单。通常需要提供订单的详细信息,如金额、货币、商品信息等。
void createOrder() async {
try {
final order = await CheckoutApi.createOrder(
amount: 1000, // 金额,单位通常为分
currency: 'USD', // 货币类型
description: 'Purchase of Product X', // 订单描述
);
print('Order created: ${order.id}');
} catch (e) {
print('Failed to create order: $e');
}
}
4. 处理支付
在订单创建成功后,你可以使用 checkout_api
来处理支付。通常需要调用支付网关的 API 来完成支付流程。
void processPayment(String orderId) async {
try {
final paymentResult = await CheckoutApi.processPayment(
orderId: orderId,
paymentMethod: 'credit_card', // 支付方式
cardDetails: CardDetails(
number: '4242424242424242', // 卡号
expMonth: 12, // 过期月份
expYear: 2025, // 过期年份
cvc: '123', // CVC 码
),
);
if (paymentResult.success) {
print('Payment successful!');
} else {
print('Payment failed: ${paymentResult.message}');
}
} catch (e) {
print('Failed to process payment: $e');
}
}
5. 处理支付结果
支付完成后,你可以根据支付结果来更新订单状态或通知用户。
void handlePaymentResult(PaymentResult result) {
if (result.success) {
// 支付成功,更新订单状态
updateOrderStatus(result.orderId, 'paid');
} else {
// 支付失败,提示用户
showPaymentError(result.message);
}
}
6. 更新订单状态
支付成功后,你可能需要更新订单状态以反映支付结果。
void updateOrderStatus(String orderId, String status) async {
try {
await CheckoutApi.updateOrderStatus(
orderId: orderId,
status: status,
);
print('Order status updated to $status');
} catch (e) {
print('Failed to update order status: $e');
}
}
7. 错误处理
在使用 checkout_api
时,务必处理可能出现的错误,如网络问题、支付失败等。
try {
// 调用 checkout_api 的方法
} catch (e) {
print('An error occurred: $e');
}