Пример #1
0
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"}')
Пример #2
0
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()
        }))
Пример #6
0
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"}')
Пример #7
0
def transactions_used_get_handler(protocol, entry_point, world, data):
    return BtlOk(simplejson.dumps({"result": "ok","used_transactions": world.used_transactions}))
Пример #8
0
def get_user_handler(protocol, entry_point, world, data):
    return BtlOk('{"result":"ok","data":"' + str(world.player) + '"}')
Пример #9
0
def transactions_use_handler(protocol, entry_point, world, args):
    log = world.logger
    world.use_transactions(log)
    return BtlOk('{"result": "ok"}')
Пример #10
0
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"}')