Add PayPal Payment integration in Open Event Attendee Application
The open event attendee is an android app which allows users to discover events happening around the world using the Open Event Platform. It consumes the APIs of the open event server to get a list of available events and can get detailed information about them.
PayPal is a very common method to pay for anything throughout the world. It is a highly popular platform and it’s only right that there should be an option to pay through PayPal on Eventyay attendee for tickets. This blog will explain how and why I added PayPal payment feature in the application with a sandbox account.
- Why PayPal?
- Get API key for a sandbox account
- Integration with Android Studio
- Conclusion
- Resources
Let’s analyze every step in detail.
Advantages of using PayPal Payment integration
- Provide UI to gather payment information from the user
- Get your credentials, which identify your PayPal account as the payment receiver. Specifically, obtain a client ID and secret.
- Returns a proof of payment to your app.
- Provides the user their goods or services.
Setup Sandbox account and get the API key
Go to https://developer.paypal.com/ and sign up for a developer account:
After Sign up, go to the dashboard and create an app:
Now in app credentials go to sandbox accounts. Here you can find your API key.
Now, Create a new sandbox account with entering some amount of money for testing purposes:
PayPal SDK integration in the application
Add PayPal SDK in build.gradle dependencies:
//PayPal
compile 'com.paypal.sdk:paypal-android-sdk:2.16.0'
Store the API key in the android manifest file:
<meta-data
android:name="com.paypal.android.API_KEY"
android:value="${PAYPAL_CLIENT_ID}"/>
Get the API key in the fragment where PayPal payment is required:
private lateinit var PAYPAL_API_KEY: String
PAYPAL_API_KEY = activity?.packageManager?.getApplicati<meta-data
android:name="com.paypal.android.API_KEY"
android:value="${PAYPAL_CLIENT_ID}"/>onInfo(activity?.packageName, PackageManager.GET_META_DATA)
?.metaData?.getString(PAYPAL_KEY).toString()
Start PayPal services on create view:
val payPalConfiguration = PayPalConfiguration()
.environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
.clientId(PAYPAL_API_KEY)val intent = Intent(context, PaymentActivity::class.java)intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, payPalConfiguration)activity?.startService(intent)
Now start the Payment conditionally with same intent:
val payment = PayPalPayment(BigDecimal(amount.toString()), "USD", "Pay for tickets", PayPalPayment.PAYMENT_INTENT_SALE)
intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment)
startActivityForResult(intent, PAYPAL_REQUEST_CODE)
Handle the result after payment is done:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == PAYPAL_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
val paymentConfirmation = data?.getParcelableExtra<PaymentConfirmation>(PaymentActivity.EXTRA_RESULT_CONFIRMATION)
if (paymentConfirmation != null) {
val paymentInfo = paymentConfirmation.toJSONObject()
val tokenId = paymentInfo.getJSONObject("response").getString("id")
Timber.d(paymentInfo.toString(4))
// Send the token to server
val charge = Charge(attendeeViewModel.getId().toInt(), tokenId, null)
attendeeViewModel.completeOrder(charge)
}
} else if (resultCode == Activity.RESULT_CANCELED)
Toast.makeText(context, "Payment canceled!", Toast.LENGTH_SHORT).show()
else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID)
Toast.makeText(context, "Invalid Payment Configuration", Toast.LENGTH_SHORT).show()
}
}
GIF
In a nutshell
With almost 250 million users worldwide, PayPal is an extremely popular platform for monetary transactions and it’s quite essential that every application an option to use it. Given the nature of Eventyay attendee and its pan-world appeal, I have added PayPal as a payment system for tickets to any event.
Resources
- PayPal Android SDK guide: PayPal Android SDK
- PayPal SDK repo: PayPal-Android-SDK
Tags
PayPal, Android, Payments, FOSSASIA, GSoC, AndroidPayments, Kotlin