Flutter加密货币支付插件coinbase_commerce的使用

Flutter加密货币支付插件coinbase_commerce的使用

A dart库用于与Coinbase Commerce API进行交互。 该库使得项目可以无缝连接到Coinbase并接收付款!

更多详情请访问 Coinbase API文档

要开始使用库,你需要在Coinbase Commerce上注册并从用户设置中获取你的API密钥。

接下来创建一个Coinbase对象以与API进行交互: 该对象包含指向API资源Checkout、Charge和Invoice的dart类表示。

每个请求返回一个CoinbaseResponseObject。 每个CoinbaseResponseObject将API响应Jsons转换为模型。

特性

  • 创建Charge
  • 取消Charge
  • 查看Charge
  • 列出所有Charge
  • 查看Charge的状态
  • 创建Invoice
  • 查看Invoice
  • 列出所有Invoice
  • 创建Checkout
  • 删除Checkout
  • 查看Checkout
  • 列出所有Checkout

使用方法

要创建一个新的coinbase_commerce对象实例,必须提供你从Coinbase Commerce设置页面生成的API密钥。

Coinbase coinbase = Coinbase('YOUR API KEY HERE', debug: true);

Charges

创建一个新的Charge

ChargeObject charge = await coinbase.createCharge(
  name: 'Coffee Charge',
  description: '3 cups of Coffee',
  currency: CurrencyType.usd,
  pricingType: PricingType.fixedPrice,
  amount: 40,
);

查看Charge的状态

ChargeObject charge = await coinbase.viewCharge('YOUR CHARGE ID HERE');

Charge的状态可以是(NEW, PENDING, COMPLETED, EXPIRED, UNRESOLVED, RESOLVED, CANCELED, REFUND PENDING, REFUNDED, NONE)。

如果返回的状态为NONE,则表示未找到记录。

查看特定Charge的信息

ChargeObject charge = await coinbase.viewCharge('YOUR CHARGE ID HERE');

取消一个Charge

ChargeObject charge = await coinbase.cancelCharge('YOUR CHARGE ID HERE');

列出与账户关联的所有Charge

List<ChargeObject> charges = await coinbase.retrieveAllCharges;

Checkouts

创建一个新的Checkout

CheckoutObject checkout = await coinbase.createCheckout(
  description: 'description',
  name: 'name',
  pricingType: PricingType.noPrice,
  currency: CurrencyType.usd,
);

查看特定Checkout的信息

CheckoutObject checkout = await coinbase.viewCheckout('YOUR CHECKOUT ID HERE');

更新一个已创建的Checkout

CheckoutObject checkout = await coinbase.updateCheckout(
  checkoutID: 'c4357d83-42d4-4d7b-bc44-d0262b1efd25',
  name: 'New Name here',
);

删除一个Checkout

CheckoutObject checkout = await coinbase.deleteCheckout('YOUR CHECKOUT ID HERE');

列出所有与账户关联的Checkout

List<CheckoutObject> checkouts = await coinbase.retrieveAllCheckouts;

Invoices

创建一个新的Invoice

InvoiceObject invoice = await coinbase.createInvoice(
  businessName: 'businessName',
  customerEmail: 'onuohasilver9@gmail.com',
  customerName: 'Onuoha Silver',
  currency: CurrencyType.usd,
  amount: 20,
);

查看一个Invoice

InvoiceObject invoice = await coinbase.viewInvoice('2a4aeb3e-a12b-4728-9c88-297dea5d2adb');

列出所有Invoices

List<InvoiceObject> invoices = await coinbase.retrieveAllInvoices;

完整示例Demo

import 'package:coinbase_commerce/coinbase_commerce.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ExampleScreen(),
    );
  }
}

class ExampleScreen extends StatefulWidget {
  [@override](/user/override)
  _ExampleScreenState createState() => _ExampleScreenState();
}

