react-native-pos-pagseguro 1.0.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.
Files changed (125) hide show
  1. package/LICENSE +20 -0
  2. package/PosPagseguro.podspec +29 -0
  3. package/README.md +193 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +132 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/libs/wrapper-1.30.52.aar +0 -0
  8. package/android/src/main/AndroidManifest.xml +2 -0
  9. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  10. package/android/src/main/java/com/margelo/nitro/pospagseguro/PosPagseguro.kt +251 -0
  11. package/android/src/main/java/com/margelo/nitro/pospagseguro/PosPagseguroPackage.kt +23 -0
  12. package/android/src/main/java/com/margelo/nitro/pospagseguro/maps/SubAcquirer.kt +23 -0
  13. package/android/src/main/java/com/margelo/nitro/pospagseguro/maps/TransactionResult.kt +53 -0
  14. package/android/src/main/java/com/margelo/nitro/pospagseguro/maps/Userdata.kt +17 -0
  15. package/ios/PosPagseguro.swift +5 -0
  16. package/lib/module/PosPagseguro.nitro.js +4 -0
  17. package/lib/module/PosPagseguro.nitro.js.map +1 -0
  18. package/lib/module/index.js +7 -0
  19. package/lib/module/index.js.map +1 -0
  20. package/lib/module/package.json +1 -0
  21. package/lib/module/pag_seguro.js +290 -0
  22. package/lib/module/pag_seguro.js.map +1 -0
  23. package/lib/module/types/device.js +71 -0
  24. package/lib/module/types/device.js.map +1 -0
  25. package/lib/module/types/exceptions.js +16 -0
  26. package/lib/module/types/exceptions.js.map +1 -0
  27. package/lib/module/types/payments.js +84 -0
  28. package/lib/module/types/payments.js.map +1 -0
  29. package/lib/typescript/package.json +1 -0
  30. package/lib/typescript/src/PosPagseguro.nitro.d.ts +27 -0
  31. package/lib/typescript/src/PosPagseguro.nitro.d.ts.map +1 -0
  32. package/lib/typescript/src/index.d.ts +7 -0
  33. package/lib/typescript/src/index.d.ts.map +1 -0
  34. package/lib/typescript/src/pag_seguro.d.ts +188 -0
  35. package/lib/typescript/src/pag_seguro.d.ts.map +1 -0
  36. package/lib/typescript/src/types/device.d.ts +92 -0
  37. package/lib/typescript/src/types/device.d.ts.map +1 -0
  38. package/lib/typescript/src/types/exceptions.d.ts +16 -0
  39. package/lib/typescript/src/types/exceptions.d.ts.map +1 -0
  40. package/lib/typescript/src/types/payments.d.ts +205 -0
  41. package/lib/typescript/src/types/payments.d.ts.map +1 -0
  42. package/nitro.json +16 -0
  43. package/nitrogen/generated/android/c++/JCapabilities.hpp +100 -0
  44. package/nitrogen/generated/android/c++/JCardIssuerNationality.hpp +61 -0
  45. package/nitrogen/generated/android/c++/JCustomError.hpp +61 -0
  46. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
  47. package/nitrogen/generated/android/c++/JHybridPosPagseguroSpec.cpp +248 -0
  48. package/nitrogen/generated/android/c++/JHybridPosPagseguroSpec.hpp +81 -0
  49. package/nitrogen/generated/android/c++/JInstallmentTypes.hpp +61 -0
  50. package/nitrogen/generated/android/c++/JPaymentData.hpp +81 -0
  51. package/nitrogen/generated/android/c++/JPaymentTypes.hpp +64 -0
  52. package/nitrogen/generated/android/c++/JSubAcquirer.hpp +101 -0
  53. package/nitrogen/generated/android/c++/JTransactionResult.hpp +208 -0
  54. package/nitrogen/generated/android/c++/JUserData.hpp +86 -0
  55. package/nitrogen/generated/android/c++/JVariant_CustomError_TransactionResult.cpp +26 -0
  56. package/nitrogen/generated/android/c++/JVariant_CustomError_TransactionResult.hpp +75 -0
  57. package/nitrogen/generated/android/c++/JVariant_Double_CustomError.cpp +26 -0
  58. package/nitrogen/generated/android/c++/JVariant_Double_CustomError.hpp +70 -0
  59. package/nitrogen/generated/android/c++/JVoidPayData.hpp +72 -0
  60. package/nitrogen/generated/android/c++/JVoidType.hpp +58 -0
  61. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/Capabilities.kt +37 -0
  62. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/CardIssuerNationality.kt +24 -0
  63. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/CustomError.kt +41 -0
  64. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/Func_void_std__string.kt +80 -0
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/HybridPosPagseguroSpec.kt +132 -0
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/InstallmentTypes.kt +24 -0
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/PaymentData.kt +53 -0
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/PaymentTypes.kt +25 -0
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/SubAcquirer.kt +71 -0
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/TransactionResult.kt +149 -0
  71. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/UserData.kt +59 -0
  72. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/Variant_CustomError_TransactionResult.kt +59 -0
  73. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/Variant_Double_CustomError.kt +59 -0
  74. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/VoidPayData.kt +47 -0
  75. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/VoidType.kt +23 -0
  76. package/nitrogen/generated/android/kotlin/com/margelo/nitro/pospagseguro/pospagseguroOnLoad.kt +35 -0
  77. package/nitrogen/generated/android/pospagseguro+autolinking.cmake +83 -0
  78. package/nitrogen/generated/android/pospagseguro+autolinking.gradle +27 -0
  79. package/nitrogen/generated/android/pospagseguroOnLoad.cpp +46 -0
  80. package/nitrogen/generated/android/pospagseguroOnLoad.hpp +25 -0
  81. package/nitrogen/generated/ios/PosPagseguro+autolinking.rb +60 -0
  82. package/nitrogen/generated/ios/PosPagseguro-Swift-Cxx-Bridge.cpp +65 -0
  83. package/nitrogen/generated/ios/PosPagseguro-Swift-Cxx-Bridge.hpp +422 -0
  84. package/nitrogen/generated/ios/PosPagseguro-Swift-Cxx-Umbrella.hpp +81 -0
  85. package/nitrogen/generated/ios/c++/HybridPosPagseguroSpecSwift.cpp +11 -0
  86. package/nitrogen/generated/ios/c++/HybridPosPagseguroSpecSwift.hpp +236 -0
  87. package/nitrogen/generated/ios/swift/Capabilities.swift +96 -0
  88. package/nitrogen/generated/ios/swift/CardIssuerNationality.swift +44 -0
  89. package/nitrogen/generated/ios/swift/CustomError.swift +35 -0
  90. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
  91. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
  92. package/nitrogen/generated/ios/swift/Func_void_std__variant_CustomError__TransactionResult_.swift +59 -0
  93. package/nitrogen/generated/ios/swift/Func_void_std__variant_double__CustomError_.swift +59 -0
  94. package/nitrogen/generated/ios/swift/HybridPosPagseguroSpec.swift +72 -0
  95. package/nitrogen/generated/ios/swift/HybridPosPagseguroSpec_cxx.swift +434 -0
  96. package/nitrogen/generated/ios/swift/InstallmentTypes.swift +44 -0
  97. package/nitrogen/generated/ios/swift/PaymentData.swift +74 -0
  98. package/nitrogen/generated/ios/swift/PaymentTypes.swift +48 -0
  99. package/nitrogen/generated/ios/swift/SubAcquirer.swift +85 -0
  100. package/nitrogen/generated/ios/swift/TransactionResult.swift +674 -0
  101. package/nitrogen/generated/ios/swift/UserData.swift +169 -0
  102. package/nitrogen/generated/ios/swift/Variant_CustomError_TransactionResult.swift +18 -0
  103. package/nitrogen/generated/ios/swift/Variant_Double_CustomError.swift +18 -0
  104. package/nitrogen/generated/ios/swift/VoidPayData.swift +64 -0
  105. package/nitrogen/generated/ios/swift/VoidType.swift +40 -0
  106. package/nitrogen/generated/shared/c++/Capabilities.hpp +76 -0
  107. package/nitrogen/generated/shared/c++/CardIssuerNationality.hpp +80 -0
  108. package/nitrogen/generated/shared/c++/CustomError.hpp +87 -0
  109. package/nitrogen/generated/shared/c++/HybridPosPagseguroSpec.cpp +37 -0
  110. package/nitrogen/generated/shared/c++/HybridPosPagseguroSpec.hpp +102 -0
  111. package/nitrogen/generated/shared/c++/InstallmentTypes.hpp +63 -0
  112. package/nitrogen/generated/shared/c++/PaymentData.hpp +108 -0
  113. package/nitrogen/generated/shared/c++/PaymentTypes.hpp +69 -0
  114. package/nitrogen/generated/shared/c++/SubAcquirer.hpp +127 -0
  115. package/nitrogen/generated/shared/c++/TransactionResult.hpp +234 -0
  116. package/nitrogen/generated/shared/c++/UserData.hpp +112 -0
  117. package/nitrogen/generated/shared/c++/VoidPayData.hpp +98 -0
  118. package/nitrogen/generated/shared/c++/VoidType.hpp +62 -0
  119. package/package.json +179 -0
  120. package/src/PosPagseguro.nitro.ts +32 -0
  121. package/src/index.ts +19 -0
  122. package/src/pag_seguro.ts +306 -0
  123. package/src/types/device.ts +97 -0
  124. package/src/types/exceptions.ts +19 -0
  125. package/src/types/payments.ts +215 -0
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 CECSMH
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "PosPagseguro"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => min_ios_version_supported }
14
+ s.source = { :git => "https://github.com/CECSMH/react-native-pos-pagseguro.git", :tag => "#{s.version}" }
15
+
16
+ s.source_files = [
17
+ "ios/**/*.{swift}",
18
+ "ios/**/*.{m,mm}",
19
+ "cpp/**/*.{hpp,cpp}",
20
+ ]
21
+
22
+ s.dependency 'React-jsi'
23
+ s.dependency 'React-callinvoker'
24
+
25
+ load 'nitrogen/generated/ios/PosPagseguro+autolinking.rb'
26
+ add_nitrogen_files(s)
27
+
28
+ install_modules_dependencies(s)
29
+ end
package/README.md ADDED
@@ -0,0 +1,193 @@
1
+ # react-native-pos-pagseguro
2
+
3
+ **PagSeguro POS SDK for React Native** – Integration with PagSeguro terminals (Moderninha, Moderninha2, etc.) using react-native-nitro-modules.
4
+
5
+ Supports credit, debit, voucher, PIX payments, installments, cancellations, receipt printing, and more.
6
+ [![npm version](https://badge.fury.io/js/react-native-pos-pagseguro.svg)](https://badge.fury.io/js/react-native-pos-pagseguro)
7
+ [![Platform](https://img.shields.io/badge/platform-Android-yellow.svg)](https://www.android.com)
8
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
9
+
10
+ ## Features
11
+
12
+ - **Initialize and activate** PagSeguro terminals
13
+ - **Payments:** Credit, Debit, Voucher, PIX
14
+ - **Installments:** (à vista, store installment without interest, buyer installment with interest)
15
+ - **Cancel/refund:** transactions (same-day only)
16
+ - Get last approved transaction
17
+ - **Reprint:** customer or merchant receipt
18
+ - Custom image printing (file path or Base64)
19
+ - Abort ongoing operations
20
+ - Reboot terminal
21
+ - **Device info:** model, serial number, user data, sub-acquirer data
22
+ - **Capability detection:** printer, NFC, chip, magnetic stripe, etc.
23
+ - Progress callbacks during payment flow
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ npm install react-native-pos-pagseguro
29
+ ```
30
+ ## or
31
+ ```bash
32
+ yarn add react-native-pos-pagseguro
33
+ ```
34
+ ### Post-install steps
35
+
36
+ Since this library uses **react-native-nitro-modules**, you need to rebuild your app after installation:
37
+
38
+ ```bash
39
+ npx react-native run-android
40
+ ```
41
+
42
+
43
+ ## Requirements
44
+
45
+ - **Platform**: Android only
46
+ - React Native ≥ 0.71
47
+ - react-native-nitro-modules ≥ 0.30 (for older RN versions)
48
+
49
+ ## Usage
50
+
51
+ ### 1. Initialize the terminal (required first step)
52
+
53
+ ```typescript
54
+ import PagSeguro from 'react-native-pos-pagseguro';
55
+
56
+ // Must be called once with your activation code provided by PagSeguro
57
+ try {
58
+ PagSeguro.initialize('YOUR_ACTIVATION_CODE_HERE');
59
+ console.log('Terminal initialized successfully');
60
+ } catch (error) {
61
+ console.error('Initialization failed:', error);
62
+ }
63
+ ```
64
+
65
+
66
+ ### 2. Make a payment
67
+ ```typescript
68
+ import PagSeguro, { PaymentTypes, InstallmentTypes } from 'react-native-pos-pagseguro';
69
+
70
+ try {
71
+ const result = await PagSeguro.do_payment({
72
+ amount: 1000, // R$ 10,00 (in cents)
73
+ type: PaymentTypes.CREDIT,
74
+ installment_type: InstallmentTypes.SELLER_INSTALLMENT,
75
+ installments: 3,
76
+ print_receipt: true,
77
+ user_reference: 12345, // optional
78
+ }, (statusMessage) => {
79
+ console.log('Progress:', statusMessage); // e.g., "APROXIME, INSIRA OU PASSE O CARTÃO"
80
+ });
81
+
82
+ console.log('Payment approved!', result.transaction_code, result.nsu);
83
+ } catch (error) {
84
+ console.error('Payment failed:', error.code, error.message);
85
+ }
86
+ ```
87
+
88
+
89
+ ### 3. Cancel a payment (same day only)
90
+ ```typescript
91
+ try {
92
+ const cancelResult = await PagSeguro.void_payment({
93
+ transaction_code: '123456789',
94
+ transaction_id: 'ABCDEF123456',
95
+ print_receipt: true,
96
+ }, (statusMessage) => {
97
+ console.log('Progress:', statusMessage); // e.g., "APROXIME, INSIRA OU PASSE O CARTÃO"
98
+ });
99
+
100
+ console.log('Cancellation successful:', cancelResult);
101
+ } catch (error) {
102
+ console.error('Cancellation failed:', error);
103
+ }
104
+ ```
105
+
106
+
107
+ ### 4. Reprint receipts
108
+ ```typescript
109
+ try {
110
+ await PagSeguro.reprint_customer_receipt();
111
+ console.log('Customer receipt reprinted');
112
+ } catch (error) {
113
+ console.error('Print failed:', error);
114
+ }
115
+ ```
116
+
117
+ ### 5. Check device capabilities
118
+ ```typescript
119
+ if (PagSeguro.capabilities.has_printer()) {
120
+ console.log('This terminal has a thermal printer');
121
+ }
122
+
123
+ if (PagSeguro.capabilities.has_picc()) {
124
+ console.log('Supports contactless (NFC) payments');
125
+ }
126
+ ```
127
+
128
+ ### 6. Get device info
129
+ ```typescript
130
+ console.log('Model:', PagSeguro.get_model());
131
+ console.log('Serial:', PagSeguro.get_serial_number());
132
+ console.log('User data:', PagSeguro.get_userdata());
133
+ ```
134
+
135
+ ## Error Handling
136
+
137
+
138
+ - `PaymentError` – Payment, validation, or communication issues
139
+ - `PrintError` – Printing or reprinting failures
140
+ - `AbordError` – Failure when trying to abort an operation
141
+ ```typescript
142
+ try {
143
+ await PagSeguro.do_payment(data);
144
+ } catch (e) {
145
+ if (e instanceof PaymentError) {
146
+ console.log('Payment error:', e.code, e.message);
147
+ }
148
+ }
149
+ ```
150
+
151
+ ## API Reference
152
+
153
+ All types and enums are fully typed. Key exports:
154
+
155
+ - `PaymentData`
156
+ - `TransactionResult`
157
+ - `VoidPayData`
158
+ - `PaymentTypes`
159
+ - `InstallmentTypes`
160
+ - `VoidType`
161
+ - `capabilities` (object with detection methods)
162
+
163
+ ## Contributing
164
+
165
+ Contributions are welcome! To contribute:
166
+
167
+ 1. Fork the repository.
168
+ 2. Create a feature branch (`git checkout -b feature/your-feature`).
169
+ 3. Commit your changes (`git commit -m 'Add your feature'`).
170
+ 4. Push to the branch (`git push origin feature/your-feature`).
171
+ 5. Open a pull request.
172
+
173
+ Please include tests and update documentation as needed.
174
+
175
+ ## Support the Project ☕
176
+
177
+ If you've found this library helpful, consider buying me a coffee!
178
+
179
+
180
+
181
+ Scan the QR code to donate (Lightning⚡):
182
+
183
+ ![Lightning donation QR code for cecsmh@bipa.app](https://api.qrserver.com/v1/create-qr-code/?data=lightning:cecsmh@bipa.app&size=300x300&ecc=M)
184
+
185
+ Thank you for your support! 🚀
186
+
187
+ ## License
188
+
189
+ MIT License. See LICENSE for details.
190
+
191
+ ## Support
192
+
193
+ For issues or questions, open an issue on the GitHub repository or contact the maintainers.
@@ -0,0 +1,24 @@
1
+ project(pospagseguro)
2
+ cmake_minimum_required(VERSION 3.9.0)
3
+
4
+ set(PACKAGE_NAME pospagseguro)
5
+ set(CMAKE_VERBOSE_MAKEFILE ON)
6
+ set(CMAKE_CXX_STANDARD 20)
7
+
8
+ # Define C++ library and add all sources
9
+ add_library(${PACKAGE_NAME} SHARED src/main/cpp/cpp-adapter.cpp)
10
+
11
+ # Add Nitrogen specs :)
12
+ include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/pospagseguro+autolinking.cmake)
13
+
14
+ # Set up local includes
15
+ include_directories("src/main/cpp" "../cpp")
16
+
17
+ find_library(LOG_LIB log)
18
+
19
+ # Link all libraries together
20
+ target_link_libraries(
21
+ ${PACKAGE_NAME}
22
+ ${LOG_LIB}
23
+ android # <-- Android core
24
+ )
@@ -0,0 +1,132 @@
1
+ buildscript {
2
+ ext.getExtOrDefault = {name ->
3
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['PosPagseguro_' + name]
4
+ }
5
+
6
+ repositories {
7
+ google()
8
+ mavenCentral()
9
+ maven { url 'https://github.com/pagseguro/PlugPagServiceWrapper/raw/master' }
10
+ }
11
+
12
+ dependencies {
13
+ classpath "com.android.tools.build:gradle:8.7.2"
14
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
15
+ }
16
+ }
17
+
18
+ def reactNativeArchitectures() {
19
+ def value = rootProject.getProperties().get("reactNativeArchitectures")
20
+ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
21
+ }
22
+
23
+ apply plugin: "com.android.library"
24
+ apply plugin: "org.jetbrains.kotlin.android"
25
+ apply plugin: "kotlin-android"
26
+ apply from: '../nitrogen/generated/android/pospagseguro+autolinking.gradle'
27
+
28
+ apply plugin: "com.facebook.react"
29
+
30
+ def getExtOrIntegerDefault(name) {
31
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["PosPagseguro_" + name]).toInteger()
32
+ }
33
+
34
+ android {
35
+ namespace "com.margelo.nitro.pospagseguro"
36
+
37
+ compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
38
+
39
+ defaultConfig {
40
+ minSdkVersion getExtOrIntegerDefault("minSdkVersion")
41
+ targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
42
+
43
+ externalNativeBuild {
44
+ cmake {
45
+ cppFlags "-frtti -fexceptions -Wall -fstack-protector-all"
46
+ arguments "-DANDROID_STL=c++_shared", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
47
+ abiFilters (*reactNativeArchitectures())
48
+
49
+ buildTypes {
50
+ debug {
51
+ cppFlags "-O1 -g"
52
+ }
53
+ release {
54
+ cppFlags "-O2"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+
61
+ externalNativeBuild {
62
+ cmake {
63
+ path "CMakeLists.txt"
64
+ }
65
+ }
66
+
67
+ packagingOptions {
68
+ excludes = [
69
+ "META-INF",
70
+ "META-INF/**",
71
+ "**/libc++_shared.so",
72
+ "**/libfbjni.so",
73
+ "**/libjsi.so",
74
+ "**/libfolly_json.so",
75
+ "**/libfolly_runtime.so",
76
+ "**/libglog.so",
77
+ "**/libhermes.so",
78
+ "**/libhermes-executor-debug.so",
79
+ "**/libhermes_executor.so",
80
+ "**/libreactnative.so",
81
+ "**/libreactnativejni.so",
82
+ "**/libturbomodulejsijni.so",
83
+ "**/libreact_nativemodule_core.so",
84
+ "**/libjscexecutor.so"
85
+ ]
86
+ }
87
+
88
+ buildFeatures {
89
+ buildConfig true
90
+ prefab true
91
+ }
92
+
93
+ buildTypes {
94
+ release {
95
+ minifyEnabled false
96
+ }
97
+ }
98
+
99
+ lintOptions {
100
+ disable "GradleCompatible"
101
+ }
102
+
103
+ compileOptions {
104
+ sourceCompatibility JavaVersion.VERSION_1_8
105
+ targetCompatibility JavaVersion.VERSION_1_8
106
+ }
107
+
108
+ sourceSets {
109
+ main {
110
+ java.srcDirs += [
111
+ "generated/java",
112
+ "generated/jni"
113
+ ]
114
+ }
115
+ }
116
+ }
117
+
118
+ repositories {
119
+ mavenCentral()
120
+ google()
121
+ maven { url 'https://github.com/pagseguro/PlugPagServiceWrapper/raw/master' }
122
+ }
123
+
124
+ def kotlin_version = getExtOrDefault("kotlinVersion")
125
+
126
+ dependencies {
127
+ implementation(fileTree(dir: "libs", include: ["*.jar", "*.aar"]))
128
+ implementation "com.facebook.react:react-android"
129
+
130
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
131
+ implementation project(":react-native-nitro-modules")
132
+ }
@@ -0,0 +1,5 @@
1
+ PosPagseguro_kotlinVersion=2.0.21
2
+ PosPagseguro_minSdkVersion=24
3
+ PosPagseguro_targetSdkVersion=34
4
+ PosPagseguro_compileSdkVersion=35
5
+ PosPagseguro_ndkVersion=27.1.12297006
Binary file
@@ -0,0 +1,2 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ </manifest>
@@ -0,0 +1,6 @@
1
+ #include <jni.h>
2
+ #include "pospagseguroOnLoad.hpp"
3
+
4
+ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
5
+ return margelo::nitro::pospagseguro::initialize(vm);
6
+ }
@@ -0,0 +1,251 @@
1
+ package com.margelo.nitro.pospagseguro
2
+
3
+ import com.margelo.nitro.core.Promise
4
+ import com.margelo.nitro.NitroModules
5
+ import com.margelo.nitro.core.NullType
6
+ import com.margelo.nitro.pospagseguro.maps.*
7
+
8
+ import com.facebook.proguard.annotations.DoNotStrip
9
+ import com.facebook.react.bridge.ReactApplicationContext
10
+
11
+ import br.com.uol.pagseguro.plugpagservice.wrapper.IPlugPagWrapper
12
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPag
13
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagPrinterData
14
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagActivationData
15
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagCommand
16
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagCustomPrinterLayout
17
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagEffectuatePreAutoData
18
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagEventData
19
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagEventListener
20
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagExtras
21
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagInitializationResult
22
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagInstallment
23
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagNFCResult
24
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagNearFieldCardData
25
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagPaymentData
26
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagPreAutoData
27
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagPreAutoKeyingData
28
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagPreAutoQueryData
29
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagPrintResult
30
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagPrinterListener
31
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagReceiptSMSData
32
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagStyleData
33
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagTransactionResult
34
+ import br.com.uol.pagseguro.plugpagservice.wrapper.TerminalCapabilities
35
+ import br.com.uol.pagseguro.plugpagservice.wrapper.PlugPagVoidData
36
+ import br.com.uol.pagseguro.plugpagservice.wrapper.data.result.PlugPagCmdExchangeResult
37
+ import br.com.uol.pagseguro.plugpagservice.wrapper.exception.PlugPagException
38
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagNFCListener
39
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagAbortListener
40
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagPaymentListener
41
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagSetStylesListener
42
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagActivationListener
43
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagPrintActionListener
44
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagIsActivatedListener
45
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagInstallmentsListener
46
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagAPDUCmdExchangeListener
47
+ import br.com.uol.pagseguro.plugpagservice.wrapper.listeners.PlugPagLastTransactionListener
48
+
49
+ import android.content.Context
50
+ import android.util.Log
51
+ import android.util.Base64
52
+ import java.io.File
53
+ import java.io.FileOutputStream
54
+
55
+ @DoNotStrip
56
+ class PosPagseguro : HybridPosPagseguroSpec() {
57
+
58
+ private val androidContext: Context get() = NitroModules.applicationContext!!
59
+
60
+ private val plug_pag: IPlugPagWrapper by lazy { PlugPag(androidContext) }
61
+
62
+ override fun getModel(): String { return plug_pag.getModel(); }
63
+ override fun getSerialNumber(): String { return plug_pag.getSerialNumber(); }
64
+ override fun getSubAcquirerData(): SubAcquirer? { return plug_pag.getSubAcquirerData()?.toSubAcquirer()}
65
+ override fun getUserData(): UserData { return plug_pag.getUserData().toUserData() }
66
+
67
+ override fun isAuthenticated(): Boolean { return plug_pag.isAuthenticated(); }
68
+ override fun isServiceBusy(): Boolean { return plug_pag.isServiceBusy(); };
69
+
70
+ override fun reboot(): Unit { plug_pag.reboot(); }
71
+
72
+ override fun reprintCustomerReceipt(): Promise<Variant_Double_CustomError> {
73
+ return Promise.async {
74
+ val r = plug_pag.reprintCustomerReceipt();
75
+ if(r.result == PlugPag.RET_OK) return@async Variant_Double_CustomError.create(r.steps.toDouble());
76
+ else return@async Variant_Double_CustomError.create(CustomError(r.errorCode ?: "PRINTERR", r.message ?: "Ocorreu um erro ao tentar reimprimir via do cliente"));
77
+ }
78
+ }
79
+
80
+ override fun reprintStablishmentReceipt(): Promise<Variant_Double_CustomError> {
81
+ return Promise.async {
82
+ val r = plug_pag.reprintStablishmentReceipt();
83
+ if(r.result == PlugPag.RET_OK) return@async Variant_Double_CustomError.create(r.steps.toDouble());
84
+ else return@async Variant_Double_CustomError.create(CustomError(r.errorCode ?: "PRINTERR", r.message ?: "Ocorreu um erro ao tentar reimprimir via do estabelecimento"));
85
+ }
86
+ }
87
+
88
+ override fun printFromBase64(base_64: String, quality: Double, bottomPad: Double?): Promise<Variant_Double_CustomError> {
89
+ val bytes = Base64.decode(base_64, Base64.DEFAULT)
90
+
91
+ val cached_file = File(androidContext.cacheDir, "temp_file")
92
+
93
+ FileOutputStream(cached_file).use { fos ->
94
+ fos.write(bytes)
95
+ fos.flush()
96
+ }
97
+
98
+ return printFromFile(cached_file.absolutePath, quality, bottomPad);
99
+ }
100
+
101
+ override fun printFromFile(file_path: String, quality: Double, bottomPad: Double?): Promise<Variant_Double_CustomError> {
102
+ return Promise.async{
103
+ val q = quality.toInt();
104
+ val bp = bottomPad?.toInt() ?: PlugPag.MIN_PRINTER_STEPS
105
+
106
+ val r = plug_pag.printFromFile(PlugPagPrinterData(file_path, q, bp))
107
+ if(r.result == PlugPag.RET_OK) return@async Variant_Double_CustomError.create(r.steps.toDouble());
108
+ else return@async Variant_Double_CustomError.create(CustomError(r.errorCode ?: "PRINTERR", r.message ?: "Ocorreu um erro ao tentar imprimir arquivo"));
109
+ }
110
+ }
111
+
112
+ override fun hasCapability(capability: Capabilities): Boolean { return plug_pag.hasCapability(capability.value) }
113
+
114
+ override fun initialize(activation_code: String): Unit {
115
+ try {
116
+ val r = plug_pag.initializeAndActivatePinpad(PlugPagActivationData(activation_code))
117
+ if (r.result == PlugPag.RET_OK) return Unit
118
+ else throw Error("$r.errorCode: $r.errorMessage");
119
+ } catch (e: Exception) { throw Error("Ocorreu um erro ao inicializar terminal: $e.message"); }
120
+ }
121
+
122
+ override fun abort(): CustomError? {
123
+ var r = plug_pag.abort()
124
+ if (r.result == PlugPag.RET_OK) return null;
125
+ else return CustomError("OPR_ERROR", "Ocorreu um erro ao solicitar cancelamento");
126
+ }
127
+
128
+ override fun doPayment(payment_data: PaymentData, process_callback: (event: String) -> Unit): Promise<Variant_CustomError_TransactionResult> {
129
+ return Promise.async {
130
+ try {
131
+ if (!plug_pag.isAuthenticated()) return@async Variant_CustomError_TransactionResult.create(CustomError("AUTH", "POS não autenticado!"));
132
+
133
+ @Suppress("REDUNDANT_ELSE_IN_WHEN")
134
+ val type = when (payment_data.type) {
135
+ PaymentTypes.CREDIT -> PlugPag.TYPE_CREDITO
136
+ PaymentTypes.DEBIT -> PlugPag.TYPE_DEBITO
137
+ PaymentTypes.PIX -> PlugPag.TYPE_PIX
138
+ PaymentTypes.VOUCHER -> PlugPag.TYPE_VOUCHER
139
+ else -> return@async Variant_CustomError_TransactionResult.create(CustomError("INVALID_PARAM","Tipo de pagamento inválido"))
140
+ }
141
+
142
+ @Suppress("REDUNDANT_ELSE_IN_WHEN")
143
+ val installment_type = when (payment_data.installment_type) {
144
+ InstallmentTypes.NO_INSTALLMENT -> PlugPag.INSTALLMENT_TYPE_A_VISTA
145
+ InstallmentTypes.SELLER_INSTALLMENT -> PlugPag.INSTALLMENT_TYPE_PARC_VENDEDOR
146
+ InstallmentTypes.BUYER_INSTALLMENT -> PlugPag.INSTALLMENT_TYPE_PARC_COMPRADOR
147
+ else -> return@async Variant_CustomError_TransactionResult.create(CustomError("INVALID_PARAM", "Tipo de parcelamento inválido"))
148
+ }
149
+
150
+ val payment_data = PlugPagPaymentData(
151
+ type = type,
152
+ amount = payment_data.amount.toInt(),
153
+ installmentType = installment_type,
154
+ installments = payment_data.installments.toInt(),
155
+ userReference = payment_data.user_reference?.toInt().toString() ?: "",
156
+ printReceipt = payment_data.print_receipt ?: true,
157
+ partialPay = false,
158
+ isCarne = false
159
+ )
160
+
161
+ var password_count = 0;
162
+
163
+ plug_pag.setEventListener(object : PlugPagEventListener {
164
+ override fun onEvent(data: PlugPagEventData) {
165
+ val msg = when (data.eventCode) {
166
+ PlugPagEventData.EVENT_CODE_DIGIT_PASSWORD -> {
167
+ password_count++
168
+ "SENHA: "+("*".repeat(password_count))
169
+ }
170
+ PlugPagEventData.EVENT_CODE_NO_PASSWORD -> {
171
+ password_count = 0
172
+ "DIGITE A SENHA"
173
+ }
174
+ else -> data.customMessage ?: "AGUARDANDO..."
175
+ }
176
+ process_callback(msg);
177
+ }
178
+ })
179
+
180
+ val result = plug_pag.doPayment(paymentData = payment_data)
181
+
182
+ if (result.result == PlugPag.RET_OK) {
183
+ return@async Variant_CustomError_TransactionResult.create(result.toTransactionResult())
184
+ } else {
185
+ plug_pag.abort();
186
+ var code = result.errorCode ?: "OPR_ERROR";
187
+ var msg = result.message ?: "Ocorreu um erro ao tentar executar a transação.";
188
+ return@async Variant_CustomError_TransactionResult.create(CustomError(code, msg))
189
+ }
190
+ } catch (e: PlugPagException) {
191
+ throw Error("Erro ao realizar pagamento: $e.message");
192
+ } catch (e: Exception) {
193
+ throw Error("Erro inesperado: $e.message");
194
+ }
195
+ return@async Variant_CustomError_TransactionResult.create(CustomError("sdad", "dasdad"))
196
+ }
197
+ }
198
+
199
+ override fun voidPayment(void_data: VoidPayData, process_callback: (event: String) -> Unit): Promise<Variant_CustomError_TransactionResult> {
200
+ return Promise.async {
201
+ try {
202
+ plug_pag.setEventListener(object : PlugPagEventListener {
203
+ override fun onEvent(data: PlugPagEventData) {
204
+ val msg = when (data.eventCode) {
205
+ PlugPagEventData.EVENT_CODE_DIGIT_PASSWORD -> {
206
+
207
+ "SENHA: *"
208
+ }
209
+ PlugPagEventData.EVENT_CODE_NO_PASSWORD -> {
210
+
211
+ "DIGITE A SENHA"
212
+ }
213
+ else -> data.customMessage ?: "AGUARDANDO..."
214
+ }
215
+ process_callback(msg);
216
+ }
217
+ })
218
+ val r = plug_pag.voidPayment(PlugPagVoidData(
219
+ transactionCode = void_data.transaction_code,
220
+ transactionId = void_data.transaction_id,
221
+ printReceipt = void_data.print_receipt?: false,
222
+ voidType = when(void_data.void_type) {
223
+ VoidType.PAYMENT -> PlugPag.VOID_PAYMENT
224
+ VoidType.QRCODE -> PlugPag.VOID_QRCODE
225
+ else -> PlugPag.VOID_PAYMENT
226
+ }
227
+ ))
228
+
229
+ if (r.result == PlugPag.RET_OK) return@async Variant_CustomError_TransactionResult.create(r.toTransactionResult())
230
+ else {
231
+ var code = r.errorCode ?: "OPR_ERROR";
232
+ var msg = r.message ?: "Ocorreu um erro ao tentar executar a transação.";
233
+ return@async Variant_CustomError_TransactionResult.create(CustomError(code, msg))
234
+ }
235
+ } catch (e: PlugPagException) {
236
+ throw Error("Erro ao realizar pagamento: $e.message");
237
+ } catch (e: Exception) {
238
+ throw Error("Erro inesperado: $e.message");
239
+ }
240
+ }
241
+ }
242
+
243
+ override fun getLastApprovedTransaction(): Variant_CustomError_TransactionResult {
244
+ val r = plug_pag.getLastApprovedTransaction()
245
+ if (r.result == PlugPag.RET_OK) return Variant_CustomError_TransactionResult.create(r.toTransactionResult());
246
+
247
+ var code = r.errorCode ?: "OPR_ERROR";
248
+ var msg = r.message ?: "Ocorreu um erro ao requisitar ultima transação.";
249
+ return Variant_CustomError_TransactionResult.create(CustomError(code, msg));
250
+ }
251
+ }