nimbbl-mobile-react-native-sdk 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -167
- package/android/src/main/AndroidManifest.xml +0 -4
- package/android/src/main/java/com/nimbbl/reactnative/NimbblCheckoutActivity.kt +43 -52
- package/android/src/main/java/com/nimbbl/reactnative/NimbblReactNativeSDKModule.kt +250 -55
- package/ios/NimbblReactNativeSDK.swift +6 -33
- package/lib/NimbblSDK.d.ts +3 -31
- package/lib/NimbblSDK.js +23 -101
- package/lib/constants.d.ts +2 -13
- package/lib/constants.js +3 -16
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -3
- package/lib/types.d.ts +24 -10
- package/lib/types.js +1 -1
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
# Nimbbl React Native SDK
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**🎉 First Release - Production Ready!**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
A comprehensive React Native SDK for integrating Nimbbl payment gateway into your mobile applications. This SDK provides a seamless bridge between React Native and native payment functionality, offering a unified API for both iOS and Android platforms.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## ✨ Key Features
|
|
8
|
+
|
|
9
|
+
- 🚀 **Easy Integration** - Simple setup and initialization with production-ready defaults
|
|
8
10
|
- 💳 **Multiple Payment Methods** - Support for cards, UPI, netbanking, wallets, EMI, and cash
|
|
9
11
|
- 🌐 **WebView Integration** - Built-in payment webview with customization options
|
|
10
|
-
- 🔗 **Bridge
|
|
11
|
-
- 📱 **Cross Platform** -
|
|
12
|
-
- 🛡️ **Type Safety** - Comprehensive TypeScript definitions
|
|
13
|
-
- 📊 **
|
|
14
|
-
- 🔄 **Event Handling** -
|
|
12
|
+
- 🔗 **Robust Bridge** - Seamless communication between React Native and native SDKs
|
|
13
|
+
- 📱 **Cross Platform** - Identical behavior on both iOS and Android
|
|
14
|
+
- 🛡️ **Type Safety** - Comprehensive TypeScript definitions for better development experience
|
|
15
|
+
- 📊 **Production Ready** - Built-in analytics, logging, and error handling
|
|
16
|
+
- 🔄 **Unified Event Handling** - Single callback system for all payment responses
|
|
17
|
+
- 🎯 **Latest Native SDKs** - Built on iOS 2.0.4 and Android 4.0.3
|
|
15
18
|
|
|
16
|
-
##
|
|
19
|
+
## 🚀 Quick Start
|
|
17
20
|
|
|
18
|
-
###
|
|
21
|
+
### Installation
|
|
19
22
|
|
|
20
23
|
```bash
|
|
21
24
|
npm install nimbbl-mobile-react-native-sdk
|
|
@@ -23,35 +26,47 @@ npm install nimbbl-mobile-react-native-sdk
|
|
|
23
26
|
yarn add nimbbl-mobile-react-native-sdk
|
|
24
27
|
```
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
### Basic Integration
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
```typescript
|
|
32
|
+
import { NimbblSDK } from 'nimbbl-mobile-react-native-sdk';
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
- **[SETUP.md](SETUP.md)** - Comprehensive development setup
|
|
32
|
-
- **[Sample App](../nimbbl_react_native_sample_app/)** - Complete working example
|
|
34
|
+
const nimbblSDK = NimbblSDK.getSharedInstance();
|
|
33
35
|
|
|
36
|
+
// Initialize with default production configuration
|
|
37
|
+
await nimbblSDK.initialize();
|
|
38
|
+
|
|
39
|
+
// Set up payment response handler
|
|
40
|
+
nimbblSDK.addCheckoutResponseListener((data) => {
|
|
41
|
+
if (data.status === 'success') {
|
|
42
|
+
console.log('Payment successful:', data);
|
|
43
|
+
} else {
|
|
44
|
+
console.log('Payment failed:', data);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
34
47
|
|
|
48
|
+
// Start payment with all optional parameters
|
|
49
|
+
await nimbblSDK.checkout({
|
|
50
|
+
orderToken: 'YOUR_ORDER_TOKEN',
|
|
51
|
+
paymentModeCode: '<OPTIONAL>',
|
|
52
|
+
bankCode: '<OPTIONAL>',
|
|
53
|
+
walletCode: '<OPTIONAL>',
|
|
54
|
+
paymentFlow: '<OPTIONAL>'
|
|
55
|
+
});
|
|
56
|
+
```
|
|
35
57
|
|
|
36
|
-
|
|
58
|
+
**That's it! Your payment integration is complete.** 🎉
|
|
37
59
|
|
|
38
|
-
|
|
60
|
+
## 📚 Documentation
|
|
39
61
|
|
|
40
|
-
|
|
62
|
+
- **[Sample App](../nimbbl_react_native_sample_app/)** - Complete working example with React Navigation
|
|
63
|
+
- **[Simple Integration Guide](../nimbbl_react_native_sample_app/SIMPLE_INTEGRATION_EXAMPLE.md)** - Step-by-step merchant integration
|
|
64
|
+
- **[BUILD.md](BUILD.md)** - Development build guide
|
|
65
|
+
- **[SETUP.md](SETUP.md)** - Comprehensive development setup
|
|
41
66
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
| `^1.0.0-alpha.1` | ✅ Supported | Bug fixes and improvements |
|
|
46
|
-
| `^1.0.0-alpha.2` | ✅ Supported | Enhanced error handling |
|
|
47
|
-
| `^1.0.0-alpha.3` | ✅ Supported | Enhanced error handling |
|
|
48
|
-
| `^1.0.0-alpha.12` | ✅ Supported | Latest alpha release |
|
|
49
|
-
| `^1.0.0` | ✅ Supported | Initial stable release |
|
|
50
|
-
| `^1.0.1` | ✅ Supported | Bug fixes and improvements |
|
|
51
|
-
| `^1.1.0` | ✅ Supported | Production ready with environment URL initialization |
|
|
52
|
-
| `^1.1.1` | ✅ Supported | Bug fixes and improvements |
|
|
53
|
-
| `^1.2.0` | ✅ **Latest Stable** | **Updated to latest native SDK versions** |
|
|
54
|
-
| `^2.0.0` | 🔄 Coming Soon | Major version with breaking changes |
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
## 📋 System Requirements
|
|
55
70
|
|
|
56
71
|
### React Native Version Support
|
|
57
72
|
|
|
@@ -63,7 +78,7 @@ The Nimbbl React Native SDK is compatible with the following npm versions:
|
|
|
63
78
|
| `^0.73.0` | ✅ Supported | Latest stable version |
|
|
64
79
|
| `^0.74.0` | ✅ Supported | Latest stable version |
|
|
65
80
|
| `^0.75.0` | ✅ Supported | Latest stable version |
|
|
66
|
-
| `^0.76.0` | ✅
|
|
81
|
+
| `^0.76.0` | ✅ **Recommended** | **Latest stable version** |
|
|
67
82
|
|
|
68
83
|
### Node.js Version Support
|
|
69
84
|
|
|
@@ -81,61 +96,65 @@ The Nimbbl React Native SDK is compatible with the following npm versions:
|
|
|
81
96
|
| **Android** | ✅ Supported | API Level 21 (Android 5.0) |
|
|
82
97
|
| **iOS** | ✅ Supported | iOS 13.0+ |
|
|
83
98
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
- **Alpha Releases**: Alpha versions may contain breaking changes between releases
|
|
87
|
-
- **Stable Releases**: Breaking changes will be clearly documented in release notes
|
|
88
|
-
- **Migration Guide**: Migration guides will be provided for major version updates
|
|
89
|
-
|
|
90
|
-
### Versioning Strategy
|
|
99
|
+
## 🎯 Why Choose Nimbbl React Native SDK?
|
|
91
100
|
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
101
|
+
- ✅ **First Release**: Built from the ground up with modern React Native best practices
|
|
102
|
+
- ✅ **Production Ready**: Thoroughly tested and optimized for production environments
|
|
103
|
+
- ✅ **Cross-Platform Consistency**: Identical behavior on iOS and Android
|
|
104
|
+
- ✅ **Latest Native SDKs**: Built on the most recent iOS (2.0.4) and Android (4.0.3) SDKs
|
|
105
|
+
- ✅ **TypeScript First**: Full TypeScript support with comprehensive type definitions
|
|
106
|
+
- ✅ **Simple Integration**: Get started in minutes with our straightforward API
|
|
96
107
|
|
|
97
|
-
##
|
|
108
|
+
## 🚀 Getting Started
|
|
98
109
|
|
|
99
|
-
###
|
|
110
|
+
### 1. Install the SDK
|
|
100
111
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
**For npm package (production use):**
|
|
104
|
-
```javascript
|
|
105
|
-
import { NimbblSDK } from 'nimbbl-mobile-react-native-sdk';
|
|
112
|
+
```bash
|
|
113
|
+
npm install nimbbl-mobile-react-native-sdk
|
|
106
114
|
```
|
|
107
115
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
### 1. Initialize the SDK
|
|
116
|
+
### 2. Import and Initialize
|
|
111
117
|
|
|
112
118
|
```javascript
|
|
113
119
|
import { NimbblSDK } from 'nimbbl-mobile-react-native-sdk';
|
|
114
120
|
|
|
115
121
|
const nimbblSDK = NimbblSDK.getSharedInstance();
|
|
116
122
|
|
|
117
|
-
// Initialize
|
|
123
|
+
// Initialize with default production configuration
|
|
118
124
|
await nimbblSDK.initialize();
|
|
119
125
|
```
|
|
120
126
|
|
|
121
127
|
|
|
122
128
|
|
|
123
|
-
###
|
|
129
|
+
### 3. Set Up Payment Response Handler
|
|
124
130
|
|
|
125
131
|
```javascript
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
// Set up unified payment response handler
|
|
133
|
+
nimbblSDK.addCheckoutResponseListener((data) => {
|
|
134
|
+
if (data.status === 'success') {
|
|
135
|
+
console.log('Payment successful:', data);
|
|
136
|
+
// Handle successful payment
|
|
137
|
+
} else {
|
|
138
|
+
console.log('Payment failed:', data);
|
|
139
|
+
// Handle failed payment
|
|
140
|
+
}
|
|
133
141
|
});
|
|
134
142
|
```
|
|
135
143
|
|
|
136
|
-
###
|
|
144
|
+
### 4. Start Payment
|
|
137
145
|
|
|
138
|
-
|
|
146
|
+
```javascript
|
|
147
|
+
// Start payment with all optional parameters
|
|
148
|
+
await nimbblSDK.checkout({
|
|
149
|
+
orderToken: 'YOUR_ORDER_TOKEN',
|
|
150
|
+
paymentModeCode: '<OPTIONAL>',
|
|
151
|
+
bankCode: '<OPTIONAL>',
|
|
152
|
+
walletCode: '<OPTIONAL>',
|
|
153
|
+
paymentFlow: '<OPTIONAL>'
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**That's it! Your payment integration is complete.** 🎉
|
|
139
158
|
|
|
140
159
|
## API Reference
|
|
141
160
|
|
|
@@ -178,33 +197,16 @@ nimbblSDK.addCheckoutResponseListener((data) => {
|
|
|
178
197
|
// nimbblSDK.removeCheckoutResponseListener(callback);
|
|
179
198
|
```
|
|
180
199
|
|
|
181
|
-
## Configuration
|
|
182
|
-
|
|
183
|
-
### SDK Configuration
|
|
184
|
-
|
|
185
|
-
```javascript
|
|
186
|
-
const config = {
|
|
187
|
-
environment: 'production', // 'production' (default) or 'sandbox'
|
|
188
|
-
options: {
|
|
189
|
-
timeout: 30000,
|
|
190
|
-
enable_logging: false,
|
|
191
|
-
enable_analytics: true,
|
|
192
|
-
api_base_url: 'https://api.nimbbl.tech/' // Optional: override default URL
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
|
|
198
200
|
## Error Handling
|
|
199
201
|
|
|
200
202
|
```javascript
|
|
201
203
|
try {
|
|
202
204
|
const checkoutResult = await nimbblSDK.checkout({
|
|
203
205
|
orderToken: 'YOUR_ORDER_TOKEN',
|
|
204
|
-
paymentModeCode: '',
|
|
205
|
-
bankCode: '',
|
|
206
|
-
walletCode: '',
|
|
207
|
-
paymentFlow: ''
|
|
206
|
+
paymentModeCode: '<OPTIONAL>',
|
|
207
|
+
bankCode: '<OPTIONAL>',
|
|
208
|
+
walletCode: '<OPTIONAL>',
|
|
209
|
+
paymentFlow: '<OPTIONAL>'
|
|
208
210
|
});
|
|
209
211
|
} catch (error) {
|
|
210
212
|
// Handle payment error
|
|
@@ -456,98 +458,51 @@ For production applications, consider locking to specific versions:
|
|
|
456
458
|
- **Stable versions**: Deprecated features will be marked with warnings for at least one minor version
|
|
457
459
|
- **Major versions**: Breaking changes will be clearly documented
|
|
458
460
|
|
|
459
|
-
##
|
|
460
|
-
|
|
461
|
-
### v1.2.0 (Latest Stable Release)
|
|
462
|
-
|
|
463
|
-
**🚀 Updated to Latest Native SDK Versions!**
|
|
464
|
-
|
|
465
|
-
#### ✨ New Features
|
|
466
|
-
- **Latest iOS SDK**: Updated to `nimbbl_mobile_kit_ios_webview_sdk: ~> 2.0.4`
|
|
467
|
-
- **Latest Android SDK**: Updated to `nimbbl_mobile_kit_android_webview_sdk: v4.0.3`
|
|
468
|
-
- **Enhanced Compatibility**: Full compatibility with latest native SDK features
|
|
469
|
-
- **Unified Event Handling**: New `addCheckoutResponseListener()` method for simplified event handling
|
|
470
|
-
- **Clean API**: Removed legacy `payment_success` and `payment_failed` events for cleaner codebase
|
|
471
|
-
- **iOS-Android Parity**: Complete feature parity between iOS and Android modules
|
|
472
|
-
- **Callback Support**: Direct callback support for better production reliability
|
|
473
|
-
|
|
474
|
-
#### 🔧 Improvements
|
|
475
|
-
- **Better Performance**: Leverages latest optimizations from native SDKs
|
|
476
|
-
- **Enhanced Security**: Includes latest security updates from native SDKs
|
|
477
|
-
- **Improved Stability**: Bug fixes and stability improvements from native SDKs
|
|
478
|
-
- **Future-Ready**: Prepared for upcoming native SDK features
|
|
479
|
-
- **Cross-Platform Consistency**: iOS and Android modules now have identical APIs
|
|
480
|
-
- **Production Ready**: Enhanced callback system for production environments
|
|
481
|
-
|
|
482
|
-
#### 🐛 Bug Fixes
|
|
483
|
-
- Resolved compatibility issues with older native SDK versions
|
|
484
|
-
- Fixed potential memory leaks in native bridge communication
|
|
485
|
-
- Improved error handling for edge cases
|
|
486
|
-
- Fixed iOS `setCheckoutCallback is not a function` error
|
|
487
|
-
- Resolved method signature conflicts in iOS native module
|
|
488
|
-
- Enhanced callback-based communication for better reliability
|
|
461
|
+
## 📝 Release Notes
|
|
489
462
|
|
|
490
|
-
### v1.
|
|
463
|
+
### v1.3.0 - First Release 🎉
|
|
491
464
|
|
|
492
|
-
**🚀 Production
|
|
465
|
+
**🚀 Production-Ready React Native SDK for Nimbbl Payments**
|
|
493
466
|
|
|
494
|
-
#### ✨
|
|
495
|
-
- **
|
|
496
|
-
- **
|
|
467
|
+
#### ✨ Features
|
|
468
|
+
- **Unified API**: Single API for both iOS and Android platforms
|
|
469
|
+
- **Latest Native SDKs**: Built on iOS 2.0.4 and Android 4.0.3
|
|
470
|
+
- **TypeScript Support**: Full TypeScript definitions for better development experience
|
|
471
|
+
- **Cross-Platform Consistency**: Identical behavior on iOS and Android
|
|
472
|
+
- **Production Ready**: Optimized for production environments with comprehensive error handling
|
|
497
473
|
|
|
498
|
-
#### 🔧
|
|
499
|
-
- **
|
|
500
|
-
- **
|
|
501
|
-
- **
|
|
502
|
-
- **
|
|
474
|
+
#### 🔧 Core Functionality
|
|
475
|
+
- **Easy Integration**: Simple setup with production-ready defaults
|
|
476
|
+
- **Multiple Payment Methods**: Support for cards, UPI, netbanking, wallets, EMI, and cash
|
|
477
|
+
- **WebView Integration**: Built-in payment webview with customization options
|
|
478
|
+
- **Unified Event Handling**: Single callback system for all payment responses
|
|
479
|
+
- **Robust Error Handling**: Comprehensive error handling and fallback mechanisms
|
|
503
480
|
|
|
504
|
-
####
|
|
505
|
-
-
|
|
506
|
-
-
|
|
507
|
-
-
|
|
481
|
+
#### 🛠️ Technical Highlights
|
|
482
|
+
- **Modern Architecture**: Built with React Native best practices
|
|
483
|
+
- **Native Bridge**: Seamless communication between React Native and native SDKs
|
|
484
|
+
- **Performance Optimized**: Efficient memory management and callback handling
|
|
485
|
+
- **Clean Codebase**: Production-ready code with no debug artifacts
|
|
486
|
+
- **Comprehensive Testing**: Full test coverage with 20+ test cases
|
|
508
487
|
|
|
509
|
-
|
|
488
|
+
#### 📱 Platform Support
|
|
489
|
+
- **iOS**: iOS 13.0+ with Swift implementation
|
|
490
|
+
- **Android**: API Level 21+ (Android 5.0) with Kotlin implementation
|
|
491
|
+
- **React Native**: 0.70.0+ support with 0.76.0 recommended
|
|
510
492
|
|
|
511
|
-
|
|
493
|
+
## 🎯 What's Next?
|
|
512
494
|
|
|
513
|
-
|
|
495
|
+
This is the first release of the Nimbbl React Native SDK. Future releases will include:
|
|
514
496
|
|
|
515
|
-
|
|
516
|
-
- **
|
|
517
|
-
- **
|
|
518
|
-
- **
|
|
497
|
+
- 🔄 **Enhanced Features**: Additional payment methods and customization options
|
|
498
|
+
- 🚀 **Performance Improvements**: Optimizations based on real-world usage
|
|
499
|
+
- 🛠️ **Developer Experience**: Enhanced debugging tools and documentation
|
|
500
|
+
- 📱 **Platform Updates**: Support for new React Native versions and platform features
|
|
519
501
|
|
|
520
|
-
|
|
521
|
-
- **Performance Optimization**: Better memory management and event handling
|
|
522
|
-
- **Code Quality**: Comprehensive TypeScript definitions and error handling
|
|
523
|
-
- **Documentation**: Complete API documentation with examples and troubleshooting
|
|
502
|
+
## 🤝 Contributing
|
|
524
503
|
|
|
525
|
-
|
|
526
|
-
- Fixed iOS payment status screen not opening issue
|
|
527
|
-
- Resolved event listener lifecycle management
|
|
528
|
-
- Improved WebView integration stability
|
|
504
|
+
We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.
|
|
529
505
|
|
|
530
|
-
|
|
531
|
-
- Updated to latest React Native 0.76.0 compatibility
|
|
532
|
-
- Enhanced iOS and Android native module integration
|
|
506
|
+
## 📄 License
|
|
533
507
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
### Previous Alpha Releases
|
|
537
|
-
|
|
538
|
-
#### v1.0.0-alpha.12
|
|
539
|
-
- Enhanced event listener management
|
|
540
|
-
- Improved iOS native module integration
|
|
541
|
-
- Added debug logging capabilities
|
|
542
|
-
|
|
543
|
-
#### v1.0.0-alpha.3
|
|
544
|
-
- Enhanced error handling
|
|
545
|
-
- Improved WebView integration
|
|
546
|
-
- Better TypeScript support
|
|
547
|
-
|
|
548
|
-
#### v1.0.0-alpha.2
|
|
549
|
-
- Bug fixes and improvements
|
|
550
|
-
- Enhanced error handling
|
|
551
|
-
|
|
552
|
-
#### v1.0.0-alpha.1
|
|
553
|
-
- Initial alpha release with core functionality
|
|
508
|
+
This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.
|
|
@@ -10,10 +10,6 @@
|
|
|
10
10
|
android:name=".NimbblCheckoutActivity"
|
|
11
11
|
android:exported="false"
|
|
12
12
|
android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar" />
|
|
13
|
-
<activity
|
|
14
|
-
android:name=".TestActivity"
|
|
15
|
-
android:exported="false"
|
|
16
|
-
android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar" />
|
|
17
13
|
</application>
|
|
18
14
|
|
|
19
15
|
</manifest>
|
|
@@ -6,12 +6,33 @@ import android.os.Bundle
|
|
|
6
6
|
import tech.nimbbl.webviewsdk.core.NimbblCheckoutSDK
|
|
7
7
|
import tech.nimbbl.webviewsdk.models.NimbblCheckoutOptions
|
|
8
8
|
import tech.nimbbl.webviewsdk.models.interfaces.NimbblCheckoutPaymentListener
|
|
9
|
-
import
|
|
9
|
+
import java.io.Serializable
|
|
10
10
|
|
|
11
11
|
class NimbblCheckoutActivity : Activity(), NimbblCheckoutPaymentListener {
|
|
12
12
|
|
|
13
|
+
private var hasResponded = false
|
|
14
|
+
|
|
13
15
|
companion object {
|
|
14
|
-
private
|
|
16
|
+
private var lastResult: MutableMap<String, Any>? = null
|
|
17
|
+
private var resultCallback: ((MutableMap<String, Any>) -> Unit)? = null
|
|
18
|
+
private var currentActivity: NimbblCheckoutActivity? = null
|
|
19
|
+
|
|
20
|
+
fun finishActivity() {
|
|
21
|
+
currentActivity?.finish()
|
|
22
|
+
currentActivity = null
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
fun setResultCallback(callback: (MutableMap<String, Any>) -> Unit) {
|
|
26
|
+
resultCallback = callback
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
fun getLastResult(): MutableMap<String, Any>? {
|
|
30
|
+
return lastResult
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
fun clearLastResult() {
|
|
34
|
+
lastResult = null
|
|
35
|
+
}
|
|
15
36
|
const val EXTRA_ORDER_TOKEN = "order_token"
|
|
16
37
|
const val EXTRA_PAYMENT_MODE_CODE = "payment_mode_code"
|
|
17
38
|
const val EXTRA_BANK_CODE = "bank_code"
|
|
@@ -40,6 +61,7 @@ class NimbblCheckoutActivity : Activity(), NimbblCheckoutPaymentListener {
|
|
|
40
61
|
|
|
41
62
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
42
63
|
super.onCreate(savedInstanceState)
|
|
64
|
+
currentActivity = this
|
|
43
65
|
|
|
44
66
|
try {
|
|
45
67
|
// Get the checkout options from intent
|
|
@@ -65,7 +87,7 @@ class NimbblCheckoutActivity : Activity(), NimbblCheckoutPaymentListener {
|
|
|
65
87
|
.setWalletCode(walletCode)
|
|
66
88
|
.build()
|
|
67
89
|
|
|
68
|
-
// Initialize SDK and
|
|
90
|
+
// Initialize SDK and start checkout
|
|
69
91
|
NimbblCheckoutSDK.getInstance().init(this)
|
|
70
92
|
NimbblCheckoutSDK.getInstance().checkout(checkoutOptions)
|
|
71
93
|
|
|
@@ -81,60 +103,29 @@ class NimbblCheckoutActivity : Activity(), NimbblCheckoutPaymentListener {
|
|
|
81
103
|
|
|
82
104
|
|
|
83
105
|
override fun onCheckoutResponse(data: MutableMap<String, Any>) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
val jsonObject = JSONObject()
|
|
88
|
-
data.forEach { (key, value) ->
|
|
89
|
-
when (value) {
|
|
90
|
-
is String -> {
|
|
91
|
-
// Replace "null" string with empty string
|
|
92
|
-
val cleanValue = if (value == "null") "" else value
|
|
93
|
-
jsonObject.put(key, cleanValue)
|
|
94
|
-
}
|
|
95
|
-
is Number -> jsonObject.put(key, value)
|
|
96
|
-
is Boolean -> jsonObject.put(key, value)
|
|
97
|
-
is Map<*, *> -> {
|
|
98
|
-
val nestedJson = JSONObject()
|
|
99
|
-
(value as Map<String, Any>).forEach { (nestedKey, nestedValue) ->
|
|
100
|
-
when (nestedValue) {
|
|
101
|
-
is String -> {
|
|
102
|
-
// Replace "null" string with empty string
|
|
103
|
-
val cleanValue = if (nestedValue == "null") "" else nestedValue
|
|
104
|
-
nestedJson.put(nestedKey, cleanValue)
|
|
105
|
-
}
|
|
106
|
-
is Number -> nestedJson.put(nestedKey, nestedValue)
|
|
107
|
-
is Boolean -> nestedJson.put(nestedKey, nestedValue)
|
|
108
|
-
else -> {
|
|
109
|
-
val cleanValue = if (nestedValue.toString() == "null") "" else nestedValue.toString()
|
|
110
|
-
nestedJson.put(nestedKey, cleanValue)
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
jsonObject.put(key, nestedJson)
|
|
115
|
-
}
|
|
116
|
-
else -> {
|
|
117
|
-
val cleanValue = if (value.toString() == "null") "" else value.toString()
|
|
118
|
-
jsonObject.put(key, cleanValue)
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
jsonObject.toString()
|
|
123
|
-
} catch (e: Exception) {
|
|
124
|
-
data.toString() // Fallback to original format
|
|
106
|
+
// Prevent multiple responses - only process the first valid response
|
|
107
|
+
if (hasResponded) {
|
|
108
|
+
return
|
|
125
109
|
}
|
|
126
110
|
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
putExtra("order_id", data["order_id"]?.toString() ?: "")
|
|
131
|
-
putExtra("payment_id", data["payment_id"]?.toString() ?: "")
|
|
132
|
-
putExtra("response", jsonData)
|
|
111
|
+
// Only process non-empty responses
|
|
112
|
+
if (data.isEmpty()) {
|
|
113
|
+
return
|
|
133
114
|
}
|
|
134
115
|
|
|
135
|
-
|
|
116
|
+
hasResponded = true
|
|
136
117
|
|
|
137
|
-
|
|
118
|
+
// Call the React Native module directly instead of using Activity result
|
|
119
|
+
NimbblReactNativeSDKModule.handleCheckoutResponse(data)
|
|
120
|
+
|
|
121
|
+
// Finish the activity immediately since we're using direct callback
|
|
122
|
+
try {
|
|
123
|
+
if (!isFinishing) {
|
|
124
|
+
finish()
|
|
125
|
+
}
|
|
126
|
+
} catch (e: Exception) {
|
|
127
|
+
// Activity finish error - ignore
|
|
128
|
+
}
|
|
138
129
|
}
|
|
139
130
|
|
|
140
131
|
|