def transaction_ios_pay_handler(protocol, entry_point, world, args): log = world.logger log("\n\ntransaction_ios_pay") log("args={}".format(args)) try: args = dict(args) payload = args["payload"] product_id = args["item"] order_id = args["order"] if order_id in world.get_transactions_order_ids(product_id): log("!!already_exists") return BtlOk('{"result": "already_exists"}') fields = [Atom("player")] body = simplejson.dumps({"receipt-data": payload}) request = (ITUNES_URL, [(Atom("method"), Atom("post")), (Atom("body"), body)]) fields.append((Atom("http"), request)) return BtlRequest("transaction_ios_pay_callback", fields, simplejson.dumps(args)) except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) log(''.join('!!' + line for line in lines)) return BtlOk('{"result": "error"}')
def set_user_handler(protocol, entry_point, world, args): data = dict(args)["data"] length = len(data) if MIN_LENGTH < length < PLAYER_SIZE: world.set_player(data) return BtlOk('{"result": "ok"}') return BtlOk('{"result": "validation_error"}')
def transaction_ios_pay_callback_handler(protocol, entry_point, world, args): logger = world.logger logger("\n\ntransaction_ios_pay_callback") now = str(int(time())) try: logger(args) logger(world.context) if ITUNES_NO_CHECK: context = simplejson.loads(world.context) result = dict(order="skip_check_{}".format(context.get("order")), item=context.get("item")) else: result = itunes_check(world) if result: world.pay_transaction(result["item"], { "order_id": result["order"], "purchaise_time": now }) logger("transaction_ios_pay completed") return BtlOk('{"result": "ok"}') return BtlOk('{"result": "error"}') except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) logger(''.join('!!' + line for line in lines)) return BtlOk('{"result": "error"}')
def admin_transaction_add_handler(protocol, entry_point, world, args): log = world.logger log("admin_transaction_add") log(str(args)) args = dict(args) if entry_point != "admin": return BtlOk('{"result": "error_auth"}') try: world.pay_transaction(args["product_id"], { "order_id": args["order_id"], "purchase_time": str(int(time.time())) }) log("admin_transaction_add completed") return BtlOk('{"result": "ok"}') except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) log(''.join('!! ' + line for line in lines)) return BtlOk('{"result": "error"}')
def transactions_unused_get_handler(protocol, entry_point, world, data): return BtlOk( simplejson.dumps({ "result": "ok", "unused_transactions": world.unused_transactions, "used_transactions_count": len(world.used_transactions), "last_transaction_ts": world.get_last_transaction() }))
def transaction_pay_handler(protocol, entry_point, world, args): log = world.logger log("\n\ntransaction_pay") log(args) try: args = dict(args) google_data = simplejson.loads(args["payload"]) purchase_data_string = google_data["json"] purchase_data = dict(simplejson.loads(purchase_data_string)) product_id = purchase_data["productId"] package_name = purchase_data["packageName"] developer_payload = purchase_data["developerPayload"] order_id = purchase_data.get("orderId") if package_name != PACKAGE_NAME: log("wrong_package") return BtlOk('{"result": "!!wrong_package"}') if order_id is None: log("test_transaction") order_id = "test_" + str(purchase_data["purchaseTime"]) if order_id in world.get_transactions_order_ids(product_id): log("!!already_exists") return BtlOk('{"result": "already_exists"}') if developer_payload != world.uid: log("!!bad_order") return BtlOk('{"result": "bad_order"}') valid = validate_purchase(GOOGLE_PUBLIC_KEY, signedData=purchase_data_string, signature=google_data["signature"]) if not valid: log("bad_signature") return BtlOk('{"result": "bad_signature"}') world.pay_transaction(product_id, { "order_id": order_id, "purchaise_time": str(int(time.time())) }) log("transaction_pay completed") return BtlOk('{"result": "ok"}') except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) log(''.join('!!' + line for line in lines)) return BtlOk('{"result": "error"}')
def transactions_used_get_handler(protocol, entry_point, world, data): return BtlOk(simplejson.dumps({"result": "ok","used_transactions": world.used_transactions}))
def get_user_handler(protocol, entry_point, world, data): return BtlOk('{"result":"ok","data":"' + str(world.player) + '"}')
def transactions_use_handler(protocol, entry_point, world, args): log = world.logger world.use_transactions(log) return BtlOk('{"result": "ok"}')
def admin_set_handler(protocol, entry_point, world, args): if entry_point != "admin": return '{"result": "error"}' data = simplejson.loads(dict(args)["data"]) world.set_data(data) return BtlOk('{"result": "ok"}')