# Android SDK Building with an AI agent? Start at https://docs.payme.io/agents.md Legacy SDK, not recommended for new integrations. Integrate PayMe into your Android app with the PayMe Android SDK: build and import the AAR, initialize the SDK, and make sale, subscription, buyer and reporting requests. > **Legacy SDK.** This SDK is no longer recommended for new integrations. It isn't actively updated, it requires your app to collect card details, and it puts your `seller_payme_id` (MPL), a server-side credential, in the app. For new apps, open the [Hosted Payment Page](/payments/hosted-payment-page) in a secure in-app browser (`Custom Tabs` on Android), so card details never pass through your app. You can also offer [Apple Pay](/payments/apple-pay) and [Google Pay](/payments/google-pay). > > How to: [Accept payments in a mobile app](/accepting-payments/checkout-and-in-person/mobile-apps). To get the SDK, ask PayMe Partners (partners@payme.io) for access. ## Getting started ### Build the AAR from sources 1. Open the SDK project and build it. 2. The new AAR is generated automatically at `library/build/outputs/library-release.aar`. 3. Rename the file to `isracard-global-##.aar`, where `##` is the version. ### Import the SDK with Gradle 1. Copy `isracard-global-##.aar` into your project's `libs` folder. 2. Add the folder to the repositories in `build.gradle`, and add the SDK to the dependencies: ```groovy repositories { flatDir { dirs 'libs' } } dependencies { implementation(name:'isracard-global-1.0', ext:'aar') } ``` ## Initialize the SDK Extend your `Application` and initialize the SDK: ```java package com.paymeservice.example; import android.app.Application; import com.paymeservice.android.PayMe; import com.paymeservice.android.model.Settings; import static com.paymeservice.android.model.Settings.Environment.STAGING; public class PayMeApplication extends Application { @Override public void onCreate() { super.onCreate(); // Setting the Android SDK PayMe.initialize(new Settings(/* Your seller_payme_id */, STAGING)); } } ``` `Settings.Environment` sets the environment. The sample uses `STAGING`; ask PayMe Partners for the value to use in production. ## Integrate with the PayMe API Each API request needs the matching request object and a `TransactionListener`. Create sales and read reports from your server, never from the app: `generateSale`, `getFinancialTransactions`, `getSales`, `getStatistics` and `getGraphPoinsts` (the SDK's spelling) run with your MPL. In the app, use only the calls that take the buyer's card: `paySale`, `paySubscription` and `captureBuyer`. ### Generate a sale Prefer [generate-sale](/payments/hosted-payment-page/post-generate-sale) on your server. ```java final GenerateSaleRequest request = new GenerateSaleRequest(); //Sale price - Required request.setSalePrice(Long.parseLong(edtSalePrice.getText().toString())); //Currency request.setSaleCurrency(edtSaleCurrency.getText().toString()); //Installments - Required request.setSaleInstallments(Integer.parseInt(edtSaleInstallments.getText().toString())); //Product name - Required request.setSaleProductName(edtSaleProductName.getText().toString()); //Capture Buyer request.setCaptureBuyer(Boolean.parseBoolean(cbxCaptureBuyer.getText().toString())); //Transaction ID request.setSaleTransactionId(edtSaleTransactionId.getText().toString()); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.generateSale(request, new PayMe.TransactionListener() { @Override public void onSuccess(GenerateSaleResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ``` ### Pay a sale First, create the sale on your server with [generate-sale](/payments/hosted-payment-page/post-generate-sale) and send its `payme_sale_id` to your app. Then create a `PaySaleRequest` and send it: ```java final PaySaleRequest request = new PaySaleRequest(); //Name - Required request.setBuyerName(edtBuyerName.getText().toString()); //Email - Required request.setBuyerEmail(edtEmail.getText().toString()); //Phone request.setBuyerPhone(edtBuyerPhone.getText().toString()); //ID request.setBuyerSocialID(edtSocialId.getText().toString()); //payme_sale_id - Required - From your server request.setPaymeSaleId(/* payme_sale_id */); //Credit Card Number - Required request.setCreditCardNumber(edtCreditCardNumber.getText().toString()); //CreditCard CVV - Required request.setCreditCardCVV(edtCreditCardCvv.getText().toString()); //Credit Card Expiration - Required request.setCreditCardExp(edtCreditCardExp.getText().toString()); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.paySale(request, new PayMe.TransactionListener() { @Override public void onSuccess(PaySaleResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ``` ### Pay a subscription First, create the subscription on your server with [generate-subscription](/payments/subscriptions/post-generate-subscription) and send its `sub_payme_id` to your app. Then create a `PaySubscriptionRequest` and send it: ```java PaySubscriptionRequest request = new PaySubscriptionRequest(); //Name - Required request.setBuyerName(edtBuyerName.getText().toString()); //Email - Required request.setBuyerEmail(edtEmail.getText().toString()); //ID request.setBuyerSocialID(edtSocialId.getText().toString()); //sub_payme_id - Required - From your server request.setSubPaymeId(/* sub_payme_id */); //Credit Card Number - Required request.setCreditCardNumber(edtCreditCardNumber.getText().toString()); //CreditCard CVV - Required request.setCreditCardCVV(edtCreditCardCvv.getText().toString()); //Credit Card Expiration - Required request.setCreditCardExp(edtCreditCardExp.getText().toString()); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.paySubscription(request, new PayMe.TransactionListener() { @Override public void onSuccess(PaySubscriptionResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ``` ### Capture a buyer token ```java CaptureBuyerRequest request = new CaptureBuyerRequest(); //Name - Required request.setBuyerName(edtBuyerName.getText().toString()); //Phone - Required request.setBuyerPhone(edtPhone.getText().toString()); //Email - Required request.setBuyerEmail(edtEmail.getText().toString()); //ID request.setBuyerSocialID(edtSocialId.getText().toString()); //Permanent request.setBuyerIsPermanent(editIsPermanent.isChecked()); //Credit Card Number - Required request.setCreditCardNumber(edtCreditCardNumber.getText().toString()); //CreditCard CVV - Required request.setCreditCardCVV(edtCreditCardCvv.getText().toString()); //Credit Card Expiration - Required request.setCreditCardExp(edtCreditCardExp.getText().toString()); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.captureBuyer(request, new PayMe.TransactionListener() { @Override public void onSuccess(CaptureBuyerResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ``` ### List financial transactions Run this on your server instead: see [get-transactions](/payments/query-apis/post-get-transactions). ```java GetFinancialTransactionsRequest request = new GetFinancialTransactionsRequest(); //Seller ID request.setSellerId(edtSellerId.getText().toString()); //Transaction created request.setTranCreated(edtTranCreated.getText().toString()); //Transaction created max request.setTranCreatedMax(edtTranCreatedMax.getText().toString()); //Transaction created min request.setTranCreatedMin(edtTranCreatedMin.getText().toString()); //Transaction currency request.setTranCurrency(edtTranCurrency.getText().toString()); //Transaction total request.setTranTotal(Long.parseLong(edtTranTotal.getText().toString())); //Transaction type request.setTranType(Integer.parseInt(edtTranType.getText().toString())); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.getFinancialTransactions(request, new PayMe.TransactionListener() { @Override public void onSuccess(GetFinancialTransactionsResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ``` ### List sales Run this on your server instead: see [get-sales](/payments/query-apis/post-get-sales). ```java GetSalesRequest request = new GetSalesRequest(); //Seller ID request.setSellerId(edtSellerId.getText().toString()); //Sale Payme Code request.setSalePaymeCode(Long.parseLong(edtSalePaymeCode.getText().toString())); //Sale Payme ID request.setSalePaymeId(edtSalePaymeId.getText().toString()); //Transaction ID request.setTransactionId(edtTransactionId.getText().toString()); //Sale Created request.setSaleCreated(edtSaleCreated.getText().toString()); //Sale Created Min request.setSaleCreatedMin(edtSaleCreatedMin.getText().toString()); //Sale Created Max request.setSaleCreatedMax(edtSaleCreatedMax.getText().toString()); //Sale Status request.setSaleStatus(edtSaleStatus.getText().toString()); //Sale Price request.setSalePrice(Long.parseLong(edtSalePrice.getText().toString())); //Sale Currency request.setSaleCurrency(edtSaleCurrency.getText().toString()); //Sale Auth Number request.setSaleAuthNumber(edtSaleAuthNumber.getText().toString()); //Buyer Card Mask request.setBuyerCardMask(edtBuyerCardMask.getText().toString()); //Buyer Card Last Four Digits request.setBuyerCardLastFourDigits(edtBuyerCardLastFourDigits.getText().toString()); //Buyer Name request.setBuyerName(edtBuyerName.getText().toString()); //Buyer Email request.setBuyerEmail(edtBuyerEmail.getText().toString()); //Buyer Phone request.setBuyerPhone(edtBuyerPhone.getText().toString()); //Buyer Social Id request.setBuyerSocialId(edtBuyerSocialId.getText().toString()); //Buyer Card is Foreign request.setBuyerCardisForeign(chxBuyerCardIsForeign.isChecked()); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.getSales(request, new PayMe.TransactionListener() { @Override public void onSuccess(GetSalesResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ``` ### Get statistics ```java GetStatisticsRequest request = new GetStatisticsRequest(); //Time Frame - Required request.setTimeFrame(edtTimeFrame.getText().toString()); //Date Format - Required request.setDateFormat(edtDateFormat.getText().toString()); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.getStatistics(request, new PayMe.TransactionListener() { @Override public void onSuccess(GetStatisticsResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ``` ### Get graph points ```java GetGraphPointsRequest request = new GetGraphPointsRequest(); //Time Frame - Required request.setTimeFrame(edtTimeFrame.getText().toString()); //Date Format - Required request.setDateFormat(edtDateFormat.getText().toString()); if (!isValid(request)) { //Stop execution if request is not valid return; } PayMe.getGraphPoinsts(request, new PayMe.TransactionListener() { @Override public void onSuccess(GetGraphPointsResponse response) { //Handle success request } @Override public void onFailed(Exception exception, PayMeError error) { //Handle failed request } }); ```