Flutter支付集成插件mercadopago_by_binnicordova的使用
Flutter支付集成插件mercadopago_by_binnicordova的使用
I’m Binni Cordova, a Great Programmer
MERCADOPAGO by BinniCordova
我目前在我的电子商务和市场应用程序中使用这个插件来处理信用卡支付。
Contributions
请叫我开发您的项目,并为支持和更新报告发送一些资金。
Issues
请在本仓库中提交任何问题、错误或功能请求。
Features
- [*] 创建客户
- [*] 搜索客户
- 删除客户
- [*] 列出卡片
- [*] 对卡片进行标记化
- [*] 保存卡片
- [*] 删除卡片
- [*] 支付订单
- [*] 支付计划
- [*] 列出计划
- [*] 订阅计划
Getting started
简单易用!
Usage
Pay Order
我写了一个不错的单元测试来模拟订单支付,您可以在 test/checkout_test.dart
中阅读它。
CheckoutProvider paidMarketProvider = CheckoutProvider(
authorization: auth,
);
UserModel user = const UserModel(
firstName: 'Raul',
lastName: 'Romero Diaz',
document: '34127856',
email: 'bin@gmail.com',
idCountriesCodes: 'PE',
phoneCode: "+51",
phoneNumber: '987654321',
idCountriesDocumentsTypes: 'DNI',
);
String orderUID = 'order-321';
double orderAmount = 100.00;
// 搜索客户
CustomerModel? customerModel =
await paidMarketProvider.customerSearch(userModel: user);
expect(customerModel?.id, isNot(equals(null)));
// 卡片
Card card = Card(
id: null, // 如果定义了此字段,则表示已保存的卡
save: false,
installments: 1,
customerId: customerModel!.id,
cardNumber: '5031755734530604',
cardholder: Cardholder(
name: '${user.firstName} ${user.lastName}',
identification: Identification(
number: user.document,
type: user.idCountriesDocumentsTypes,
),
),
expirationYear: 2025,
expirationMonth: 11,
cvv: '123',
);
Map? response = await paidMarketProvider.customerCardTokenCreate(
dataCard: card,
email: user.email,
);
Card tokenizedCard = response!['data'] as Card;
expect(tokenizedCard.id, isNot(equals(null)));
// 支付订单
final PaymentResponseModel? paymentResponseModel =
await paidMarketProvider.payOrder(
dataCard: tokenizedCard,
userModel: user,
orderNumber: orderUID,
amount: orderAmount,
);
if (paymentResponseModel?.statusDetail ==
PaidMarketStatusTypeEnum.Accredited.value) {
expect(paymentResponseModel?.statusDetail,
equals(PaidMarketStatusTypeEnum.Accredited.value));
} else if (paymentResponseModel?.statusDetail ==
PaidMarketStatusTypeEnum.PendingContingency.value ||
paymentResponseModel?.statusDetail ==
PaidMarketStatusTypeEnum.PendingReviewManual.value) {
expect(
paymentResponseModel?.statusDetail,
equals(PaidMarketStatusTypeEnum.PendingContingency.value),
);
} else {
expect(
paymentResponseModel?.statusDetail,
isNot(equals(PaidMarketStatusTypeEnum.Accredited.value)),
);
expect(
paymentResponseModel?.statusDetail,
isNot(equals(PaidMarketStatusTypeEnum.PendingContingency.value)),
);
expect(
paymentResponseModel?.statusDetail,
isNot(equals(PaidMarketStatusTypeEnum.PendingReviewManual.value)),
);
}
// 删除卡片(仅当必要时)
if (tokenizedCard.save == false) {
paidMarketProvider.customerCardDelete(dataCard: tokenizedCard);
}
Subscription
我写了一个不错的单元测试来模拟订阅,您可以在 test/subscription_test.dart
中阅读它。
SubscriptionProvider subscriptions =
SubscriptionProvider(authorization: auth);
CheckoutProvider paidMarketProvider = CheckoutProvider(
authorization: auth,
);
UserModel user = const UserModel(
firstName: 'Raul',
lastName: 'Romero Diaz',
document: '34127856',
email: 'bin@gmail.com',
idCountriesCodes: 'PE',
phoneCode: "+51",
phoneNumber: '987654321',
idCountriesDocumentsTypes: 'DNI',
);
// 搜索客户
CustomerModel? customerModel =
await paidMarketProvider.customerSearch(userModel: user);
expect(customerModel?.id, isNot(equals(null)));
// 卡片
Card card = Card(
id: null, // 如果定义了此字段,则表示已保存的卡
customerId: customerModel!.id,
cardNumber: '5031755734530604',
cardholder: Cardholder(
name: '${user.firstName} ${user.lastName}',
identification: Identification(
number: user.document,
type: user.idCountriesDocumentsTypes,
),
),
expirationYear: 2025,
expirationMonth: 11,
cvv: '123',
);
Map? response = await paidMarketProvider.customerCardTokenCreate(
dataCard: card,
email: user.email,
);
print(response);
Card tokenizedCard = response!['data'] as Card;
// 计划
String? planId =
await subscriptions.createPlan(reason: 'gold_suscription', amount: 100);
// 订阅
String? userSuscriptionId = await subscriptions.createSubscription(
reason: 'gold_suscription_service',
planId: planId!,
externalReference: 'uid',
userModel: user,
card: tokenizedCard,
);
expect(userSuscriptionId, isNot(equals(null)));
更多关于Flutter支付集成插件mercadopago_by_binnicordova的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件mercadopago_by_binnicordova的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
mercadopago_by_binnicordova
是一个用于在 Flutter 应用中集成 MercadoPago 支付的插件。以下是如何在 Flutter 项目中使用该插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 mercadopago_by_binnicordova
插件的依赖。
dependencies:
flutter:
sdk: flutter
mercadopago_by_binnicordova: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置 MercadoPago
在使用插件之前,你需要在 MercadoPago 开发者平台注册并获取你的 Public Key
和 Access Token
。
3. 初始化插件
在 Flutter 应用启动时,初始化 MercadoPago 插件。通常可以在 main.dart
文件中进行初始化。
import 'package:mercadopago_by_binnicordova/mercadopago_by_binnicordova.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 MercadoPago
await MercadoPago.init('YOUR_PUBLIC_KEY');
runApp(MyApp());
}
4. 创建支付
在需要支付的地方,调用支付方法。你可以通过以下步骤来创建一个支付请求。
import 'package:mercadopago_by_binnicordova/mercadopago_by_binnicordova.dart';
Future<void> createPayment() async {
try {
// 创建支付请求
final payment = await MercadoPago.createPayment(
accessToken: 'YOUR_ACCESS_TOKEN',
amount: 100.0, // 支付金额
description: 'Product purchase', // 支付描述
paymentMethodId: 'visa', // 支付方式ID
payerEmail: 'payer@example.com', // 支付者邮箱
);
// 处理支付结果
if (payment['status'] == 'approved') {
print('Payment successful!');
} else {
print('Payment failed: ${payment['status']}');
}
} catch (e) {
print('Error: $e');
}
}
5. 处理支付结果
支付完成后,你可以根据返回的支付状态来处理不同的逻辑。例如,如果支付成功,你可以显示一个成功的消息,如果支付失败,你可以提示用户重新尝试。
6. 处理回调
在某些情况下,你可能需要处理支付回调。你可以在 createPayment
方法中传递 callbackUrl
参数,以便在支付完成后接收回调通知。
final payment = await MercadoPago.createPayment(
accessToken: 'YOUR_ACCESS_TOKEN',
amount: 100.0,
description: 'Product purchase',
paymentMethodId: 'visa',
payerEmail: 'payer@example.com',
callbackUrl: 'https://yourdomain.com/callback', // 回调URL
);
7. 处理错误
在支付过程中可能会遇到各种错误,例如网络问题、支付方式不支持等。你需要捕获这些错误并适当地处理它们。
try {
final payment = await MercadoPago.createPayment(...);
} catch (e) {
print('Payment error: $e');
// 显示错误消息给用户
}