InApp purchase validation API wrappers
pip install pyinapp
Currently pyinapp supports Google Play and App Store receipts validation.
from pyinapp import GooglePlayValidator, InAppValidationError bundle_id = 'com.yourcompany.yourapp' api_key = 'API key from the developer console' validator = GooglePlayValidator(bundle_id, api_key) try: purchases = validator.validate('receipt', 'signature') process_purchases(purchases) except InAppValidationError: """ handle validation error """
from pyinapp import AppStoreValidator, InAppValidationError bundle_id = 'com.yourcompany.yourapp' validator = AppStoreValidator(bundle_id) try: purchases = validator.validate('receipt') process_purchases(purchases) except InAppValidationError: """ handle validation error """
Important! If your version is under 0.1.3, you need to check the type of purchases. For the sake of convenience you can process purchases this way:
def process_purchases(purchases): process(*purchases) if isinstance(purchases, list) else process(purchases) def process(*purchases): for p in purchases: """ for instance, save p to db and add a player some coins for it """
This approach allows to process both Google Play and App Store purchases the same way.
Purchase is a universal wrapper for Google Play and App Store receipts. It contains the following fields:
- transaction_id: id of the purchase (transaction_id for App Store and orderId for Google Play);
- product_id: what product has been purchased (product_id for App Store and productId for Google Play);
- quantity: how many products have been purchased (quantity for App Store and always 1 for Google Play - there’s no such field in Google Play receipt);
- purchased_at: when the product has been purchased, UNIX timestamp (purchase_date for App Store and purchaseTime for Google Play).
- response: (App Store only) the response (in JSON format) from the App Store.
To run tests, you’ll need tox. After installing, simply run it: