App2App integration with android library: Difference between revisions

From Barion Documentation
Jump to navigation Jump to search
m (replaced reference to v2 GetPaymentState with v4 PaymentState)
 
(7 intermediate revisions by one other user not shown)
Line 25: Line 25:


   dependencies {
   dependencies {
       compile(name:'barionlibrary-1.0.2', ext:'aar')
       compile(name:'barionlibrary-1.1.0', ext:'aar')
   }
   }
</source>
</source>
Line 48: Line 48:


====3.2. step - Add redirect scheme====
====3.2. step - Add redirect scheme====
In order to redirect from the Barion application into the integrator application, a redirect scheme is needed. You can choose anything, but it should be unique. In our example, this is '''myredirecturl'''. It is '''IMPORTANT''', that this scheme must be the same as the '''redirectUrl''' property of the [[Payment-Start-v2|Payment/Start]] request. You need to add this scheme in intent-filter into your result activity section.
In order to redirect from the Barion gateway client into the integrator application, a redirect scheme is needed. You can choose anything, but it should be unique. In our example, this is '''myredirecturl'''. This scheme will be given by the '''RedirectUrl  property''' of the [[Payment-Start-v2|Payment/Start]] request. You need to add this scheme in intent-filter into your result activity section.


<source lang="xml">
<source lang="xml">
Line 63: Line 63:
       </intent-filter>
       </intent-filter>
   </activity>
   </activity>
</source>
====3.3. step - Add BarionActivity to your AndroidManifest.xml file====
Add the BarionActivity class from our library to your AndroidManifest.xml file:
<source lang="xml">
  <activity android:name="barion.com.barionlibrary.activities.BarionActivity"/>
</source>
</source>


===4. step - Initiate payment with the library===
===4. step - Initiate payment with the library===
At any point in the mobile application - where the products that you want to pay are available - you should initiate the payment in the Barion System. The Barion Android Library will check the parameters and if anything is wrong, it will return with an error. The possible error codes can be found on [[Barion_Mobil_Library_Hibakódok|this page]].
At any point in the mobile application - where the products that you want to pay are available - you should initiate the payment in the Barion System. The Barion Android Library will check the parameters and if anything is wrong, it will return with an error. The possible error codes can be found on [[Barion_Mobil_Library_Hibakódok|this page]].
You can define the environment of the Barion System, which can be our TEST or PRODUCTION environment.
<source lang="kotlin">
Barion.getInstance().environment = BarionEnvironment.TEST
</source>


To initiate the payment you need to implement a few lines of code:
To initiate the payment you need to implement a few lines of code:
<source lang="java">
<source lang="kotlin">
  ArrayList<BarionProduct> products;
val request = BarionStartPaymentRequest(
  Intent intent = new Intent(getActivity(), BarionActivity.class);
    posKey = "f199e514-9199-40f9-a210-55a0c75be8cc", // the POSKey of the shop
    paymentType = PaymentType.IMMEDIATE,
    guestCheckOut = true,
    fundingSources = listOf("All"),
    paymentRequestId = "12345",
    locale = "hu-HU",
    currency = "EUR",
    transactions = listOf(
        PaymentTransaction(
            posTransactionId = "f192e544-9199-46f9-a240-55a0c75be8cc",
            payee = "[email protected]",
            total = 200,
            comment = "The new App2App Library",
            products = listOf( // list of your products
                Product(
                    name = "The history of money",
                    description = "The evolution of money from the stoneage to Barion",
                    quantity = 1.0,
                    unit = "db",
                    price = 40.0,
                    sKU = "APP2APPDEMO_PENZTORT"
                )
            )
        )
    ),
    redirectUrl = "myredirecturl://"
)


  intent.putExtra(Barion.PRODUCTS, products);
Barion
  intent.putExtra(Barion.PAYMENT_SETTINGS, new PaymentSettingsModel.Builder()
    .getInstance()
      // the POSKey of the shop
    .startPayment(requireContext(), request)
      .posKey("f199e514-9199-40f9-a210-55a0c75be8cc")
      // immediate payment
      .paymentType(PaymentSettingsModel.PaymentTypeEnum.Immediate)
      .guestCheckOut(true)
      // if the debugMode is true the library will communicate with our sandbox environment.
      .debugMode(true)
      .locale("hu-HU")
      .fundingSources(PaymentSettingsModel.FundingSourceTypeEnum.All)
      // this scheme must be the same as in your AndroidManifest.xml file
      .redirectUrl("myredirecturl://")
      .build());
 
  intent.putExtra(Barion.TRANSACTION_SETTINGS, new TransactionModel.Builder()
      .posTransactionId("f192e544-9199-46f9-a240-55a0c75be8cc")
      .payee("[email protected]")
      .total(200)
      .comment("The new App2App Library")
      .build());
 
  startActivityForResult(intent, Barion.REQUEST_CODE);
</source>
</source>




* The product list contain the products that [[Item]] type objects.
* The product list contain the products that [[Product]] type objects.
* The PaymentSettingsModel object contains the settings, you can read about it on the [[Payment-Start-v2|Payment/Start]] page.  
* The PaymentSettingsModel object contains the settings, you can read about it on the [[Payment-Start-v2|Payment/Start]] page.  
* The TransactionModel object contains the settings of the transactions, you can read about it on the [[PaymentTransaction|PaymentTransaction]] page.
* The PaymentTransaction object contains the settings of the transactions, you can read about it on the [[PaymentTransaction|PaymentTransaction]] page.
* If the debugMode is true the library will communicate with our sandbox environment.
* The library will open the gateway web client to the user.
* If the user didn't installed the Barion app on their device, the library will show the webview to the user.