String apiKey = ''; // 请替换为你的API密钥
Coinbase coinbase = Coinbase(apiKey, debug: true);
String output = 'Output';

class _ExampleScreenState extends State<ExampleScreen> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return Material(
      child: Container(
        height: size.height,
        width: size.width,
        color: Colors.white,
        child: Column(
          children: [
            SizedBox(height: 50),
            Text(
              'Coinbase Example App',
              style: TextStyle(fontSize: 30),
            ),
            Wrap(
              children: [
                TextButton(
                  onPressed: () async {
                    ChargeObject charge = await coinbase.createCharge(
                      name: 'Record Me',
                      description: 'description',
                      currency: CurrencyType.usd,
                      pricingType: PricingType.fixedPrice,
                      amount: 40,
                    );

                    setState(() {
                      output = charge.toString();
                    });
                  },
                  child: Text('Create a Charge'),
                ),
                TextButton(
                  onPressed: () async {
                    ChargeObject charge = await coinbase.cancelCharge('MJ7ED8BQ');

                    setState(() {
                      output = charge.toString();
                    });
                  },
                  child: Text('Cancel a Charge'),
                ),
                TextButton(
                  onPressed: () async {
                    ChargeObject charge = await coinbase.viewCharge('RLWADR5Z');

                    setState(() {
                      output = charge.toString();
                    });
                  },
                  child: Text('View a Charge'),
                ),
                TextButton(
                  onPressed: () async {
                    CheckoutObject checkout = await coinbase.createCheckout(
                      description: 'description',
                      name: 'name',
                      pricingType: PricingType.noPrice,
                      currency: CurrencyType.usd,
                    );

                    setState(() {
                      output = checkout.toString();
                    });
                  },
                  child: Text('Create a Checkout'),
                ),
                TextButton(
                  onPressed: () async {
                    CheckoutObject checkout = await coinbase.updateCheckout(
                      checkoutID: 'c4357d83-42d4-4d7b-bc44-d0262b1efd25',
                      name: 'New Name here',
                      description: 'description',
                      pricingType: PricingType.noPrice,
                      currency: CurrencyType.usd,
                    );

                    setState(() {
                      output = checkout.toString();
                    });
                  },
                  child: Text('Update a Checkout'),
                ),
                TextButton(
                  onPressed: () async {
                    CheckoutObject checkout = await coinbase.viewCheckout(
                      'c4357d83-42d4-4d7b-bc44-d0262b1efd25',
                    );

                    setState(() {
                      output = checkout.toString();
                    });
                  },
                  child: Text('View Checkout'),
                ),
                TextButton(
                  onPressed: () async {
                    CheckoutObject checkout = await coinbase.deleteCheckout(
                      'c4357d83-42d4-4d7b-bc44-d0262b1efd25',
                    );

                    setState(() {
                      output = checkout.toString();
                    });
                  },
                  child: Text('Delete Checkout'),
                ),
                TextButton(
                  onPressed: () async {
                    InvoiceObject invoice = await coinbase.createInvoice(
                      businessName: 'businessName',
                      customerEmail: 'onuohasilver9@gmail.com',
                      customerName: 'Onuoha Silver',
                      currency: CurrencyType.usd,
                      amount: 20,
                    );

                    setState(() {
                      output = invoice.toString();
                    });
                  },
                  child: Text('Create an Invoice'),
                ),
                TextButton(
                  onPressed: () async {
                    InvoiceObject invoice = await coinbase.viewInvoice(
                      '2a4aeb3e-a12b-4728-9c88-297dea5d2adb',
                    );

                    setState(() {
                      output = invoice.toString();
                    });
                  },
                  child: Text('View an Invoice'),
                ),
                TextButton(
                  onPressed: () async {
                    List<ChargeObject> charges = await coinbase.retrieveAllCharges;

                    setState(() {
                      output = charges.length.toString();
                    });
                  },
                  child: Text('List all Charges'),
                ),
                TextButton(
                  onPressed: () async {
                    List<CheckoutObject> checkouts = await coinbase.retrieveAllCheckouts;

                    setState(() {
                      output = checkouts.length.toString();
                    });
                  },
                  child: Text('List all Checkouts'),
                ),
                TextButton(
                  onPressed: () async {
                    List<InvoiceObject> invoices = await coinbase.retrieveAllInvoices;

                    setState(() {
                      output = invoices.length.toString();
                    });
                  },
                  child: Text('List all Invoices'),
                ),
              ],
            ),
            Text(
              output,
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter加密货币支付插件coinbase_commerce的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密货币支付插件coinbase_commerce的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter应用中使用coinbase_commerce插件来实现加密货币支付的示例代码。这个示例假定你已经创建了一个Coinbase Commerce账户,并且已经设置好了API密钥和支付按钮。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加coinbase_commerce依赖:

dependencies:
  flutter:
    sdk: flutter
  coinbase_commerce: ^最新版本号  # 请替换为最新的版本号

然后运行flutter pub get来安装依赖。

2. 配置Coinbase Commerce

在你的Flutter项目的根目录下创建一个名为secrets.dart的文件(确保这个文件不会被版本控制跟踪,比如添加到.gitignore中),用来存储你的Coinbase Commerce API密钥:

// secrets.dart
const String coinbaseCommerceApiKey = '你的API密钥';

3. 创建支付配置

在你的应用的主文件(比如main.dart)中,设置Coinbase Commerce客户端并创建一个支付按钮:

import 'package:flutter/material.dart';
import 'package:coinbase_commerce/coinbase_commerce.dart';
import 'secrets.dart'; // 导入API密钥

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Coinbase Commerce Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late CoinbaseCommerceClient client;
  late Charge charge;

  @override
  void initState() {
    super.initState();
    client = CoinbaseCommerceClient(apiKey: coinbaseCommerceApiKey);

    // 创建支付请求
    createCharge();
  }

  Future<void> createCharge() async {
    try {
      // 定义支付信息
      final CreateChargeRequest request = CreateChargeRequest(
        name: 'Demo Purchase',
        description: 'This is a demo purchase.',
        pricingType: 'fixed_price',
        localPrice: LocalPrice(
          amount: '10.00',
          currency: 'USD',
        ),
        metadata: {'order_id': '12345'},
        redirectUrl: Uri.parse('https://your-redirect-url.com'), // 替换为你的重定向URL
      );

      // 发送请求并获取charge对象
      charge = await client.createCharge(request);
      print('Charge created: ${charge.toJson()}');
    } catch (e) {
      print('Error creating charge: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Coinbase Commerce Demo'),
      ),
      body: Center(
        child: charge.id != null
            ? ElevatedButton(
                onPressed: () async {
                  // 打开Coinbase Commerce支付页面
                  final Uri paymentUri = Uri.parse(charge.hostedUrl!);
                  if (await canLaunchUrl(paymentUri)) {
                    await launchUrl(paymentUri);
                  } else {
                    throw 'Could not launch ${paymentUri.toString()}';
                  }
                },
                child: Text('Pay with Crypto'),
              )
            : CircularProgressIndicator(), // 加载指示器,直到charge创建完成
      ),
    );
  }
}

4. 注意事项

  • 确保你的AndroidManifest.xmlInfo.plist文件中已经配置了必要的URL Scheme,以便应用能够正确处理重定向。
  • 在生产环境中,不要将API密钥硬编码在客户端代码中。考虑使用安全存储解决方案,如环境变量或密钥管理服务。
  • 处理支付状态时,你可能需要实现服务器端逻辑来验证支付状态,因为客户端验证可能不够安全。

这个示例展示了如何在Flutter应用中使用coinbase_commerce插件来创建支付请求并打开Coinbase Commerce的支付页面。实际应用中,你可能需要添加更多的错误处理和用户交互逻辑。

回到顶部