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
更多关于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.xml和Info.plist文件中已经配置了必要的URL Scheme,以便应用能够正确处理重定向。 - 在生产环境中,不要将API密钥硬编码在客户端代码中。考虑使用安全存储解决方案,如环境变量或密钥管理服务。
- 处理支付状态时,你可能需要实现服务器端逻辑来验证支付状态,因为客户端验证可能不够安全。
这个示例展示了如何在Flutter应用中使用coinbase_commerce插件来创建支付请求并打开Coinbase Commerce的支付页面。实际应用中,你可能需要添加更多的错误处理和用户交互逻辑。

