{"id":25588373,"url":"https://github.com/zarinpal/android-sdk","last_synced_at":"2025-07-24T21:33:27.440Z","repository":{"id":37539867,"uuid":"404282273","full_name":"ZarinPal/Android-SDK","owner":"ZarinPal","description":"ZarinPal Android Client in-App Billing","archived":false,"fork":false,"pushed_at":"2024-01-04T14:16:01.000Z","size":7485,"stargazers_count":11,"open_issues_count":14,"forks_count":9,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-06-30T14:09:14.826Z","etag":null,"topics":["android","android-library","inappbilling","inapppurchase","kotlin","sdk","sdk-android","zarinpal"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZarinPal.png","metadata":{"files":{"readme":"README _JAVA.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-09-08T09:10:50.000Z","updated_at":"2025-05-14T17:33:42.000Z","dependencies_parsed_at":"2025-02-21T08:36:03.575Z","dependency_job_id":"d0a801cd-2fe9-4cbd-b70d-6f2ad3d93b25","html_url":"https://github.com/ZarinPal/Android-SDK","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/ZarinPal/Android-SDK","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZarinPal%2FAndroid-SDK","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZarinPal%2FAndroid-SDK/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZarinPal%2FAndroid-SDK/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZarinPal%2FAndroid-SDK/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZarinPal","download_url":"https://codeload.github.com/ZarinPal/Android-SDK/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZarinPal%2FAndroid-SDK/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266905413,"owners_count":24004144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-library","inappbilling","inapppurchase","kotlin","sdk","sdk-android","zarinpal"],"created_at":"2025-02-21T08:35:43.969Z","updated_at":"2025-07-24T21:33:27.142Z","avatar_url":"https://github.com/ZarinPal.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"ZarinPal In App Billing - Purchase SDK | MPG\n============================================\nZarinPal Purchase SDK Provides payment methods on your Android Application.\n\n\n\nIntroduction\n=============\nZarinPal in-app purchases are the simplest solution to selling digital products or content on Android apps. So many app developers who want to sell digital goods or offer premium membership to users can simply use the it, in-app billing process for smooth and easy checkouts.\n\n\n\u003cp align=\"center\" width=\"100%\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ZarinPal/Android-SDK/master/logo%20%E2%80%93%201.png\" alt=\"sample\" width=\"300\" height=\"100\"/\u003e\n\u003c/p\u003e\n\n\nRequirements\n============\n\n*   Android 5.0 (API level 21) and above\n*   Android Gradle Plugin 3.5.1\n*   Gradle 5.4.1+\n*   AndroidX (as of v11.0.0)\n\nInstallation\n============\n\n**Step 1**\n\nAdd this to your root build.gradle at the end of repositories.\n```gradle\n    allprojects {\n      ext.zarinpalSdkVersion = (LATEST_VERSION_REALEASE) //inform of Releases: https://github.com/ZarinPal/Android-SDK/releases\n      repositories {\n        ...\n        mavenCentral()\n     }\n```    \n\n**Step 2**\n\nAdd the dependency:\n```gradle\n    dependencies {\n      implementation 'com.zarinpal:payment-provider:ext.zarinpalSdkVersion'\n    }\n```    \n    \n\nIf your project and business trusted to ZarinPal, SDK ables to providing **Mobile Payment Gateway** on your App so You should add the **MPG** dependency:\n```gradle\n    dependencies {\n      implementation 'com.zarinpal:payment-provider:ext.zarinpalSdkVersion'\n      implementation 'com.zarinpal:mpg:ext.zarinpalSdkVersion'\n    }\n```    \n\nHow to use\n==========\n\n*   add Permissions in your `Manifest.xml`:\n```xml\n   \u003cuses-permission android:name=\"android.permission.INTERNET\"/\u003e\n   \u003cuses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/\u003e\n```    \n\nInitialize the billing client\n=============================\n\n**Step 1**\n\n* `ZarinPalClientBilling` provides to create the billing client instance:\n```java\n\n        BillingClientStateListener listener = new BillingClientStateListener() {\n            @Override\n            public void onClientSetupFinished(@NotNull ClientState state) {\n                //Observing client states\n\n            }\n\n            @Override\n            public void onClientServiceDisconnected() {\n                Log.v(\"TAG_INAPP\",\"Billing client Disconnected\");\n                //When Service disconnect\n            }\n        };\n\n        ZarinPalBillingClient client = ZarinPalBillingClient.newBuilder(this)\n                .enableShowInvoice()\n                .setListener(listener)\n                .setNightMode(AppCompatDelegate.MODE_NIGHT_YES)\n                .build();\n\n        \n```    \n\n**Step 2**\n\nFor start purchase you need a `Purchase` instance, `Purchase` has 3 type of Payment:\n\n*   as **Payment Request** by `asPaymentRequest()`\n*   as **Authority ID** by `asAuthority()`\n*   as **Sku ID** by `asSku()`\n\nIf you would create payment Authority on Client, You must use `asPayementRequest()`, this method needs below parameters:\n\n**Require Parameters:**\n\n*   Merchant id: An unique ID of your business payment gateway.\n*   Amount: Amount of Purchase.\n*   Callback URL: A valid `URI` or `URL` Address for sending result purchase.\n*   Description: A Content for showing payer.\n\n**Optional Parameters:**\n\n*   Mobile: Valid Mobile number of payer.\n*   Email: Valid Email Address of payer.\n\n```java\n        Purchase purchase = Purchase.newBuilder().asPaymentRequest(\n                \"MERCHANT_ID\",\n                1000L,\n                \"http:\\\\YOUR_SEVER_URL.com\",\n                \"1000IRR Purchase\"\n        ).build();\n```    \n\nMaybe You had `Authority`, here You must use `asAuthority()`\n```java\n        Purchase purchase = Purchase.newBuilder()\n                .asAuthority(\"AUTHORITY_RESOLVED\")\n                .build();\n```   \nfor `Sku` purchase:\n```java\n        Purchase purchase = Purchase.newBuilder()\n                .asSku(\"SKU_ID\") // SKU_ID is an Id that you've generated on ZarinPal panel.\n                .build();\n```\n\n**Step 3**\n\nYou must call `purchase` method to begin flow payment:\n```java\n           client.launchBillingFlow(purchase, new FutureCompletionListener\u003cReceipt\u003e() {\n            @Override\n            public void onComplete(TaskResult\u003cReceipt\u003e task) {\n                if (task.isSuccess()) {\n                    Receipt receipt = task.getSuccess();\n                    Log.v(\"ZP_RECEIPT\", receipt.getTransactionID());\n\n                    //here you can send receipt data to your server\n                    //sentToServer(receipt)\n\n                } else {\n                    task.getFailure().printStackTrace();\n                }\n            }\n        });\n```    \n    \n**Step 4**\n\nFinally if your eligible to have payment process through **MPG** You should adding `usesCleartextTraffic` to application tag in your `Manifest.xml`\n```xml\n     \n          \u003capplication\n            android:name=\"...\"\n            android:usesCleartextTraffic=\"true\"\n            ....\n            \\\u003e\n```    \n\nSKU Query\n=========\n\nThe ZarinPal Library stores the query results in a List of SkuPurchased objects. You can then call `querySkuPurchased` and you appear sku purchased with inforamtion in your view and provide service.\n\n```java\n    List\u003cString\u003e skus = Arrays.asList(\"SKU_ID_000\", \"SKU_ID_001\");\n    SkuQueryParams skuQuery = SkuQueryParams.newBuilder(\"MERCHANT_ID\")\n                .setSkuList(skus)\n                .orderByMobile(\"0935******\")\n                .build();\n            \n            \n    client.querySkuPurchased(skuQuery, new FutureCompletionListener\u003cList\u003cSkuPurchased\u003e\u003e() {\n            @Override\n            public void onComplete(TaskResult\u003cList\u003cSkuPurchased\u003e\u003e task) {\n                if (task.isSuccess()) {\n                    List\u003cSkuPurchased\u003e skuPurchaseList = task.getSuccess();\n                    for (SkuPurchased it : skuPurchaseList) {\n                        Log.v(\"ZP_SKU_PURCHASED\", \"${it.authority} ${it.productId}\");\n                    }\n                } else {\n                    task.getFailure().printStackTrace();\n                }\n            }\n        });\n````\n\nFeatures\n========\n\n**Dark Mode**\n\n```java\n    client.setNightMode(AppCompatDelegate.MODE_NIGHT_YES)\n```    \n\n**Appear Invoice**\n\n```java\n    client.enableShowInvoice()\n```    \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzarinpal%2Fandroid-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzarinpal%2Fandroid-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzarinpal%2Fandroid-sdk/lists"}