Flutter支付结算插件checkout_api的使用

Flutter支付结算插件checkout_api的使用

开始使用

请确保您已经仔细阅读了Checkout.com API参考文档,并且创建了一个账户(每月收入需要30,000美元)。您可以轻松地创建一个沙盒账户进行测试。

使用方法

该包实现了以下端点:

  1. 客户
  2. 支付
  3. 令牌
  4. 仪器
// 初始化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

1 回复

更多关于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');
}
回到顶部