Last updated on March 13th, 2020 at 12:04 pm
Please check this latest post for PayPal integration in Android Application.
PayPal is mostly used payment gateway for shopping. In this post i explain how to implement Paypal in your android application. Before we start creating we need to setup testing account on Paypal and once we done we change our testing account to actual account.
Step 1. Go to https://developer.paypal.com/ and create new app and get your secret keys.
Step 2. Now create a two account one for Business (merchant account) and second for Personal (buyer account).
PayPal integration in Android
Step 3. Create new application in your Android studio
Step 4. Download PayPalAndroidSDK-2.9.11.jar find on github project.
Step 5. Now add this jar file in your lib folder and add as dependencies on you build.gradle
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' compile files('libs/PayPalAndroidSDK-2.9.11.jar') }
Step 6. Now we need to make some required entry in our manifest.xml as show below code snippet.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.trinitytutspaypal"> <!-- for card.io card scanning --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <!-- for most things, including card.io & paypal --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.paypal.android.sdk.payments.PayPalService" android:exported="false" /> <activity android:name="com.paypal.android.sdk.payments.PaymentActivity" /> <activity android:name="com.paypal.android.sdk.payments.LoginActivity" /> <activity android:name="com.paypal.android.sdk.payments.PaymentMethodActivity" /> <activity android:name="com.paypal.android.sdk.payments.PaymentConfirmActivity" /> <activity android:name="io.card.payment.CardIOActivity" android:configChanges="keyboardHidden|orientation" /> <activity android:name="io.card.payment.DataEntryActivity" /> </application> </manifest>
Step 7. Now we need to add button to launch Paypal gateway in our app, so u need to add button in your layout file.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10sp" tools:context=".MainActivity"> <Button android:id="@+id/payPal" android:text="@string/hello_world" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#1565C0" android:textColor="#fff" android:textSize="16sp" /> </LinearLayout>
Step 8. Now open your Layout Java Class where we add background coding and send and get response from paypal
package com.trinitytutspaypal; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.paypal.android.sdk.payments.PayPalConfiguration; import com.paypal.android.sdk.payments.PayPalPayment; import com.paypal.android.sdk.payments.PayPalService; import com.paypal.android.sdk.payments.PaymentActivity; import com.paypal.android.sdk.payments.PaymentConfirmation; import org.json.JSONException; import java.math.BigDecimal; /* Aneh Thakur */ public class MainActivity extends ActionBarActivity { private static final String CONFIG_ENVIRONMENT = PayPalConfiguration.ENVIRONMENT_NO_NETWORK; // note that these credentials will differ between live & sandbox environments. private static final String CONFIG_CLIENT_ID = "your paypal id"; private static final int REQUEST_CODE_PAYMENT = 1; private static PayPalConfiguration config = new PayPalConfiguration() .environment(CONFIG_ENVIRONMENT) .clientId(CONFIG_CLIENT_ID); Button payPal; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this, PayPalService.class); intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config); startService(intent); payPal = (Button) findViewById(R.id.payPal); payPal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onBuyPressed(); } }); } public void onBuyPressed() { PayPalPayment thingToBuy = getThingToBuy(PayPalPayment.PAYMENT_INTENT_SALE); Intent intent = new Intent(MainActivity.this, PaymentActivity.class); intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config); intent.putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy); startActivityForResult(intent, REQUEST_CODE_PAYMENT); } private PayPalPayment getThingToBuy(String paymentIntent) { return new PayPalPayment(new BigDecimal("1.75"), "USD", "sample item", paymentIntent); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_PAYMENT) { if (resultCode == Activity.RESULT_OK) { PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION); if (confirm != null) { try { Log.e("Show", confirm.toJSONObject().toString(4)); Log.e("Show", confirm.getPayment().toJSONObject().toString(4)); /** * TODO: send 'confirm' (and possibly confirm.getPayment() to your server for verification */ Toast.makeText(getApplicationContext(), "PaymentConfirmation info received" + " from PayPal", Toast.LENGTH_LONG).show(); } catch (JSONException e) { Toast.makeText(getApplicationContext(), "an extremely unlikely failure" + " occurred:", Toast.LENGTH_LONG).show(); } } } else if (resultCode == Activity.RESULT_CANCELED) { Toast.makeText(getApplicationContext(), "The user canceled.", Toast.LENGTH_LONG).show(); } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) { Toast.makeText(getApplicationContext(), "An invalid Payment or PayPalConfiguration" + " was submitted. Please see the docs.", Toast.LENGTH_LONG).show(); } } } @Override public void onDestroy() { // Stop service when done stopService(new Intent(this, PayPalService.class)); super.onDestroy(); } }
Above code is very simple most of work already done by Paypal you just need to setup Paypal configure your key’s in above code set amount and handel response from Paypal one you get your transaction complete.
Response from Paypal
Now when you run this app make payment from your testing account you will get response
Data we send to Paypal server
{ "short_description": "sample item", "amount": "1.75", "intent": "sale", "currency_code": "USD" }
In response we get
{ "response": { "state": "approved", "id": "PAY-6PU626847B294842SKPEWXHY", "create_time": "2014-07-18T18:46:55Z", "intent": "sale" }, "client": { "platform": "Android", "paypal_sdk_version": "2.9.11", "product_name": "PayPal-Android-SDK", "environment": "mock" }, "response_type": "payment" }
That’s it, now if you want to upload your response to your server to save transaction ID etc. you can upload this to your server. To learn how to upload data to server please read this post.
Thank you, Hope this help someone 🙂