Skip to content

Instantly share code, notes, and snippets.

@Derfirm
Created May 19, 2016 14:03
Show Gist options
  • Save Derfirm/2c7506bdd9e863033df133ae6deab02e to your computer and use it in GitHub Desktop.
Save Derfirm/2c7506bdd9e863033df133ae6deab02e to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from base64 import b64decode
from json import loads
import json
import requests
a = """
ewoJInNpZ25hdHVyZSIgPSAiQXBCZVh4ekROTnBpL05KVDBlTnlyOS9TMURZUTgyMmc4L2ozcEkrWGhVY2ZSeDBycnBJd2xLTC92ZDFRNGZ5MTlLTWJNL1Z1RElQZXV3TktIbCtnRkM1WDRZKzhVTzN0R3VNZzVkTit6SDFkRzh3WURhcDdOWjFFSEZRV05MNXMyN0V6LzhzNjY2WUthdXZIdTlMY1V4bGtVZVZlVTQ2RkVwRFpad3JTcmxyOEFBQURWekNDQTFNd2dnSTdvQU1DQVFJQ0NCdXA0K1BBaG0vTE1BMEdDU3FHU0liM0RRRUJCUVVBTUg4eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURXpNREVHQTFVRUF3d3FRWEJ3YkdVZ2FWUjFibVZ6SUZOMGIzSmxJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1CNFhEVEUwTURZd056QXdNREl5TVZvWERURTJNRFV4T0RFNE16RXpNRm93WkRFak1DRUdBMVVFQXd3YVVIVnlZMmhoYzJWU1pXTmxhWEIwUTJWeWRHbG1hV05oZEdVeEd6QVpCZ05WQkFzTUVrRndjR3hsSUdsVWRXNWxjeUJUZEc5eVpURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNbVRFdUxnamltTHdSSnh5MW9FZjBlc1VORFZFSWU2d0Rzbm5hbDE0aE5CdDF2MTk1WDZuOTNZTzdnaTNvclBTdXg5RDU1NFNrTXArU2F5Zzg0bFRjMzYyVXRtWUxwV25iMzRucXlHeDlLQlZUeTVPR1Y0bGpFMU93QytvVG5STStRTFJDbWVOeE1iUFpoUzQ3VCtlWnRERWhWQjl1c2szK0pNMkNvZ2Z3bzdBZ01CQUFHamNqQndNQjBHQTFVZERnUVdCQlNKYUVlTnVxOURmNlpmTjY4RmUrSTJ1MjJzc0RBTUJnTlZIUk1CQWY4RUFqQUFNQjhHQTFVZEl3UVlNQmFBRkRZZDZPS2RndElCR0xVeWF3N1hRd3VSV0VNNk1BNEdBMVVkRHdFQi93UUVBd0lIZ0RBUUJnb3Foa2lHOTJOa0JnVUJCQUlGQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQWVhSlYyVTUxcnhmY3FBQWU1QzIvZkVXOEtVbDRpTzRsTXV0YTdONlh6UDFwWkl6MU5ra0N0SUl3ZXlOajVVUllISytIalJLU1U5UkxndU5sMG5rZnhxT2JpTWNrd1J1ZEtTcTY5Tkluclp5Q0Q2NlI0Szc3bmI5bE1UQUJTU1lsc0t0OG9OdGxoZ1IvMWtqU1NSUWNIa3RzRGNTaVFHS01ka1NscDRBeVhmN3ZuSFBCZTR5Q3dZVjJQcFNOMDRrYm9pSjNwQmx4c0d3Vi9abEwyNk0ydWVZSEtZQ3VYaGRxRnd4VmdtNTJoM29lSk9PdC92WTRFY1FxN2VxSG02bTAzWjliN1BSellNMktHWEhEbU9Nazd2RHBlTVZsTERQU0dZejErVTNzRHhKemViU3BiYUptVDdpbXpVS2ZnZ0VZN3h4ZjRjemZIMHlqNXdOelNHVE92UT09IjsKCSJwdXJjaGFzZS1pbmZvIiA9ICJld29KSW05eWFXZHBibUZzTFhCMWNtTm9ZWE5sTFdSaGRHVXRjSE4wSWlBOUlDSXlNREUyTFRBMExURTVJREF4T2pJNE9qTTVJRUZ0WlhKcFkyRXZURzl6WDBGdVoyVnNaWE1pT3dvSkluVnVhWEYxWlMxcFpHVnVkR2xtYVdWeUlpQTlJQ0kxWm1GbVl6QXlZVE13TW1Nek4yWXhOVGMwT1dRM01ETXhaR05pT0RKbFpqSmhaVFF3T1RSaUlqc0tDU0p2Y21sbmFXNWhiQzEwY21GdWMyRmpkR2x2YmkxcFpDSWdQU0FpTVRBd01EQXdNREl3TmpZNE1qYzVNU0k3Q2draVluWnljeUlnUFNBaU1USTNJanNLQ1NKMGNtRnVjMkZqZEdsdmJpMXBaQ0lnUFNBaU1UQXdNREF3TURJd05qWTRNamM1TVNJN0Nna2ljWFZoYm5ScGRIa2lJRDBnSWpFaU93b0pJbTl5YVdkcGJtRnNMWEIxY21Ob1lYTmxMV1JoZEdVdGJYTWlJRDBnSWpFME5qRXdOVFExTVRrME5UY2lPd29KSW5WdWFYRjFaUzEyWlc1a2IzSXRhV1JsYm5ScFptbGxjaUlnUFNBaU1EUkJNRGhCTjBFdE9UZzVSQzAwT0VGQ0xVRkJOell0TkRBNU5Ea3lRVU0zTkRZNElqc0tDU0p3Y205a2RXTjBMV2xrSWlBOUlDSmpiMjB1ZUdsdFlXUXVjM1JoY21OeWRYTmhaR1V1WW05dmMzUmxjbkJoWTJzeE1DSTdDZ2tpYVhSbGJTMXBaQ0lnUFNBaU1UQTRORGN4T1RNMk1DSTdDZ2tpWW1sa0lpQTlJQ0pqYjIwdWVHbHRZV1F1YzNSaGNtTnlkWE5oWkdVaU93b0pJbkIxY21Ob1lYTmxMV1JoZEdVdGJYTWlJRDBnSWpFME5qRXdOVFExTVRrME5UY2lPd29KSW5CMWNtTm9ZWE5sTFdSaGRHVWlJRDBnSWpJd01UWXRNRFF0TVRrZ01EZzZNamc2TXprZ1JYUmpMMGROVkNJN0Nna2ljSFZ5WTJoaGMyVXRaR0YwWlMxd2MzUWlJRDBnSWpJd01UWXRNRFF0TVRrZ01ERTZNamc2TXprZ1FXMWxjbWxqWVM5TWIzTmZRVzVuWld4bGN5STdDZ2tpYjNKcFoybHVZV3d0Y0hWeVkyaGhjMlV0WkdGMFpTSWdQU0FpTWpBeE5pMHdOQzB4T1NBd09Eb3lPRG96T1NCRmRHTXZSMDFVSWpzS2ZRPT0iOwoJImVudmlyb25tZW50IiA9ICJTYW5kYm94IjsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmluZy1zdGF0dXMiID0gIjAiOwp9
"""
def from_b64_to_dict(inp):
try:
result = b64decode(inp)
except TypeError:
return None
result = result.replace(';', ',')
result = result.replace(' = ', ':')
result = result.replace(",\n}", '\n}')
return loads(result)
def validate(receipt):
# receipt may be wrapped twice cause client bug
if '%' in receipt:
receipt = unquote(receipt)
details = from_b64_to_dict(receipt)
def validate_purchase():
data = {'receipt-data': receipt}
environment = details['environment']
if environment == 'Sandbox':
url = 'https://sandbox.itunes.apple.com/verifyReceipt'
else:
url = 'https://buy.itunes.apple.com/verifyReceipt'
answer = requests.post(url, data=json.dumps(data))
return answer.json()
result = validate_purchase()
try:
purchase_info = from_b64_to_dict(details['purchase-info'])
payment_id = purchase_info['item-id']
quantity = purchase_info['quantity']
transaction_id = purchase_info['original-transaction-id']
except KeyError:
print 'Failed!'
else:
print payment_id, purchase_info
return True, 0,
validate(a)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment