Apple AppStore和GooglePlay的应用内购买验证库。
inappp的Python项目详细描述
目录
- 简介
- 安装
- 谷歌游戏(收据+签名)
- 谷歌游戏(验证)
- google play(结果验证)
- 应用商店(收据+使用可选的共享机密)
- 应用商店响应(验证结果/原始响应)示例
- app store,asyncio版本(在inappy.asyncio包中提供)
- 开发
一。简介
应用内购买验证库,用于Apple AppStore和Google Play(AppStore验证器具有async支持!).
2.安装
pip install inapppy
三。google play(根据提供的签名验证收据)(使用rsa)
frominapppyimportGooglePlayValidator,InAppPyValidationErrorbundle_id='com.yourcompany.yourapp'api_key='API key from the developer console'validator=GooglePlayValidator(bundle_id,api_key)try:# receipt means `androidData` in result of purchase# signature means `signatureAndroid` in result of purchasevalidation_result=validator.validate('receipt','signature')exceptInAppPyValidationError:# handle validation errorpass
四。谷歌播放验证
frominapppyimportGooglePlayVerifier,errorsdefgoogle_validator(receipt):""" Accepts receipt, validates in Google. """purchase_token=receipt['purchaseToken']product_sku=receipt['productId']verifier=GooglePlayVerifier(GOOGLE_BUNDLE_ID,GOOGLE_SERVICE_ACCOUNT_KEY_FILE,)response={'valid':False,'transactions':[]}try:result=verifier.verify(purchase_token,product_sku,is_subscription=True)response['valid']=Trueresponse['transactions'].append((result['orderId'],product_sku))excepterrors.GoogleErrorasexc:logging.error('Purchase validation failed {}'.format(exc))returnresponse
5个。谷歌播放验证(带结果)
除了方法之外,还将返回verify方法,而不是引发错误结果类。
frominapppyimportGooglePlayVerifier,errorsdefgoogle_validator(receipt):""" Accepts receipt, validates in Google. """purchase_token=receipt['purchaseToken']product_sku=receipt['productId']verifier=GooglePlayVerifier(GOOGLE_BUNDLE_ID,GOOGLE_SERVICE_ACCOUNT_KEY_FILE,)response={'valid':False,'transactions':[]}result=verifier.verify_with_result(purchase_token,product_sku,is_subscription=True)# result contains dataraw_response=result.raw_responseis_canceled=result.is_canceledis_expired=result.is_expiredreturnresult
7号。应用商店响应(验证结果/原始响应)示例
{"latest_receipt":"MIIbngYJKoZIhvcNAQcCoIIbj...","status":0,"receipt":{"download_id":0,"receipt_creation_date_ms":"1486371475000","application_version":"2","app_item_id":0,"receipt_creation_date":"2017-02-06 08:57:55 Etc/GMT","original_purchase_date":"2013-08-01 07:00:00 Etc/GMT","request_date_pst":"2017-02-06 04:41:09 America/Los_Angeles","original_application_version":"1.0","original_purchase_date_pst":"2013-08-01 00:00:00 America/Los_Angeles","request_date_ms":"1486384869996","bundle_id":"com.yourcompany.yourapp","request_date":"2017-02-06 12:41:09 Etc/GMT","original_purchase_date_ms":"1375340400000","in_app":[{"purchase_date_ms":"1486371474000","web_order_line_item_id":"1000000034281189","original_purchase_date_ms":"1486371475000","original_purchase_date":"2017-02-06 08:57:55 Etc/GMT","expires_date_pst":"2017-02-06 01:00:54 America/Los_Angeles","original_purchase_date_pst":"2017-02-06 00:57:55 America/Los_Angeles","purchase_date_pst":"2017-02-06 00:57:54 America/Los_Angeles","expires_date_ms":"1486371654000","expires_date":"2017-02-06 09:00:54 Etc/GMT","original_transaction_id":"1000000271014363","purchase_date":"2017-02-06 08:57:54 Etc/GMT","quantity":"1","is_trial_period":"false","product_id":"com.yourcompany.yourapp","transaction_id":"1000000271014363"}],"version_external_identifier":0,"receipt_creation_date_pst":"2017-02-06 00:57:55 America/Los_Angeles","adam_id":0,"receipt_type":"ProductionSandbox"},"latest_receipt_info":[{"purchase_date_ms":"1486371474000","web_order_line_item_id":"1000000034281189","original_purchase_date_ms":"1486371475000","original_purchase_date":"2017-02-06 08:57:55 Etc/GMT","expires_date_pst":"2017-02-06 01:00:54 America/Los_Angeles","original_purchase_date_pst":"2017-02-06 00:57:55 America/Los_Angeles","purchase_date_pst":"2017-02-06 00:57:54 America/Los_Angeles","expires_date_ms":"1486371654000","expires_date":"2017-02-06 09:00:54 Etc/GMT","original_transaction_id":"1000000271014363","purchase_date":"2017-02-06 08:57:54 Etc/GMT","quantity":"1","is_trial_period":"true","product_id":"com.yourcompany.yourapp","transaction_id":"1000000271014363"},{"purchase_date_ms":"1486371719000","web_order_line_item_id":"1000000034281190","original_purchase_date_ms":"1486371720000","original_purchase_date":"2017-02-06 09:02:00 Etc/GMT","expires_date_pst":"2017-02-06 01:06:59 America/Los_Angeles","original_purchase_date_pst":"2017-02-06 01:02:00 America/Los_Angeles","purchase_date_pst":"2017-02-06 01:01:59 America/Los_Angeles","expires_date_ms":"1486372019000","expires_date":"2017-02-06 09:06:59 Etc/GMT","original_transaction_id":"1000000271014363","purchase_date":"2017-02-06 09:01:59 Etc/GMT","quantity":"1","is_trial_period":"false","product_id":"com.yourcompany.yourapp","transaction_id":"1000000271016119"}],"environment":"Sandbox"}
8个。应用程序商店,异步版本(在inappy.asyncio包中提供)
frominapppyimportInAppPyValidationErrorfrominapppy.asyncioimportAppStoreValidatorbundle_id='com.yourcompany.yourapp'auto_retry_wrong_env_request=False# if True, automatically query sandbox endpoint if# validation fails on production endpointvalidator=AppStoreValidator(bundle_id,auto_retry_wrong_env_request=auto_retry_wrong_env_request)try:exclude_old_transactions=False# if True, include only the latest renewal transactionvalidation_result=awaitvalidator.validate('receipt','optional-shared-secret',exclude_old_transactions=exclude_old_transactions)exceptInAppPyValidationErrorasex:# handle validation errorresponse_from_apple=ex.raw_response# contains actual response from AppStore service.pass
9号。开发
# run checks and tests tox # setup project make setup # check for lint errors make lint # run tests make test# run black make black