{ "info": { "author": "Rex Low", "author_email": "rex@revenuemonster.my", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "RM-API-SDK-Python\n=================\n\n|image0| |image1| |image2|\n\nThis is an Python SDK that maps some of the RESTful methods of Open API\nthat are documented at `Revenue Monster Open API\nDocumentation `__.\n\nGetting Started\n---------------\n\nInstallation\n~~~~~~~~~~~~\n\n::\n\n pip3 install rmsdk\n\nPrerequisite\n~~~~~~~~~~~~\n\nBefore using the SDK, users must obtain credentials from merchant portal\nfirst. Click\n`here `__\nfor tutorial.\n\nSupported APIs\n--------------\n\n- Client Credentials (Authentication)\n\n - `Generate Client Credentials <#generate-client-credentials>`__\n - `Generate Refresh Token <#generate-refresh-token>`__\n\n- Merchant Related APIs\n\n - `Get Merchant Profile <#get-merchant-profile>`__\n - `Get Merchant Subscriptions <#get-merchant-subscriptions>`__\n\n- Store\n\n - `Get Store List <#get-store-list>`__\n - `Get Store By ID <#get-store-by-id>`__\n - `Create Store <#create-store>`__\n - `Update Store <#update-store>`__\n - `Delete Store <#delete-store>`__\n\n- User\n\n - `Get User Profile <#get-user-profile>`__\n\n- Payment (Quickpay QR)\n\n - `QuickPay <#quickpay>`__\n - `Refund <#refund>`__\n - `Reverse <#reverse>`__\n - `Get All Transactions <#get-all-transactions>`__\n - `Get Transaction By ID <#get-transaction-by-id>`__\n - `Get Transaction By Order ID <#get-transaction-by-order-id>`__\n - `Get Daily Settlement Report <#get-daily-settlement-report>`__\n\n- Payment (Transaction QR)\n\n - `Create Transaction <#create-transaction>`__\n - `Get Transaction <#get-transaction>`__\n - `Get Transaction By Code <#get-transaction-by-code>`__\n - `Get List of Transactions By\n Code <#get-list-of-transaction-by-code>`__\n\n- Loyalty\n\n - `Give Loyalty Point <#give-loyalty-point>`__\n - `Get Loyalty Member <#get-loyalty-member>`__\n - `Get List of Loyalty Members <#get-list-of-loyalty-members>`__\n - `Get Point History <#get-point-history>`__\n\n- Voucher\n\n - `Issue Voucher <#issue-voucher>`__\n - `Void Voucher <#void-voucher>`__\n - `Get Voucher By Code <#get-voucher-by-code>`__\n - `Get Voucher Batches <#get-voucher-batches>`__\n - `Get Voucher Batches By Batch\n Key <#get-voucher-batches-by-batch-key>`__\n\nUsage\n-----\n\nThis section explains the basic usage of the SDK. Detail usage for\nindividual modules are prepared in the\n`examples `__\nfolder.\n\nA ``dictionary`` that contains ``clientID``, ``clientSecret``,\n``environment`` and ``privateKey`` (path to private key) is expected to\npassed in as argument. An object of the ``RMSDK`` class will be\ninstantiated. All modules covered in this SDK will be available under\nthe instantiated object.\n\nFor instance, to use the store module, simply,\n\n::\n\n response = client.module.methodName(*args)\n\nAuthentication\n--------------\n\nAuthenticate SDK\n~~~~~~~~~~~~~~~~\n\n::\n\n from rmsdk import RMSDK\n\n client = RMSDK(configs={\n \"environment\": \"sandbox\", # or production\n \"clientID\": \"client-id\",\n \"clientSecret\": \"client-secret\",\n \"privateKey\": \"path-to-private-key\"\n })\n\n accessToken, refreshToken = client.accessToken, client.refreshToken\n\nGenerate Client Credentials\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo get refresh token and access token(expired after 2 hours) with using\nprovided clientID and clientSecret.\n\n::\n\n client = Auth({\n \"environment\": \"sandbox\", # or production\n \"clientID\": \"client-id\",\n \"clientSecret\": \"client-secret\",\n \"privateKey\": \"path-to-private-key\"\n })\n\n accessToken, refreshToken = client.clientCredentials()\n\nGenerate Refresh Token\n~~~~~~~~~~~~~~~~~~~~~~\n\nTo get new access token(expired after 2 hours) with using provided\nclientId and clientSecret (recommended to schedule to run this fucntion\non every less than 2 hours) in order to avoid expired access token\nerror.\n\n::\n\n accessToken, refreshToken = client.getRefreshToken(refreshToken)\n\nMerchant\n--------\n\nGet Merchant Profile\n~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.merchant.getMerchantProfile(accessToken)\n\nGet Merchant Subscriptions\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.merchant.getMerchantSubcriptions(accessToken)\n\nStore\n-----\n\nGet Store List\n~~~~~~~~~~~~~~\n\n::\n\n result = client.store.getStores(accessToken)\n\nGet Store By ID\n~~~~~~~~~~~~~~~\n\n::\n\n result = client.store.getStoreByID(accessToken, storeID)\n\nCreate Store\n~~~~~~~~~~~~\n\n::\n\n result = client.store.createStore(accessToken, {\n \"name\": \"Test store\",\n \"addressLine1\": \"Earth\",\n \"addressLine2\": \"Mars\",\n \"postCode\": \"10001\",\n \"city\": \"Petaling Jaya\",\n \"state\": \"Selangor\",\n \"country\": \"Malaysia\",\n \"countryCode\": \"60\",\n \"phoneNumber\": \"377334080\"\n })\n\nUpdate Store\n~~~~~~~~~~~~\n\n::\n\n result = client.store.updateStore(accessToken, storeID, {\n \"name\": \"Test store\",\n \"addressLine1\": \"Earth\",\n \"addressLine2\": \"Mars\",\n \"postCode\": \"10001\",\n \"city\": \"Petaling Jaya\",\n \"state\": \"Selangor\",\n \"country\": \"Malaysia\",\n \"countryCode\": \"60\",\n \"phoneNumber\": \"377334080\"\n })\n\nDelete Store\n~~~~~~~~~~~~\n\n::\n\n result = client.store.deleteStore(accessToken, storeID)\n\nUser\n----\n\nGet User Profile\n~~~~~~~~~~~~~~~~\n\n::\n\n result = client.user.getUserProfile(accessToken)\n\nPayment (Quickpay QR)\n---------------------\n\nQuickPay\n~~~~~~~~\n\n::\n\n result = client.quickPay.quickPay(accessToken, {\n \"authCode\": \"1234567890\",\n \"order\": {\n \"amount\": 100,\n \"currencyType\":\"MYR\",\n \"id\":\"1312331232\",\n \"title\":\"title\",\n \"detail\":\"desc\",\n \"additonalData\":\"API Test\"\n },\n \"ipAddress\": \"8.8.8.8\",\n \"terminalId\": \"19382734937293999\",\n \"storeId\": \"6170506694335521334\"\n })\n\nRefund\n~~~~~~\n\n::\n\n result = client.quickPay.refund(accessToken, {\n \"transactionId\": \"190109042809010428940037\",\n \"refund\": {\n \"type\": \"FULL\",\n \"currencyType\": \"MYR\",\n \"amount\": 100,\n },\n \"reason\": \"test\"\n })\n\nReverse\n~~~~~~~\n\n::\n\n result = client.quickPay.reverse(accessToken, {\n \"orderId\": \"111222333\"\n })\n\nGet All Transactions\n~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.quickPay.getAllTransactions(accessToken)\n\nGet Transaction By ID\n~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.quickPay.getTransactionByID(accessToken, transactionID)\n\nGet Transaction By Order ID\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.quickPay.getTransactionByOrder(accessToken, orderID)\n\nGet Daily Settlement Report\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.quickPay.dailySettlementReport(accessToken, {\n \"date\": \"2019-01-09\",\n \"method\": \"WECHATPAY\",\n \"region\": \"MALAYSIA\",\n \"sequence\": 1\n })\n\nPayment (Transaction QR)\n------------------------\n\nCreate Transaction\n~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.transaction.createTransaction(accessToken, {\n \"amount\": 100,\n \"currencyType\": \"MYR\",\n \"expiry\": {\n \"type\": \"PERMANENT\"\n },\n \"isPreFillAmount\": True,\n \"method\": ['WECHATPAY'],\n \"order\": {\n \"details\": \"Test\",\n \"title\": \"Title\"\n },\n \"redirectUrl\": 'https://www.revenuemonster.com',\n \"storeId\": '1981039839353524638',\n \"type\": 'DYNAMIC',\n })\n\nGet Transaction\n~~~~~~~~~~~~~~~\n\n::\n\n result = client.transaction.getTransaction(accessToken)\n\nGet Transaction By Code\n~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.transaction.getTransactionByCode(accessToken, qrCode)\n\nGet List of Transactions By Code\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.transaction.getTransactionByCode(accessToken, qrCode)\n\nLoyalty\n-------\n\nGive Loyalty Point\n~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.loyalty.giveLoyaltyPoint(accessToken, {\n \"point\": 100,\n \"type\": \"ID\",\n \"memberId\": \"7765269777796630408\",\n \"countryCode\": \"60\",\n \"phoneNumber\": \"172826990\"\n })\n\nGet Loyalty Member\n~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.loyalty.getLoyaltyMember(accessToken, memberID)\n\nGet List of Loyalty Members\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.loyalty.getLoyaltyMembers(accessToken)\n\nGet Point History\n~~~~~~~~~~~~~~~~~\n\nGet Loyalty point history of a member\n\n::\n\n result = client.loyalty.getLoyaltyMemberPointHistory(accessToken, memberID)\n\nVoucher\n-------\n\nIssue Voucher\n~~~~~~~~~~~~~\n\n::\n\n result = client.voucher.issueVoucher(accessToken, batchKey)\n\nVoid Voucher\n~~~~~~~~~~~~\n\n::\n\n result = client.voucher.voidVoucher(accessToken, voucherCode)\n\nGet Voucher By Code\n~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.voucher.getVoucherByCode(accessToken, voucherCode)\n\nGet Voucher Batches\n~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.voucher.getVoucherBatches(accessToken)\n\nGet Voucher Batches By Batch Key\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n result = client.voucher.getVoucherBatchByKey(accessToken, batchKey)\n\nDetail examples can be found at\n`examples `__.\n\n.. |image0| image:: https://img.shields.io/pypi/pyversions/rmsdk.svg\n :target: https://pypi.org/project/rmsdk/\n.. |image1| image:: https://img.shields.io/pypi/v/nine.svg\n :target: https://pypi.org/project/rmsdk/\n.. |image2| image:: https://img.shields.io/pypi/l/rmsdk.svg\n :target: https://pypi.org/project/rmsdk/\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/RevenueMonster/RM-API-SDK-Python", "keywords": "RevenueMonster SDK API", "license": "MIT", "maintainer": "Rex Low", "maintainer_email": "", "name": "rmsdk", "package_url": "https://pypi.org/project/rmsdk/", "platform": "", "project_url": "https://pypi.org/project/rmsdk/", "project_urls": { "Homepage": "https://github.com/RevenueMonster/RM-API-SDK-Python" }, "release_url": "https://pypi.org/project/rmsdk/1.0.1/", "requires_dist": [ "pycryptodome", "requests" ], "requires_python": "", "summary": "A Python wrapper around the Revenue Monster API", "version": "1.0.1" }, "last_serial": 4702663, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "2c731f998d93f9028f4c773377baf58e", "sha256": "10acb7695e5371f7c653bbc02a43c76730843bf869d64a80339932cf1db42500" }, "downloads": -1, "filename": "rmsdk-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2c731f998d93f9028f4c773377baf58e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12224, "upload_time": "2019-01-14T04:12:18", "url": "https://files.pythonhosted.org/packages/4c/8e/e0570440012ff7f6fd6e0391a2800f601f38b8ce0be34b5521bce3f9dade/rmsdk-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a8d7d24a91c2e87b5b87a297e10d3b8", "sha256": "3fa22b5a7aff2e5c7eb04103249019dcd75362ebe88072c8bd261157830ce72f" }, "downloads": -1, "filename": "rmsdk-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0a8d7d24a91c2e87b5b87a297e10d3b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8603, "upload_time": "2019-01-14T04:12:20", "url": "https://files.pythonhosted.org/packages/46/91/5fe71fd94d374aeaff218e0ca7923762241d8c316118be2f801d3637f17d/rmsdk-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "5da608c85de952ca6eb6aebd65afbcf7", "sha256": "1e8a91b984d21320a1e2b5b11d0bd78e2fa03fea305c8620bc6f44d11ba86bed" }, "downloads": -1, "filename": "rmsdk-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5da608c85de952ca6eb6aebd65afbcf7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13550, "upload_time": "2019-01-16T10:37:53", "url": "https://files.pythonhosted.org/packages/5f/9f/c2e31121f6fd1097b0c6633900754940671aff0b57cb8dd61e637424b833/rmsdk-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "edac31f9844f64f3dc6c8234598f904c", "sha256": "c7ecac3efdd5869cb521e9d9acc182240dd4aa27807e7e293431b9aad186633c" }, "downloads": -1, "filename": "rmsdk-1.0.1.tar.gz", "has_sig": false, "md5_digest": "edac31f9844f64f3dc6c8234598f904c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11932, "upload_time": "2019-01-16T10:37:55", "url": "https://files.pythonhosted.org/packages/ba/1b/e200677c370f7c6f18ad5391e368612f6f4967aeb673d4e97bec5fda4a45/rmsdk-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5da608c85de952ca6eb6aebd65afbcf7", "sha256": "1e8a91b984d21320a1e2b5b11d0bd78e2fa03fea305c8620bc6f44d11ba86bed" }, "downloads": -1, "filename": "rmsdk-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5da608c85de952ca6eb6aebd65afbcf7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13550, "upload_time": "2019-01-16T10:37:53", "url": "https://files.pythonhosted.org/packages/5f/9f/c2e31121f6fd1097b0c6633900754940671aff0b57cb8dd61e637424b833/rmsdk-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "edac31f9844f64f3dc6c8234598f904c", "sha256": "c7ecac3efdd5869cb521e9d9acc182240dd4aa27807e7e293431b9aad186633c" }, "downloads": -1, "filename": "rmsdk-1.0.1.tar.gz", "has_sig": false, "md5_digest": "edac31f9844f64f3dc6c8234598f904c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11932, "upload_time": "2019-01-16T10:37:55", "url": "https://files.pythonhosted.org/packages/ba/1b/e200677c370f7c6f18ad5391e368612f6f4967aeb673d4e97bec5fda4a45/rmsdk-1.0.1.tar.gz" } ] }