{"id":23649491,"url":"https://github.com/payneteasy/reader-example","last_synced_at":"2025-09-01T01:31:07.306Z","repository":{"id":24086203,"uuid":"27473210","full_name":"payneteasy/reader-example","owner":"payneteasy","description":"Example application for mPos reader SDK, Miura (Shuttle, M010) and Spire (spm2, spm20)","archived":false,"fork":false,"pushed_at":"2022-07-07T21:03:38.000Z","size":5794,"stargazers_count":14,"open_issues_count":15,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-02T06:05:32.310Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","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/payneteasy.png","metadata":{"files":{"readme":"README.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}},"created_at":"2014-12-03T06:35:19.000Z","updated_at":"2023-08-01T11:58:10.000Z","dependencies_parsed_at":"2022-08-22T09:50:15.170Z","dependency_job_id":null,"html_url":"https://github.com/payneteasy/reader-example","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/payneteasy/reader-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payneteasy%2Freader-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payneteasy%2Freader-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payneteasy%2Freader-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payneteasy%2Freader-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/payneteasy","download_url":"https://codeload.github.com/payneteasy/reader-example/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/payneteasy%2Freader-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273064107,"owners_count":25039259,"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-08-31T02:00:09.071Z","response_time":79,"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":[],"created_at":"2024-12-28T15:38:30.438Z","updated_at":"2025-09-01T01:31:06.625Z","avatar_url":"https://github.com/payneteasy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"mPOS SDK for Android and Java\n=============================\n\n[![Build Status](https://travis-ci.org/payneteasy/reader-example.svg?branch=master)](https://travis-ci.org/payneteasy/reader-example)\n\nSDK provides fast, easy integration with mPOS readers in mobile apps.\n\nFeatures\n--------\n* Runs both on Android and Java\n* MSR, EMV Contact, EMV Contactless transactions\n* Signature or PIN based transactions\n* Remote key injection\n* Remote firmware update\n* Remote mPOS configuration\n* Certified with OpenWay. The first mobile POS Chip\u0026PIN solution in Russia - http://www.openwaygroup.com/news_card.jsp?dcion=908\u0026rgn=1\u0026lng=1\n* Custom LCD messages for all stages (Miura only)\n* Unified API for all readers\n* Implemented PaynetEasy Server API https://payneteasy.com/support/documents/introduction-mpos-integration.html\n* Many transaction types: sale, preauthorization, capture, cancel, reversal, partial reversal and etc.\n\nSupported Readers\n-----------------\n### Production\n\nAll terminals support remote configuration and firmware update.\n\n* Miura Shutle (M006), Miura M007, Miura M010. Supports MSR, Contact, Contactless transactions. With or without PIN. Remote keys injection, remote configuration and remote MPI and OS update\n* Spire Spm2\n* Verifone Vx820 (usb, rs232, ethernet)\n* PAX SP30 (usb, rs232, ethernet)\n* Telpo TPS900, Кассатка Мини\n\n### Deprecated from the 1st of January 2015 \n* GD Seed: Integrated with the official SDK \n* GD Seed: Own SDK. With memory and performance optimization.\n* ID Tech Unimag II: Integrated with the official SDK \n* ID Tech Unimag II: Own SDK. Memory and performance optimization. Extends supported phone models.\n* Bluebamboo P25\n\n### Evaluated\n* Datecs DRD50, DRD10\n* Datecs MPED400, Bluepad 50\n* Wizar POS\n* BBPOS\n\n### Only for integration or test\n* TEST - emulates Miura Shuttle events. You can use it on emulators.\n\n\nInstructions\n------------\n\nThe SDK includes a maven repository - http://paynet-qa.clubber.me/reader/maven/\n\nWe'll walk you through integration and usage.\n\n### Sign up for PaynetEasy account \n\n* You'll need to contact to payneteasy.com for merchant login.\n\n### Requirements\n\n*   Supports target deployment of Android from 2.2.\n*   Or Oracle JVM (tested on 1.8)\n\n### Setup maven\n\nAdd the repository to your pom.xml\n```xml\n\u003crepository\u003e\n    id\u003ereader-repo\u003c/id\u003e\n    \u003cname\u003ereader repo\u003c/name\u003e\n    \u003curl\u003ehttp://paynet-qa.clubber.me/reader/maven\u003c/url\u003e\n\u003c/repository\u003e\n```\n\n### Setup gradle\n\nAdd to your repositories section\n```\nrepositories {\n...\n    maven { url \"https://jitpack.io\" }\n    maven { url \"http://paynet-qa.clubber.me/reader/maven\" }\n...\n}\n```\n\nAdd to your dependencies \n```\ndependencies {\n...\n    def readerVersion = // check the latest version at https://github.com/payneteasy/reader-example/wiki/Changelog\n    compile 'com.payneteasy.android.reader:api:' + readerVersion\n    compile ('com.payneteasy.android.reader:lib:' + readerVersion)\n\n    compile 'com.payneteasy.android.reader.readers:readers-common-bluetooth:' + readerVersion\n    compile ('com.payneteasy.android.reader.readers:readers-miura:' + readerVersion) {\n        exclude group:'junit', module:'junit'\n    }\n... \n}\n```\nYou can find the full gradle example at https://github.com/payneteasy/reader-example-gradle\n\n### For Bluetooth Readers (Android)\n\nAdd to your AndroidManifest.xml\n```xml\n    \u003cuses-permission android:name=\"android.permission.BLUETOOTH\"/\u003e\n    \u003cuses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/\u003e\n```\n\n### For USB terminals (Android)\n\nAdd new file res/xml/device_filter.xml\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cresources\u003e\n\n    \u003c!-- 0x1234 / 0x0101  PAX / S80 --\u003e\n    \u003cusb-device vendor-id=\"4660\" product-id=\"257\" class=\"255\" subclass=\"0\" protocol=\"0\"/\u003e\n\n    \u003c!-- 0x11CA / 0x0219  VeriFone Inc / Trident USB Device 1.1 / bInterfaceClass = 10 CDC Data --\u003e\n    \u003cusb-device vendor-id=\"4554\" product-id=\"537\" class=\"10\" subclass=\"0\" protocol=\"0\"/\u003e\n\n\u003c/resources\u003e\n```\n\nAdd to your AndroidManifest.xml to any activity element:\n```xml\n    \u003cintent-filter\u003e\n        \u003caction android:name=\"android.hardware.usb.action.USB_DEVICE_ATTACHED\" /\u003e\n    \u003c/intent-filter\u003e\n    \u003cmeta-data  android:name=\"android.hardware.usb.action.USB_DEVICE_ATTACHED\" android:resource=\"@xml/device_filter\" /\u003e\n```\n\nAdd to the activity:\n```java\npublic class MainActivity extends Activity {\n\n    private final UsbPermissionResolver usbPermissionResolver = new UsbPermissionResolver();\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        ...\n        usbPermissionResolver.checkPermission(getIntent(), this);\n    }\n\n    @Override\n    protected void onNewIntent(Intent intent) {\n        super.onNewIntent(intent);\n        usbPermissionResolver.checkPermission(intent, this);\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        usbPermissionResolver.unregister(this);\n    }\n    \n    ...\n    \n}\n```\n\nPlease see this commit for more information https://github.com/payneteasy/reader-example-gradle/commit/2aa02c47f38cef4f3a673e98fc5d5ecb98720656\n\n### For Miura (Java)\n\nPlease see the example app-2 how to run and assemble the application for Miura Readers to run on JVM.\n\napp-3-webstart shows how to run the application from a browser via Java WebStart:\n* Linux https://www.youtube.com/watch?v=rLSx3SrkMqA\n* Mac OS X - https://www.youtube.com/watch?v=OgdUfHqBvmI\n* Windows - https://www.youtube.com/watch?v=I6PPO-j9KSk\n\n\n### Sample Code\n\nImplement the IReaderPresenter interface\n```java\n\n    @Override\n    public ProcessingContinuation onCard(BankCard bankCard) {\n\n        setStatus(\"onCard: %s\", bankCard);\n\n        return ProcessingContinuation.Builder\n                .startSaleOnline()\n                .processingBaseUrl  ( Config.SERVER_BASE_URL)\n                .merchantLogin      ( Config.MERCHANT_LOGIN )\n                .merchantControlKey ( Config.MERCHANT_KEY   )\n                .merchantEndPointId ( Config.END_POINT_ID   )\n                .orderDescription   ( \"test description\"    )\n                .orderInvoiceNumber ( \"invoice-\"+System.currentTimeMillis())\n                .orderMerchantData  ( \"custom merchant data for a internal use\")\n                .customerPhone      ( \"+7 499 918-64-41\"    )\n                .customerEmail      ( \"info@payneteasy.com\" )\n                .customerCountry    ( \"RUS\"                 )\n                .listener(new IProcessingStageListener() {\n                    @Override\n                    public void onStageChanged(ProcessingStageEvent aEvent) {\n                        setStatus(\"processing: %s\", aEvent);\n                    }\n                })\n                .build();\n\n    }\n\n    @Override\n    public void onReaderSerialNumber(String aKsn) {\n        setStatus(\"onReaderSerialNumber: %s\", aKsn);\n    }\n\n    @Override\n    public void cardReaderStateChanged(CardReaderEvent cardReaderEvent) {\n        setStatus(\"cardReaderStateChanged: %s\", cardReaderEvent);\n    }\n\n    @Override\n    public void onCardError(CardError cardError) {\n        setStatus(\"onCardError: %s\", cardError);\n    }\n\n    @Override\n    public void onReaderNotSupported(CardReaderProblem aProblem) {\n        setStatus(\"onReaderNotSupported: %s\", aProblem);\n    }\n\n    @Override\n    public void onAudioData(short[] shorts, int i) {\n        // for visualization\n    }\n\n    @Override\n    public ConfigurationContinuation onConfiguration() {\n        return new ConfigurationContinuation.Builder()\n                .configDir              ( new File(activity.getFilesDir(), \"miura-config\"))\n                .configurationBaseUrl   ( Config.SERVER_CONFIG_URL  )\n                .merchantLogin          ( Config.MERCHANT_LOGIN     )\n                .merchantControlKey     ( Config.MERCHANT_KEY       )\n                .merchantEndPointId     ( Config.END_POINT_ID       )\n                .build();\n    }\n```\n\nNote: Fill the Config.MERCHANT_LOGIN, Config.MERCHANT_KEY, Config.END_POINT_ID with your own values.\n\nStarts the Reader Manager\n\n```java\nCardReaderInfo cardReader = CardReaderInfo.TEST;\nBigDecimal amount = new BigDecimal(1);\nString currency = \"RUB\";\n\nSimpleCardReaderPresenter presenter = new SimpleCardReaderPresenter(this, statusView);\ncardReaderManager = CardReaderFactory.findManager(this, cardReader, presenter, amount, currency, null);\n```\n\nDeal with cardReaderManager:\n\n* ICardReaderManager.startSaleSession() starts a sale session\n* ICardReaderManager.stopSession() - stops a session and releases resources\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpayneteasy%2Freader-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpayneteasy%2Freader-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpayneteasy%2Freader-example/lists"}