Flutter支付处理插件flutter_braintree_betc的使用
Flutter支付处理插件flutter_braintree_betc的使用
安装
首先,将 flutter_braintree
添加到您的 pubspec.yaml
文件中:
dependencies:
...
flutter_braintree: <版本号>
Android 使用示例
-
迁移至 AndroidX: 在
/app/build.gradle
中设置minSdkVersion
至至少21
。 -
启用 Card.io(可选): 在
app
水平的build.gradle
文件中添加以下行以启用 Card.io 功能:dependencies { ... implementation 'io.card:android-sdk:5.+' }
-
支持 PayPal、Venmo 和 3D Secure: 在
AndroidManifest.xml
中添加以下 intent filter 以允许浏览器切换:<activity android:name="com.braintreepayments.api.DropInActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="${applicationId}.braintree" /> </intent-filter>
</activity> <activity android:name=“com.braintreepayments.api.ThreeDSecureActivity” android:theme="@style/Theme.AppCompat.Light" android:exported=“true”> </activity>
**重要提示**:您的应用 URL scheme 必须以您的包 ID 开头并以 `.braintree` 结尾。例如,如果包 ID 是 `com.your-company.your-app`,则 URL scheme 应为 `com.your-company.your-app.braintree`。`${applicationId}` 自动应用于 Gradle 中的包 ID。
**注意**:您定义的 scheme 必须全部使用小写字母。如果您的包包含下划线,请在指定方案时移除下划线。
#### iOS 使用示例
1. **添加或取消 Podfile 中的平台声明**:
在 `ios/Podfile` 的顶部添加或取消以下行:
```ruby
platform :ios, '12.0'
警告:设备数据收集尚未支持 iOS。
-
设置 URL Scheme: 在 App Delegate 或 Runner 项目中,需要指定用于重定向支付的 URL Scheme:
BTAppContextSwitcher.setReturnURLScheme("com.your-company.your-app.payments")
同时,在
Info.plist
中也需要指定相同的 URL Scheme:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLName</key> <string>com.your-company.your-app.payments</string> <key>CFBundleURLSchemes</key> <array> <string>com.your-company.your-app.payments</string> </array> </dict> </array>
参见官方文档 Braintree 文档 以获取更详细的说明。
使用示例
-
创建 Braintree 账户: 首先创建一个 Braintree 账户,并在控制面板中创建一个密钥化键。确保后端服务器已配置好。请参阅 Braintree 开发者文档以了解所有关键概念。
-
导入插件: 在代码中导入插件:
import 'package:flutter_braintree/flutter_braintree.dart';
-
创建用户界面: 您可以使用 Flutter 创建自己的用户界面,也可以使用 Braintree 的的内置 UI。
Flutter UI 示例
信用卡
-
创建一个信用卡请求对象:
final request = BraintreeCreditCardRequest( cardNumber: '4111111111111111', expirationMonth: '12', expirationYear: '2021', cvv: '367', );
-
请求 Braintree 进行密钥化:
BraintreePaymentMethodNonce result = await Braintree.tokenizeCreditCard( '<Insert your tokenization key or client token here>', request, ); print(result.nonce);
PayPal
-
创建一个 PayPal 请求对象:
final request = BraintreePayPalRequest(amount: '13.37');
-
或者,对于 Vault 流程:
final request = BraintreePayPalRequest( billingAgreementDescription: 'I hereby agree that flutter_braintree is great.', );
-
启动 PayPal 请求:
BraintreePaymentMethodNonce result = await Braintree.requestPaypalNonce( '<Insert your tokenization key or client token here>', request, ); if (result != null) { print('Nonce: ${result.nonce}'); } else { print('PayPal flow was canceled.'); }
Braintree 的的原生 Drop-in 示例
-
创建一个 drop-in 请求对象:
final request = BraintreeDropInRequest( clientToken: '<Insert your client token here>', collectDeviceData: true, googlePaymentRequest: BraintreeGooglePaymentRequest( totalPrice: '4.20', currencyCode: 'USD', billingAddressRequired: false, ), paypalRequest: BraintreePayPalRequest( amount: '4.20', displayName: 'Example company', ), );
-
启动 drop-in:
BraintreeDropInResult result = await BraintreeDropIn.start(request);
-
获取支付密钥化结果:
if (result != null) { print('Nonce: ${result.paymentMethodNonce.nonce}'); } else { print('Selection was canceled.'); }
为了增加成功完成 3DS2 挑战的机会,可以在参考 [M]迁移至 3D Secure 2]中的指南来提供关于用户的额外信息。
var request = BraintreeDropInRequest(
clientToken: '<Insert your client token here>',
collectDeviceData: true,
requestThreeDSecureVerification: true,
email: "test@email.com",
amount: "0,01",
billingAddress: BraintreeBillingAddress(
givenName: "Jill",
surname: "Doe",
phoneNumber: "5551234567",
streetAddress: "555 Smith St",
extendedAddress: "#2",
locality: "Chicago",
region: "IL",
postalCode: "12345",
countryCodeAlpha2: "US",
),
cardEnabled: true,
);
更多文档,请参阅 BraintreeDropInRequest
和 BraintreeDropInResult
。
示例代码
更多关于Flutter支付处理插件flutter_braintree_betc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付处理插件flutter_braintree_betc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_braintree_betc
插件来处理支付的示例代码。请注意,实际使用中你需要根据具体需求进行适当调整和配置,并确保遵循Braintree的支付安全最佳实践。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_braintree_betc
依赖:
dependencies:
flutter:
sdk: flutter
flutter_braintree_betc: ^最新版本号 # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,按照以下步骤在你的Flutter应用中集成Braintree支付处理。
1. 配置Braintree
在开始之前,你需要在Braintree仪表盘上创建一个账户并获取客户端令牌(Client Token)。这个令牌将用于初始化Braintree SDK。
2. 初始化Braintree客户端
在你的Flutter应用中,首先初始化Braintree客户端。通常,这会在应用的启动过程中完成。
import 'package:flutter/material.dart';
import 'package:flutter_braintree_betc/flutter_braintree_betc.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: BraintreePaymentScreen(),
);
}
}
class BraintreePaymentScreen extends StatefulWidget {
@override
_BraintreePaymentScreenState createState() => _BraintreePaymentScreenState();
}
class _BraintreePaymentScreenState extends State<BraintreePaymentScreen> {
BraintreeClient? _braintreeClient;
@override
void initState() {
super.initState();
// 替换为你的Client Token
String clientToken = "your_client_token_here";
_initializeBraintree(clientToken);
}
Future<void> _initializeBraintree(String clientToken) async {
try {
_braintreeClient = await BraintreeClient.create(clientToken: clientToken);
} catch (e) {
print("Failed to initialize Braintree: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Braintree Payment'),
),
body: Center(
child: _braintreeClient != null
? ElevatedButton(
onPressed: () {
// 打开支付界面,例如显示Drop-in UI
_showDropInUI();
},
child: Text('Pay Now'),
)
: CircularProgressIndicator(),
),
);
}
Future<void> _showDropInUI() async {
try {
final result = await _braintreeClient!.showDropInUI();
if (result != null && result.isSuccessful) {
// 支付成功,处理支付结果
print("Payment successful: ${result.nonce}");
} else {
// 支付失败或取消
print("Payment failed or canceled");
}
} catch (e) {
print("Error showing Drop-in UI: $e");
}
}
}
3. 处理支付结果
在上面的代码中,当用户点击“Pay Now”按钮时,会显示Braintree的Drop-in UI,用户可以在其中输入支付信息。支付完成后,结果会通过回调返回。你可以根据返回的nonce
值在服务器端完成支付流程。
注意事项
- 安全性:不要在客户端代码中处理或存储敏感支付信息。所有敏感操作都应在服务器端完成。
- 错误处理:添加适当的错误处理逻辑,以处理初始化失败、支付失败等情况。
- UI定制:Braintree的Drop-in UI可以根据需要进行定制,具体请参考Braintree的官方文档。
- 服务器端集成:在服务器端使用返回的
nonce
值完成支付交易。这通常涉及向Braintree服务器发送请求,并传递nonce
、金额和其他交易信息。
请确保你遵循Braintree的最佳实践和API文档,以安全有效地集成支付功能。