Skip to content

Commit

Permalink
feat: catch unexpected errors in paypal-checkout-sdk
Browse files Browse the repository at this point in the history
  • Loading branch information
BohdanRybakEk committed Dec 14, 2021
1 parent d4b2a74 commit 325098b
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 31 deletions.
1 change: 1 addition & 0 deletions android/src/main/java/com/reactnativepaypal/Constants.kt
Expand Up @@ -2,5 +2,6 @@ package com.reactnativepaypal

object Constants {
const val PAYPAL_ERROR_CODE = "PAYPAL_ERROR"
const val PAYPAL_INTERNAL_ERROR_CODE = "PAYPAL_INTERNAL_ERROR"
const val PAYPAL_CANCEL_DEFAULT_CODE = "PAYPAL_CANCELLED"
}
67 changes: 36 additions & 31 deletions android/src/main/java/com/reactnativepaypal/PaypalModule.kt
Expand Up @@ -11,45 +11,50 @@ import com.paypal.checkout.createorder.CreateOrder
import com.paypal.checkout.error.OnError
import com.reactnativepaypal.Constants.PAYPAL_CANCEL_DEFAULT_CODE
import com.reactnativepaypal.Constants.PAYPAL_ERROR_CODE
import com.reactnativepaypal.Constants.PAYPAL_INTERNAL_ERROR_CODE

class PaypalModule(private val reactContext: ReactApplicationContext?) :
ReactContextBaseJavaModule(reactContext) {
override fun getName() = "Paypal"

@ReactMethod
fun startWithOrderId(parameters: ReadableMap, promise: Promise) {
PayPalCheckout.setConfig(
CheckoutConfig(
clientId = parameters.getString("clientId") ?: "",
environment = if (parameters.getBoolean("useSandbox"))
Environment.SANDBOX else
Environment.LIVE,
returnUrl = parameters.getString("returnUrl") ?: "",
application = reactContext?.applicationContext as Application
try {
PayPalCheckout.setConfig(
CheckoutConfig(
clientId = parameters.getString("clientId") ?: "",
environment = if (parameters.getBoolean("useSandbox"))
Environment.SANDBOX else
Environment.LIVE,
returnUrl = parameters.getString("returnUrl") ?: "",
application = reactContext?.applicationContext as Application
)
)
)

PayPalCheckout.start(
createOrder = CreateOrder { createOrderActions ->
val orderId = parameters.getString("orderId") ?: ""
createOrderActions.set(orderId)
},
onApprove = OnApprove { approval ->
run {
val result = Arguments.createMap()
result.putString("orderId", approval.data.orderId)
result.putString("payerId", approval.data.payerId)
result.putString("paymentId", approval.data.paymentId)
promise.resolve(result)
}
},
onCancel = OnCancel {
promise.reject(
parameters.getString("cancelErrorCode") ?: PAYPAL_CANCEL_DEFAULT_CODE,
"The user cancelled"
)
},
onError = OnError { errorInfo -> promise.reject(PAYPAL_ERROR_CODE, errorInfo.reason) }
)
PayPalCheckout.start(
createOrder = CreateOrder { createOrderActions ->
val orderId = parameters.getString("orderId") ?: ""
createOrderActions.set(orderId)
},
onApprove = OnApprove { approval ->
run {
val result = Arguments.createMap()
result.putString("orderId", approval.data.orderId)
result.putString("payerId", approval.data.payerId)
result.putString("paymentId", approval.data.paymentId)
promise.resolve(result)
}
},
onCancel = OnCancel {
promise.reject(
parameters.getString("cancelErrorCode") ?: PAYPAL_CANCEL_DEFAULT_CODE,
"The user cancelled"
)
},
onError = OnError { errorInfo -> promise.reject(PAYPAL_ERROR_CODE, errorInfo.reason) }
)
} catch (e: Exception) {
promise.reject(PAYPAL_INTERNAL_ERROR_CODE, "Something went wrong on PayPal side. Please, try again.")
}
}
}

0 comments on commit 325098b

Please sign in to comment.