Flutter支付处理插件flutter_braintree_betc的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter支付处理插件flutter_braintree_betc的使用

安装

首先,将 flutter_braintree 添加到您的 pubspec.yaml 文件中:

dependencies:
  ...
  flutter_braintree: <版本号>

Android 使用示例

  1. 迁移至 AndroidX: 在 /app/build.gradle 中设置 minSdkVersion 至至少 21

  2. 启用 Card.io(可选): 在 app 水平的 build.gradle 文件中添加以下行以启用 Card.io 功能:

    dependencies {
        ...
        implementation 'io.card:android-sdk:5.+'
    }
    
  3. 支持 PayPal、Venmo 和 3D Secure: 在 AndroidManifest.xml 中添加以下 intent filter 以允许浏览器切换:

    &lt;activity android:name="com.braintreepayments.api.DropInActivity"
              android:launchMode="singleTask"&gt;
      &lt;intent-filter&gt;
          &lt;action android:name="android.intent.action.VIEW" /&gt;
          &lt;category android:name="android.intent.category.DEFAULT" /&gt;
          &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
          &lt;data android:scheme="${applicationId}.braintree" /&gt;
      &lt;/intent-filter&gt;
    

</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。

  1. 设置 URL Scheme: 在 App Delegate 或 Runner 项目中,需要指定用于重定向支付的 URL Scheme:

    BTAppContextSwitcher.setReturnURLScheme("com.your-company.your-app.payments")
    

    同时,在 Info.plist 中也需要指定相同的 URL Scheme:

    &lt;key&gt;CFBundleURLTypes&lt;/key&gt;
    &lt;array&gt;
        &lt;dict&gt;
            &lt;key&gt;CFBundleTypeRole&lt;/key&gt;
            &lt;string&gt;Editor&lt;/string&gt;
            &lt;key&gt;CFBundleURLName&lt;/key&gt;
            &lt;string&gt;com.your-company.your-app.payments&lt;/string&gt;
            &lt;key&gt;CFBundleURLSchemes&lt;/key&gt;
            &lt;array&gt;
                &lt;string&gt;com.your-company.your-app.payments&lt;/string&gt;
            &lt;/array&gt;
        &lt;/dict&gt;
    &lt;/array&gt;
    

    参见官方文档 Braintree 文档 以获取更详细的说明。

使用示例

  1. 创建 Braintree 账户: 首先创建一个 Braintree 账户,并在控制面板中创建一个密钥化键。确保后端服务器已配置好。请参阅 Braintree 开发者文档以了解所有关键概念。

  2. 导入插件: 在代码中导入插件:

    import 'package:flutter_braintree/flutter_braintree.dart';
    
  3. 创建用户界面: 您可以使用 Flutter 创建自己的用户界面,也可以使用 Braintree 的的内置 UI。

Flutter UI 示例

信用卡
  1. 创建一个信用卡请求对象:

    final request = BraintreeCreditCardRequest(
      cardNumber: '4111111111111111',
      expirationMonth: '12',
      expirationYear: '2021',
      cvv: '367',
    );
    
  2. 请求 Braintree 进行密钥化:

    BraintreePaymentMethodNonce result = await Braintree.tokenizeCreditCard(
      '&lt;Insert your tokenization key or client token here&gt;',
      request,
    );
    print(result.nonce);
    
PayPal
  1. 创建一个 PayPal 请求对象:

    final request = BraintreePayPalRequest(amount: '13.37');
    
  2. 或者,对于 Vault 流程:

    final request = BraintreePayPalRequest(
      billingAgreementDescription: 'I hereby agree that flutter_braintree is great.',
    );
    
  3. 启动 PayPal 请求:

    BraintreePaymentMethodNonce result = await Braintree.requestPaypalNonce(
      '&lt;Insert your tokenization key or client token here&gt;',
      request,
    );
    if (result != null) {
      print('Nonce: ${result.nonce}');
    } else {
      print('PayPal flow was canceled.');
    }
    

Braintree 的的原生 Drop-in 示例

  1. 创建一个 drop-in 请求对象:

    final request = BraintreeDropInRequest(
      clientToken: '&lt;Insert your client token here&gt;',
      collectDeviceData: true,
      googlePaymentRequest: BraintreeGooglePaymentRequest(
        totalPrice: '4.20',
        currencyCode: 'USD',
        billingAddressRequired: false,
      ),
      paypalRequest: BraintreePayPalRequest(
        amount: '4.20',
        displayName: 'Example company',
      ),
    );
    
  2. 启动 drop-in:

    BraintreeDropInResult result = await BraintreeDropIn.start(request);
    
  3. 获取支付密钥化结果:

    if (result != null) {
      print('Nonce: ${result.paymentMethodNonce.nonce}');
    } else {
      print('Selection was canceled.');
    }
    

为了增加成功完成 3DS2 挑战的机会,可以在参考 [M]迁移至 3D Secure 2]中的指南来提供关于用户的额外信息。

var request = BraintreeDropInRequest(
  clientToken: '&lt;Insert your client token here&gt;',
  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,
);

更多文档,请参阅 BraintreeDropInRequestBraintreeDropInResult

示例代码


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

1 回复

更多关于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值在服务器端完成支付流程。

注意事项

  1. 安全性:不要在客户端代码中处理或存储敏感支付信息。所有敏感操作都应在服务器端完成。
  2. 错误处理:添加适当的错误处理逻辑,以处理初始化失败、支付失败等情况。
  3. UI定制:Braintree的Drop-in UI可以根据需要进行定制,具体请参考Braintree的官方文档。
  4. 服务器端集成:在服务器端使用返回的nonce值完成支付交易。这通常涉及向Braintree服务器发送请求,并传递nonce、金额和其他交易信息。

请确保你遵循Braintree的最佳实践和API文档,以安全有效地集成支付功能。

回到顶部