/* * Copyright (c) 2019. Relsell Global */ /* * Copyright (c) 2018. Relsell Global */ package com.stripedemo import android.app.Activity import android.content.Intent import android.os.AsyncTask import android.os.Bundle import android.os.Handler import android.os.Message import android.util.Log import android.widget.Button import android.widget.ProgressBar import android.widget.TextView import android.widget.Toast import com.facebook.react.ReactActivity import com.google.gson.Gson import com.stripe.android.Stripe import com.stripe.android.TokenCallback import com.stripe.android.model.Card import com.stripe.android.model.Token import com.stripe.android.view.CardInputWidget class StripeMainActivity : ReactActivity() { internal var PUBLISHABLE_KEY = "pk_test_b9t1oL9MfKlVGSqOkV3VLjHa00SUeq4B4t" internal var stripe: Stripe? = null internal var mCardInputWidget: CardInputWidget? = null internal var paymentButton: Button? = null internal var amountToPaytV: TextView? = null internal var pb: ProgressBar? = null internal var paymentHandler = PaymentHandler() internal var loggedInUserId: String? = null internal var TAG = StripeMainActivity::class.java.simpleName data class User(val name: String, val age: Int) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_stripe_main) mCardInputWidget = findViewById(R.id.card_input_widget) stripe = Stripe(this@StripeMainActivity, PUBLISHABLE_KEY.toString()) paymentButton = findViewById(R.id.payment_button) // pb = findViewById(R.id.progress_bar) amountToPaytV = findViewById(R.id.amount_topay) var bundle = intent.getBundleExtra(Constants.bundle) var paymentRequest = bundle.getParcelable(Constants.paymentRequest) as PaymentRequest amountToPaytV!!.text = "$" + String.format("%.2f", paymentRequest.amount) paymentButton!!.setOnClickListener { view -> val cardToSave = mCardInputWidget!!.card if (cardToSave != null && paymentRequest.amount != 0f) { doTran(cardToSave, paymentRequest) paymentButton!!.text = "payment initiated" paymentButton!!.isEnabled = false } } } fun doTran(card: Card, paymentRequest: PaymentRequest) { stripe!!.createToken( card, object : TokenCallback { override fun onError(error: Exception) { Toast.makeText(this@StripeMainActivity, "Stripe Token generation was not successful. Please try again. " + ""+error, Toast.LENGTH_LONG) .show() paymentButton!!.text = "Make Payment" paymentButton!!.isEnabled = true } override fun onSuccess(token: Token) { val gson = Gson() paymentRequest.stripeToken = token val paymentJsonStr = gson.toJson(paymentRequest) var url = paymentRequest.paymentUrl; try { PaymentTask(url, paymentJsonStr, paymentHandler).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) } catch (e: Exception) { Toast.makeText(this@StripeMainActivity, "Payment was not successful. Please try again. ", Toast.LENGTH_LONG) .show() paymentButton!!.text = "Make Payment" paymentButton!!.isEnabled = true } } } ) } inner class PaymentHandler : Handler() { override fun handleMessage(msg: Message?) { super.handleMessage(msg) if (msg != null && msg.what == Constants.PAYMENT_SUCCESS_CODE) { Toast.makeText(this@StripeMainActivity, "Payment Successful", Toast.LENGTH_LONG).show() val a = User("anil",36) Log.v(TAG,a.toString()) val gson = Gson() var resultJsonStr = gson.toJson(User("anil",36)) Log.v(TAG,resultJsonStr) val intent = Intent() intent.putExtra(Constants.resultFromStripeNative,resultJsonStr) reactInstanceManager.onActivityResult( this@StripeMainActivity, Constants.STRIPE_ACTIVITY_INVOKE_CODE, Activity.RESULT_OK, intent ) setResult(Activity.RESULT_OK) finish() } else if (msg != null && msg.what == Constants.PAYMENT_FAILURE_CODE) { Toast.makeText(this@StripeMainActivity, "Payment Not Successful", Toast.LENGTH_LONG).show() setResult(Activity.RESULT_CANCELED) finish() } } } }