{ "info": { "author": "Rizda Prasetya", "author_email": "rizda.prasetya@midtrans.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Midtrans Client - Python\n===============\n\n[![Build Status](https://travis-ci.org/rizdaprasetya/midtrans-python-client.svg?branch=master)](https://travis-ci.org/rizdaprasetya/midtrans-python-client)\n[![PyPI version](https://badge.fury.io/py/midtransclient.svg)](https://badge.fury.io/py/midtransclient)\n[![Downloads](https://pepy.tech/badge/midtransclient/month)](https://pepy.tech/project/midtransclient)\n[![Downloads](https://pepy.tech/badge/midtransclient)](https://pepy.tech/project/midtransclient)\n\nMidtrans \u2764\ufe0f Python! \ud83d\udc0d\n\nThis is the Official Python API client/library for Midtrans Payment API. Visit [https://midtrans.com](https://midtrans.com). More information about the product and see documentation at [http://docs.midtrans.com](https://docs.midtrans.com) for more technical details.\n\n## 1. Installation\n\n### 1.a Using Pip\n\n```\npip install midtransclient\n```\n\n### 1.b Manual Installation\n\nIf you are not using Pip, you can clone or [download](https://github.com/midtrans/midtrans-python-client/archive/master.zip) this repository.\nThen import from `midtransclient` folder.\n\nOr run Pip install from the repo folder.\n```\npip install .\n```\n\n## 2. Usage\n\n### 2.1 Choose Product/Method\n\nWe have [2 different products](https://docs.midtrans.com/en/welcome/index.html) of payment that you can use:\n- [Snap](#22A-snap) - Customizable payment popup will appear on **your web/app** (no redirection). [doc ref](https://snap-docs.midtrans.com/)\n- [Snap Redirect](#22B-snap-redirect) - Customer need to be redirected to payment url **hosted by midtrans**. [doc ref](https://snap-docs.midtrans.com/)\n- [Core API (VT-Direct)](#22C-core-api-vt-direct) - Basic backend implementation, you can customize the frontend embedded on **your web/app** as you like (no redirection). [doc ref](https://api-docs.midtrans.com/)\n\nChoose one that you think best for your unique needs.\n\n### 2.2 Client Initialization and Configuration\n\nGet your client key and server key from [Midtrans Dashboard](https://dashboard.midtrans.com)\n\nCreate API client object\n\n```python\n# Create Core API instance\ncore_api = midtransclient.CoreApi(\n is_production=False,\n server_key='YOUR_SERVER_KEY',\n client_key='YOUR_CLIENT_KEY'\n)\n```\n\n\n```python\n# Create Snap API instance\nsnap = midtransclient.Snap(\n is_production=False,\n server_key='YOUR_SERVER_KEY',\n client_key='YOUR_CLIENT_KEY'\n)\n```\n\nYou can also re-set config using `Snap.api_config.set( ... )`\nexample:\n\n```python\n\n# initialize object, empty config\nsnap = midtransclient.Snap()\n\n# re-set full config\nsnap.api_config.set(\n is_production=False,\n server_key='YOUR_SERVER_KEY',\n client_key='YOUR_CLIENT_KEY'\n)\n\n# re-set server_key only\nsnap.api_config.set(server_key='YOUR_SERVER_KEY')\n\n# re-set is_production only\nsnap.api_config.set(is_production=True)\n```\n\nYou can also set config directly from attribute\n```python\n# initialize object, empty config\nsnap = midtransclient.Snap()\n\n# set config\nsnap.api_config.is_production=False\nsnap.api_config.server_key='YOUR_SERVER_KEY'\nsnap.api_config.client='YOUR_CLIENT_KEY'\n```\n\n\n### 2.2.A Snap\nYou can see Snap example [here](examples/snap).\n\nAvailable methods for `Snap` class\n```python\n# return Snap API /transaction response as Dictionary\ndef create_transactions(parameter):\n\n# return Snap API /transaction token as String\ndef create_transactions_token(parameter):\n\n# return Snap API /transaction redirect_url as String\ndef create_transactions_redirect_url(parameter):\n```\n`parameter` is Dictionary or String of JSON of [SNAP Parameter](https://snap-docs.midtrans.com/#json-objects)\n\n\n#### Get Snap Token\n\n```python\n# Create Snap API instance\nsnap = midtransclient.Snap(\n is_production=False,\n server_key='YOUR_SERVER_KEY',\n client_key='YOUR_CLIENT_KEY'\n)\n# Build API parameter\nparam = {\n \"transaction_details\": {\n \"order_id\": \"test-transaction-123\",\n \"gross_amount\": 200000\n }, \"credit_card\":{\n \"secure\" : True\n }\n}\n\ntransaction = snap.create_transaction(param)\n\ntransaction_token = transaction['token']\n# alternative way to create transaction_token:\n# transaction_token = snap.create_transaction_token(param)\n```\n\n\n#### Initialize Snap JS when customer click pay button\n\nReplace `PUT_TRANSACTION_TOKEN_HERE` with `transaction_token` acquired above\n```html\n\n \n \n
JSON result will appear here after payment:
\n\n\n \n \n \n\n```\n\n#### Implement Notification Handler\n[Refer to this section](#23-handle-http-notification)\n\n### 2.2.B Snap Redirect\n\nAlso available as examples [here](examples/snap).\n\n#### Get Redirection URL of a Payment Page\n\n```python\n# Create Snap API instance\nsnap = midtransclient.Snap(\n is_production=False,\n server_key='YOUR_SERVER_KEY',\n client_key='YOUR_CLIENT_KEY'\n)\n# Build API parameter\nparam = {\n \"transaction_details\": {\n \"order_id\": \"test-transaction-123\",\n \"gross_amount\": 200000\n }, \"credit_card\":{\n \"secure\" : True\n }\n}\n\ntransaction = snap.create_transaction(param)\n\ntransaction_redirect_url = transaction['redirect_url']\n# alternative way to create redirect_url:\n# transaction_redirect_url = snap.create_redirect_url(param)\n```\n#### Implement Notification Handler\n[Refer to this section](#23-handle-http-notification)\n\n### 2.2.C Core API (VT-Direct)\n\nYou can see some Core API examples [here](examples/core_api).\n\nAvailable methods for `CoreApi` class\n```python\ndef charge(self,parameters=dict()):\n \"\"\"\n Trigger `/charge` API call to Core API\n :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON\n (more params detail refer to: https://api-docs.midtrans.com)\n\n :return: Dictionary from JSON decoded response\n \"\"\"\n\ndef capture(self,parameters=dict()):\n \"\"\"\n Trigger `/capture` API call to Core API\n Capture is only used for pre-authorize transaction only\n :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON\n (more params detail refer to: https://api-docs.midtrans.com)\n\n :return: Dictionary from JSON decoded response\n \"\"\"\n\ndef card_register(self,parameters=dict()):\n \"\"\"\n Trigger `/card/register` API call to Core API\n :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON\n (more params detail refer to: https://api-docs.midtrans.com)\n\n :return: Dictionary from JSON decoded response\n \"\"\"\n\ndef card_token(self,parameters=dict()):\n \"\"\"\n Trigger `/token` API call to Core API\n :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON\n (more params detail refer to: https://api-docs.midtrans.com)\n\n :return: Dictionary from JSON decoded response\n \"\"\"\n\ndef card_point_inquiry(self,token_id):\n \"\"\"\n Trigger `/point_inquiry/` API call to Core API\n :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON\n (more params detail refer to: https://api-docs.midtrans.com)\n\n :return: Dictionary from JSON decoded response\n \"\"\"\n```\n`parameter` is Dictionary or String of JSON of [Core API Parameter](https://api-docs.midtrans.com/#json-objects)\n\n#### Credit Card Get Token\n\nGet token should be handled on Frontend please refer to [API docs](https://api-docs.midtrans.com)\n\n#### Credit Card Charge\n\n```python\n# Create Core API instance\ncore_api = midtransclient.Snap(\n is_production=False,\n server_key='YOUR_SERVER_KEY',\n client_key='YOUR_CLIENT_KEY'\n)\n# Build API parameter\nparam = {\n \"payment_type\": \"credit_card\",\n \"transaction_details\": {\n \"gross_amount\": 12145,\n \"order_id\": \"test-transaction-54321\",\n },\n \"credit_card\":{\n \"token_id\": 'CREDIT_CARD_TOKEN', # change with your card token\n \"authentication\": True\n }\n}\n\n# charge transaction\ncharge_response = core_api.charge(param)\nprint('charge_response:')\nprint(charge_response)\n```\n\n#### Credit Card 3DS Authentication\n\nThe credit card charge result may contains `redirect_url` for 3DS authentication. 3DS Authentication should be handled on Frontend please refer to [API docs](https://api-docs.midtrans.com/#card-features-3d-secure)\n\nFor full example on Credit Card 3DS transaction refer to:\n- [Flask App examples](/examples/flask_app) that implement Snap & Core Api\n\n### 2.3 Handle HTTP Notification\n\n> **IMPORTANT NOTE**: To update transaction status on your backend/database, **DO NOT** solely rely on frontend callbacks! For security reason to make sure the status is authentically coming from Midtrans, only update transaction status based on HTTP Notification or API Get Status.\n\nCreate separated web endpoint (notification url) to receive HTTP POST notification callback/webhook. \nHTTP notification will be sent whenever transaction status is changed.\nExample also available [here](examples/transaction_actions/notification_example.py)\n\n```python\n# Create Core API / Snap instance (both have shared `transactions` methods)\napi_client = midtransclient.CoreApi(\n is_production=False,\n server_key='YOUR_SERVER_KEY',\n client_key='YOUR_CLIENT_KEY'\n)\nstatus_response = api_client.transactions.notification(mock_notification)\n\norder_id = status_response['order_id']\ntransaction_status = status_response['transaction_status']\nfraud_status = status_response['fraud_status']\n\nprint('Transaction notification received. Order ID: {0}. Transaction status: {1}. Fraud status: {3}'.format(order_id,\n transaction_status,\n fraud_status))\n\n# Sample transaction_status handling logic\n\nif transaction_status == 'capture':\n if fraud_status == 'challenge':\n # TODO set transaction status on your databaase to 'challenge'\n else if fraud_status == 'accept':\n # TODO set transaction status on your databaase to 'success'\nelse if transaction_status == 'cancel' or \n transaction_status == 'deny' or \n transaction_status == 'expire':\n # TODO set transaction status on your databaase to 'failure'\nelse if transaction_status == 'pending':\n # TODO set transaction status on your databaase to 'pending' / waiting payment\n```\n\n### 2.4 Transaction Action\nAlso available as examples [here](examples/transaction_actions)\n#### Get Status\n```python\n# get status of transaction that already recorded on midtrans (already `charge`-ed) \nstatus_response = api_client.transactions.status('YOUR_ORDER_ID OR TRANSACTION_ID')\n```\n#### Get Status B2B\n```python\n# get transaction status of VA b2b transaction\nstatusb2b_response = api_client.transactions.statusb2b('YOUR_ORDER_ID OR TRANSACTION_ID')\n```\n#### Approve Transaction\n```python\n# approve a credit card transaction with `challenge` fraud status\napprove_response = api_client.transactions.approve('YOUR_ORDER_ID OR TRANSACTION_ID')\n```\n#### Deny Transaction\n```python\n# deny a credit card transaction with `challenge` fraud status\ndeny_response = api_client.transactions.deny('YOUR_ORDER_ID OR TRANSACTION_ID')\n```\n#### Cancel Transaction\n```python\n# cancel a credit card transaction or pending transaction\ncancel_response = api_client.transactions.cancel('YOUR_ORDER_ID OR TRANSACTION_ID')\n```\n#### Expire Transaction\n```python\n# expire a pending transaction\nexpire_response = api_client.transactions.expire('YOUR_ORDER_ID OR TRANSACTION_ID')\n```\n#### Refund Transaction\n```python\n# refund a transaction (not all payment channel allow refund via API)\nparam = {\n \"amount\": 5000,\n \"reason\": \"Item out of stock\"\n}\nrefund_response = api_client.transactions.refund('YOUR_ORDER_ID OR TRANSACTION_ID',param)\n```\n\n## 3. Examples\nExamples are available on [/examples](/examples) folder.\nThere are:\n- [Core Api examples](/examples/core_api)\n- [Snap examples](/examples/snap_api)\n- [Flask App examples](/examples/flask_app) that implement Snap & Core Api\n\n#### Get help\n\n* [Midtrans Docs](https://docs.midtrans.com)\n* [Midtrans Dashboard ](https://dashboard.midtrans.com/)\n* [SNAP documentation](http://snap-docs.midtrans.com)\n* [Core API documentation](http://api-docs.midtrans.com)\n* Can't find answer you looking for? email to [support@midtrans.com](mailto:support@midtrans.com)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/midtrans/midtrans-python-client/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "midtransclient", "package_url": "https://pypi.org/project/midtransclient/", "platform": "", "project_url": "https://pypi.org/project/midtransclient/", "project_urls": { "Homepage": "https://github.com/midtrans/midtrans-python-client/" }, "release_url": "https://pypi.org/project/midtransclient/1.1.0/", "requires_dist": [ "requests (>=2.3.0)" ], "requires_python": ">=2.7", "summary": "Official Midtrans Payment API Client", "version": "1.1.0" }, "last_serial": 5439832, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "974e28fd8079b4f28c63c4535e3e9215", "sha256": "2043210fef1b3fe90cfcd60f0819e46767ad805c41ddb1d08bb337cf4a43d04e" }, "downloads": -1, "filename": "midtransclient-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "974e28fd8079b4f28c63c4535e3e9215", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 14635, "upload_time": "2018-10-25T07:30:23", "url": "https://files.pythonhosted.org/packages/b7/cd/214132029552af1a56cc6a1801ad30f523917bd8a40c77136eeea0fa50f8/midtransclient-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "046ab5af27fffde0b6fa64daccb90985", "sha256": "477665c3e81997c9c964b3d4f8d4f60e3b64ecb517766b2972d6db873d33b7ad" }, "downloads": -1, "filename": "midtransclient-1.0.1.tar.gz", "has_sig": false, "md5_digest": "046ab5af27fffde0b6fa64daccb90985", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 12770, "upload_time": "2018-10-25T07:30:26", "url": "https://files.pythonhosted.org/packages/0b/a5/8b26c8056500ac5b5003d0bc157da3ed886791dd500b642cd94f1718457c/midtransclient-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "dc19b6855e1736655d98c61454d10333", "sha256": "75e7e0ab97c7af9b9173adb54a82da1c1e9a6911a43a6c5affade4b51a4be7c1" }, "downloads": -1, "filename": "midtransclient-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "dc19b6855e1736655d98c61454d10333", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 14772, "upload_time": "2018-10-26T08:24:16", "url": "https://files.pythonhosted.org/packages/f2/77/89463a9b56172ddbc5ffbd476f4416663d2a99b45bb91b0f45359a7fd7e6/midtransclient-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c3ccf725e4e7f41090cf0c849048fdcc", "sha256": "5a197edbbc747ffc293b0a42fdddb12c01870d650f1c728413bc739ef7aa0647" }, "downloads": -1, "filename": "midtransclient-1.0.2.tar.gz", "has_sig": false, "md5_digest": "c3ccf725e4e7f41090cf0c849048fdcc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 13191, "upload_time": "2018-10-26T08:24:19", "url": "https://files.pythonhosted.org/packages/83/72/8bad9920b118b1840c439a6d4e3815c737e4a15ca18ba03b17d42cd8c26d/midtransclient-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "79f51f059848e89ca7b7cf5297b200e8", "sha256": "bf7489231716754671359425419ad1ce858710b6e91c323b2e7f419154e55e4c" }, "downloads": -1, "filename": "midtransclient-1.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "79f51f059848e89ca7b7cf5297b200e8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 14747, "upload_time": "2018-10-31T04:28:17", "url": "https://files.pythonhosted.org/packages/95/ec/88181dc472d7e9c3798c41663606ae275f213294c09e38fc137ab1bd86b0/midtransclient-1.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1ebf0ca67086a183795f474e8ee0366e", "sha256": "8efa619a4c1178937e03eb974f689c5d105557809a54bb255412f1ad71f39434" }, "downloads": -1, "filename": "midtransclient-1.0.3.tar.gz", "has_sig": false, "md5_digest": "1ebf0ca67086a183795f474e8ee0366e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 10972, "upload_time": "2018-10-31T04:28:20", "url": "https://files.pythonhosted.org/packages/fe/01/7fdcb1fc3385ff079ae2435022513342432949e95fa877e849669f9c0b64/midtransclient-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "acfac2fc9eba22759b5b7eba0740329f", "sha256": "cd7d3acf2fe33d16e81b6f3d9d8dd26c2df7cd5ec728025ea91b18c4298987c6" }, "downloads": -1, "filename": "midtransclient-1.0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "acfac2fc9eba22759b5b7eba0740329f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 14840, "upload_time": "2018-11-02T03:55:14", "url": "https://files.pythonhosted.org/packages/61/22/f7a664a70cf36c0456de4b34d59f655bcf6ee1e8e5a769b95e8c5a41f713/midtransclient-1.0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7674d438b1c2534cf21583b21ed1060", "sha256": "ba30ca79120be33dc6b83acd12282388de15391871b0c64665f4e546cd009c36" }, "downloads": -1, "filename": "midtransclient-1.0.4.tar.gz", "has_sig": false, "md5_digest": "d7674d438b1c2534cf21583b21ed1060", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 11089, "upload_time": "2018-11-02T03:55:22", "url": "https://files.pythonhosted.org/packages/51/34/e20e72b32700d1a2d57038e6aef8577adf72177e55789060cfbdd2abf6f7/midtransclient-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "7b5964be8f750dd071c1e883eddf5210", "sha256": "d75112a90ce040b855fa3d90d7a992e183c31f6f2f225d9e60ba6eff2b8b4e76" }, "downloads": -1, "filename": "midtransclient-1.0.5-py2-none-any.whl", "has_sig": false, "md5_digest": "7b5964be8f750dd071c1e883eddf5210", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 14838, "upload_time": "2018-11-02T03:59:58", "url": "https://files.pythonhosted.org/packages/96/4a/b559508c4bad4eaf9b8716c23b4ca3b74da5906c67c78b955d5a92e8b2a3/midtransclient-1.0.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74959348ec9403c0e2e1718ad6c65be0", "sha256": "6e8e6d2a85f89ab2aeb374c24ccc639390f40a7adee693eea6c3990fb7771c09" }, "downloads": -1, "filename": "midtransclient-1.0.5.tar.gz", "has_sig": false, "md5_digest": "74959348ec9403c0e2e1718ad6c65be0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 11088, "upload_time": "2018-11-02T04:00:05", "url": "https://files.pythonhosted.org/packages/25/8d/fdeccf0ef1f43a5988caab5c782151ab53d2068c682f450681bd07cfcb9b/midtransclient-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "024dca49b35fba81b147a2045c8807b6", "sha256": "79ce95ecfaf252da6d06758050dadf6f78b2feaf4288cf783e8701c5d5a0c98e" }, "downloads": -1, "filename": "midtransclient-1.0.6-py2-none-any.whl", "has_sig": false, "md5_digest": "024dca49b35fba81b147a2045c8807b6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 14856, "upload_time": "2018-11-05T05:35:52", "url": "https://files.pythonhosted.org/packages/57/67/9026025f545d2f647c5d85c607a1fc30c12023d67b1c6c4c518ed948f552/midtransclient-1.0.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "829a5b159da0807d9cd625020b255bbd", "sha256": "a916cf21a1403b710149623069d63b13b9aed1231d5a635d364998d41b7706d6" }, "downloads": -1, "filename": "midtransclient-1.0.6.tar.gz", "has_sig": false, "md5_digest": "829a5b159da0807d9cd625020b255bbd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 11101, "upload_time": "2018-11-05T05:35:57", "url": "https://files.pythonhosted.org/packages/d9/da/bf6d500e0a47c1c337d660c8c82cf66a1a026e4288f563572d4847ed8c1e/midtransclient-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "ec8cc016c79c3423d08266098d37e333", "sha256": "e85d57668de0ba58a212df9698e9364fa2e5e0a40f6f8299b77d8d38b5be33d2" }, "downloads": -1, "filename": "midtransclient-1.0.7-py2-none-any.whl", "has_sig": false, "md5_digest": "ec8cc016c79c3423d08266098d37e333", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 15101, "upload_time": "2019-04-01T06:49:29", "url": "https://files.pythonhosted.org/packages/31/40/f903c39c46c6156fe99364e9f5417f76eb46a45640bd380b0720c6d83447/midtransclient-1.0.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b799a2f52a261d49f7d72cde013eb363", "sha256": "37fda4e598bb535295d9bd7bc79643bace778acf0c5af98f07e77f7e2d5a9065" }, "downloads": -1, "filename": "midtransclient-1.0.7.tar.gz", "has_sig": false, "md5_digest": "b799a2f52a261d49f7d72cde013eb363", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 11481, "upload_time": "2019-04-01T06:49:36", "url": "https://files.pythonhosted.org/packages/ea/56/d6644f050ca064b2228a33b4eae62ccd108a12de160f0fdedaee768a798b/midtransclient-1.0.7.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "53e3ad5b7ca3958f3e15298cd7564e83", "sha256": "7107e2447633b8beb57701ccd2f4772a7a77813e6ab9a2a6d70ce0e008aca22d" }, "downloads": -1, "filename": "midtransclient-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "53e3ad5b7ca3958f3e15298cd7564e83", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 16652, "upload_time": "2019-06-24T09:35:08", "url": "https://files.pythonhosted.org/packages/95/16/1d5fab1f30533b4d96cb27503aa3d485ae90c4f05bbfeba8448645bd1a19/midtransclient-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98320c1e8f222f21192d536782ed95c9", "sha256": "02502fa63026f3294357f5234d06d56ac12bd4e793c898795d66ceefd614151a" }, "downloads": -1, "filename": "midtransclient-1.1.0.tar.gz", "has_sig": false, "md5_digest": "98320c1e8f222f21192d536782ed95c9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 17427, "upload_time": "2019-06-24T09:35:26", "url": "https://files.pythonhosted.org/packages/90/81/2d1966d99f4a82ca69adee8ed84a107f6419ff222b5d53d293bf096a82f7/midtransclient-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "53e3ad5b7ca3958f3e15298cd7564e83", "sha256": "7107e2447633b8beb57701ccd2f4772a7a77813e6ab9a2a6d70ce0e008aca22d" }, "downloads": -1, "filename": "midtransclient-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "53e3ad5b7ca3958f3e15298cd7564e83", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 16652, "upload_time": "2019-06-24T09:35:08", "url": "https://files.pythonhosted.org/packages/95/16/1d5fab1f30533b4d96cb27503aa3d485ae90c4f05bbfeba8448645bd1a19/midtransclient-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98320c1e8f222f21192d536782ed95c9", "sha256": "02502fa63026f3294357f5234d06d56ac12bd4e793c898795d66ceefd614151a" }, "downloads": -1, "filename": "midtransclient-1.1.0.tar.gz", "has_sig": false, "md5_digest": "98320c1e8f222f21192d536782ed95c9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 17427, "upload_time": "2019-06-24T09:35:26", "url": "https://files.pythonhosted.org/packages/90/81/2d1966d99f4a82ca69adee8ed84a107f6419ff222b5d53d293bf096a82f7/midtransclient-1.1.0.tar.gz" } ] }