# 倍票相关 API 的实现 import rapidjson as json import pytz from datetime import datetime, timedelta from Config import * from API_TitleServer import apiSDGB from HelperGetUserThing import implGetUser_ from loguru import logger from HelperLogInOut import apiLogin, apiLogout, generateTimestamp def apiQueryTicket(userId:int) -> str: '''查询已有票的 API 请求器,返回 Json String。''' # 构建 Payload data = json.dumps({ "userId": userId }) # 发送请求 userdata_result = apiSDGB(data, "GetUserChargeApi", userId) # 返回响应 return userdata_result def apiBuyTicket(userId:int, ticketType:int, price:int, playerRating:int, playCount:int) -> str: '''倍票购买 API 的请求器''' # 构造请求数据 Payload data = json.dumps({ "userId": userId, "userChargelog": { "chargeId": ticketType, "price": price, "purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"), "playCount": playCount, "playerRating": playerRating, "placeId": placeId, "regionId": regionId, "clientId": clientId }, "userCharge": { "chargeId": ticketType, "stock": 1, "purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"), "validDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1) + timedelta(days=90)).replace(hour=4, minute=0, second=0).strftime("%Y-%m-%d %H:%M:%S") } }) # 发送请求,返回最终得到的 Json String 回执 return apiSDGB(data, "UpsertUserChargelogApi", userId) def implBuyTicket(userId:int, ticketType:int): ''' 购买倍票 API 的参考实现。 需要事先登录. 返回服务器响应的 Json string。 ''' # 先使用 GetUserData API 请求器,取得 rating 和 pc 数 currentUserData = implGetUser_("Data", userId) if currentUserData: playerRating = currentUserData['userData']['playerRating'] playCount = currentUserData['userData'].get('playCount', 0) else: return False # 正式买票 getTicketResponseStr = apiBuyTicket(userId, ticketType, ticketType-1, playerRating, playCount) # 返回结果 return getTicketResponseStr if __name__ == "__main__": userId = testUid2 currentLoginTimestamp = generateTimestamp() loginResult = apiLogin(currentLoginTimestamp, userId) if loginResult['returnCode'] != 1: logger.info("登录失败") exit() try: logger.info(implBuyTicket(userId, 2)) logger.info(apiLogout(currentLoginTimestamp, userId)) finally: logger.info(apiLogout(currentLoginTimestamp, userId)) #logger.warning("Error")