===5. step - Get results===
===5. step - Get results===
The library will return with the results in the onActivityResult method:
The library provides functionality to request the results of a payment.
 
<source lang="kotlin">
Barion
  .getInstance()
  .getPaymentState(request)


<source lang="java">
if (response.errors.isEmpty()) {
  @Override
    // Handle success case
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
} else {
      if (requestCode == Barion.REQUEST_CODE) {
    // Handle error case
        if (resultCode == Activity.RESULT_OK) {
}
            BarionGetPaymentStateResponse response = (BarionGetPaymentStateResponse) data.getSerializableExtra(Barion.BARION_PAYMENT_STATE_RESPONSE);
            if (response != null && getActivity() != null) {
              Intent intent = new Intent(getActivity(), PaymentResultActivity.class);
              intent.putExtra("PaymentState", response);
              startActivity(intent);
              finish();
            }
        } else if (resultCode == Activity.RESULT_CANCELED) {
            ArrayList<BarionError> errors = (ArrayList<BarionError>) data.getSerializableExtra(Barion.ERROR);
            processBarionErrors(errors);
        }
      }
  }
</source>
</source>


If everything went fine you can get every [[Payment-GetPaymentState-v2|information]] about the payment from the response variable. If there was an error you will get it in the errors list.
If everything went fine you can get every [[Payment-PaymentState-v4|information]] about the payment from the response variable. If there was an error you will get it in the errors list.

Latest revision as of 10:16, 25 March 2024

In this case of integration, you don't need to edit your server-side. In your mobile application, you don't have to implement network communication. We have already do it for you. If you use the Barion Android library you have to add a few lines of code to your existing codebase. The disadvantages are, that you have to notify your own server-side about the payments and your mobile app will contain the POSKey of the shop.

It is highly recommended to obfuscate client applications! We recommend using ProGuard or DexGuard.

Downloads, example

You can download the Barion Android Library from Barion's Github page.

The example project can be downloadable from Barion's Github page.

The library contains the necessary models, so you don't need to implement them.

Integration steps

1. step - Add the library to your project

Download the .aar file from Barion's Github page and put it into your libs directory!

2. step - Edit build.gradle file

   repositories {
      flatDir {
         dirs 'libs'
      }
   }

   dependencies {
      compile(name:'barionlibrary-1.1.0', ext:'aar')
   }

3. step - Edit the AndroidManifest.xml file

At first, you need to edit the AndroidManifest.xml file.

3.1. step - Providing internet access

For the communication, your application must have internet access. So add the internet access permission to your AndroidManifest file:

   <?xml version="1.0" encoding="utf-8"?>
   <manifest
      xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.barion.example.app2app.libraryintegration">

         <uses-permission android:name="android.permission.INTERNET" />

         <!-- The rest of your AndroidManifest.xml -->

   </manifest>

3.2. step - Add redirect scheme

In order to redirect from the Barion gateway client into the integrator application, a redirect scheme is needed. You can choose anything, but it should be unique. In our example, this is myredirecturl. This scheme will be given by the RedirectUrl property of the Payment/Start request. You need to add this scheme in intent-filter into your result activity section.

   <activity
      android:name=".activities.PaymentResultActivity"
      android:label="@string/app_name">
      <intent-filter>
         <action android:name="android.intent.action.VIEW" />

         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />

         <data android:scheme="myredirecturl" />
      </intent-filter>
   </activity>

4. step - Initiate payment with the library

At any point in the mobile application - where the products that you want to pay are available - you should initiate the payment in the Barion System. The Barion Android Library will check the parameters and if anything is wrong, it will return with an error. The possible error codes can be found on this page.

You can define the environment of the Barion System, which can be our TEST or PRODUCTION environment.

Barion.getInstance().environment = BarionEnvironment.TEST

To initiate the payment you need to implement a few lines of code:

val request = BarionStartPaymentRequest(
    posKey = "f199e514-9199-40f9-a210-55a0c75be8cc", // the POSKey of the shop
    paymentType = PaymentType.IMMEDIATE,
    guestCheckOut = true,
    fundingSources = listOf("All"),
    paymentRequestId = "12345",
    locale = "hu-HU",
    currency = "EUR",
    transactions = listOf(
        PaymentTransaction(
            posTransactionId = "f192e544-9199-46f9-a240-55a0c75be8cc",
            payee = "[email protected]",
            total = 200,
            comment = "The new App2App Library",
            products = listOf( // list of your products
                Product(
                    name = "The history of money",
                    description = "The evolution of money from the stoneage to Barion",
                    quantity = 1.0,
                    unit = "db",
                    price = 40.0,
                    sKU = "APP2APPDEMO_PENZTORT"
                )
            )
        )
    ),
    redirectUrl = "myredirecturl://"
)

Barion
    .getInstance()
    .startPayment(requireContext(), request)


  • The product list contain the products that Product type objects.
  • The PaymentSettingsModel object contains the settings, you can read about it on the Payment/Start page.
  • The PaymentTransaction object contains the settings of the transactions, you can read about it on the PaymentTransaction page.
  • The library will open the gateway web client to the user.

5. step - Get results

The library provides functionality to request the results of a payment.

Barion
   .getInstance()
   .getPaymentState(request)

if (response.errors.isEmpty()) {
    // Handle success case
} else {
    // Handle error case
}

If everything went fine you can get every information about the payment from the response variable. If there was an error you will get it in the errors list.