# react-native-braintree-dropin-turbo Modern Braintree Drop-In UI for React Native with Turbo Modules support. ## Features - ✅ Turbo Modules support (React Native 0.68+) - ✅ Latest Braintree SDK versions - ✅ iOS (Swift) and Android (Kotlin) - ✅ Apple Pay support (iOS) - ✅ Google Pay support (Android) - ✅ Venmo support - ✅ PayPal support - ✅ 3D Secure support - ✅ Card tokenization - ✅ Device data collection ## Installation ```bash npm install react-native-braintree-dropin-turbo # or yarn add react-native-braintree-dropin-turbo ``` ### iOS Setup 1. Install pods: ```bash cd ios && pod install ``` 2. Add to your `Info.plist` for Apple Pay: ```xml com.apple.developer.in-app-payments merchant.your.merchant.identifier ``` ### Android Setup 1. Initialize DropIn client in your `MainActivity.kt`: ```kotlin import com.braintreedroptinturbo.RNBraintreeDropInModule class MainActivity : ReactActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) RNBraintreeDropInModule.initDropInClient(this) } } ``` 2. Make sure your MainActivity extends `FragmentActivity`: ```kotlin import androidx.fragment.app.FragmentActivity class MainActivity : FragmentActivity() { // ... } ``` ## Usage ### Basic Usage ```typescript import BraintreeDropIn from 'react-native-braintree-dropin-turbo'; try { const result = await BraintreeDropIn.show({ clientToken: 'YOUR_CLIENT_TOKEN', orderTotal: 10.0, currencyCode: 'USD', }); console.log('Payment nonce:', result.nonce); console.log('Device data:', result.deviceData); // Send result.nonce to your server } catch (error) { if (error.message === 'USER_CANCELLATION') { console.log('User cancelled payment'); } else { console.error('Payment error:', error); } } ``` ### With Apple Pay (iOS) ```typescript const result = await BraintreeDropIn.show({ clientToken: 'YOUR_CLIENT_TOKEN', applePay: true, merchantIdentifier: 'merchant.your.identifier', countryCode: 'US', currencyCode: 'USD', merchantName: 'Your Store', orderTotal: 10.0, }); ``` ### With Google Pay (Android) ```typescript const result = await BraintreeDropIn.show({ clientToken: 'YOUR_CLIENT_TOKEN', googlePay: true, googlePayMerchantId: 'YOUR_MERCHANT_ID', orderTotal: 10.0, currencyCode: 'USD', }); ``` ### With 3D Secure ```typescript const result = await BraintreeDropIn.show({ clientToken: 'YOUR_CLIENT_TOKEN', threeDSecure: { amount: 10.0, }, }); ``` ### Tokenize Card Directly ```typescript const result = await BraintreeDropIn.tokenizeCard('YOUR_CLIENT_TOKEN', { number: '4111111111111111', expirationMonth: '12', expirationYear: '2025', cvv: '123', postalCode: '12345', }); ``` ### Collect Device Data ```typescript const deviceData = await BraintreeDropIn.collectDeviceData('YOUR_CLIENT_TOKEN'); // Send to your server for fraud detection ``` ### Fetch Most Recent Payment Method ```typescript const paymentMethod = await BraintreeDropIn.fetchMostRecentPaymentMethod('YOUR_CLIENT_TOKEN'); if (paymentMethod) { console.log('Last payment:', paymentMethod.description); } ``` ## API Reference ### `show(options: DropInOptions): Promise` Display the Braintree Drop-In UI. #### Options | Option | Type | Required | Description | | --------------------- | ------- | -------- | ---------------------------------------------------- | | `clientToken` | string | ✅ | Braintree client token | | `orderTotal` | number | ❌ | Total amount for the transaction | | `currencyCode` | string | ❌ | Currency code (default: 'USD') | | `darkTheme` | boolean | ❌ | Use dark theme (iOS only) | | `fontFamily` | string | ❌ | Custom font family (iOS only) | | `boldFontFamily` | string | ❌ | Custom bold font family (iOS only) | | `vaultManager` | boolean | ❌ | Enable vault manager | | `cardDisabled` | boolean | ❌ | Disable card payments | | `applePay` | boolean | ❌ | Enable Apple Pay (iOS only) | | `merchantIdentifier` | string | ❌ | Apple Pay merchant ID (required if applePay is true) | | `countryCode` | string | ❌ | Country code for Apple Pay | | `merchantName` | string | ❌ | Merchant name for Apple Pay | | `venmo` | boolean | ❌ | Enable Venmo | | `payPal` | boolean | ❌ | Enable PayPal | | `googlePay` | boolean | ❌ | Enable Google Pay (Android only) | | `googlePayMerchantId` | string | ❌ | Google Pay merchant ID | | `threeDSecure` | object | ❌ | 3D Secure configuration | | `threeDSecure.amount` | number | ❌ | Amount for 3D Secure verification | #### Returns ```typescript interface PaymentResult { nonce: string; // Payment method nonce type: string; // Payment method type description: string; // Payment method description isDefault: boolean; // Is default payment method deviceData: string; // Device data for fraud detection } ``` ### `tokenizeCard(clientToken: string, cardInfo: CardInfo): Promise` Tokenize a card without showing the UI. ```typescript interface CardInfo { number?: string; expirationMonth?: string; expirationYear?: string; cvv: string; postalCode?: string; onlyCVV?: boolean; // If true, only CVV is required } ``` ### `collectDeviceData(clientToken: string): Promise` Collect device data for fraud detection. ### `fetchMostRecentPaymentMethod(clientToken: string): Promise` Fetch the most recently used payment method. ## Error Handling ```typescript try { const result = await BraintreeDropIn.show(options); } catch (error) { switch (error.message) { case 'USER_CANCELLATION': // User cancelled the payment flow break; case 'NO_CLIENT_TOKEN': // Client token was not provided break; case '3DSECURE_NOT_ABLE_TO_SHIFT_LIABILITY': // 3D Secure verification failed break; default: // Other errors console.error(error); } } ``` ## Braintree SDK Versions - **iOS**: Braintree ~> 6.0, BraintreeDropIn ~> 9.0 - **Android**: Drop-In 6.16.0, Card 4.45.0, Data Collector 4.45.0 ## Requirements - React Native >= 0.68 - iOS >= 13.0 - Android minSdkVersion >= 21 ## New Architecture (Turbo Modules) This library supports the New Architecture out of the box. No additional configuration needed. ## License MIT ## Support For issues and feature requests, please visit the [GitHub repository](https://github.com/aveekshan/react-native-braintree-dropin-turbo).