ParkingCar / app.py
KongYang's picture
Update app.py
896b3aa verified
raw
history blame
15.1 kB
import time
from datetime import datetime,timedelta
import requests ,re
import gradio as gr
def request_first(authorization):
headers = {
"Host": "park.biz.baoneng.com",
"Connection": "keep-alive",
"Accept": "application/json",
"GmToken": "9",
"xweb_xhr": "1",
"Authorization": authorization,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/9129",
"Content-Type": "application/json",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "https://servicewechat.com/wxda6d35e0951cf46d/64/page-frame.html",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9"
}
url = "https://park.biz.baoneng.com/shop/v1/parking/info?car_no=%E7%B2%A4BBQ9667&type=car&gm_id=9"
response = requests.get(url, headers=headers)
data = response.json()
# print(data)
if data['code']==0:
user_id = data['result']['card']['user_id']
order = data['result']['orders']
begin = order['begin']
fee = order['fee']
duration = order['stay_duration']
third_no = order['third_no'] #第二次请求参数使用
return third_no,fee,begin,duration,user_id
else:
return None
def request_second(authorization,third_no,fee,begin):
url = "https://park.biz.baoneng.com/shop/v1/parking/pay"
headers = {
"Host": "park.biz.baoneng.com",
"Connection": "keep-alive",
# "Content-Length": "318", # Adjust based on actual data length
"Accept": "application/json",
"GmToken": "9",
"xweb_xhr": "1",
"Authorization": authorization,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a1b) XWEB/9129",
"Content-Type": "application/json",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "https://servicewechat.com/wxda6d35e0951cf46d/64/page-frame.html",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9"
}
data = {"code":"0c3Cgx0w30UKV23Hr10w3HLZER3Cgx0M","car_no":"粤BBQ9667","card_no":"粤BBQ9667","entry_time":begin,"third_pay":True,"third_no":third_no,"fee":fee,"discount_fee":fee,"coupon_code":"","coupon_name":"","coupon_fee":"","consume_point_fee":0,"discount_total":fee,"card_id":22}
response = requests.post(url, headers=headers, json=data)
res = response.json()
# print(res)
payurl = res['result']['data']['payUrl']
pattern = r"orderNo=(\w+)"
match = re.search(pattern, payurl)
order_number = match.group(1)
return order_number
def request_third(order_number):
headers = {
"Host": "sytgate.jslife.com.cn",
"Connection": "keep-alive",
"Content-Length": "365",
"xweb_xhr": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a1b) XWEB/9129",
"Content-Type": "application/json",
"Accept": "*/*",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "https://servicewechat.com/wx24b70f0ad2a9a89a/206/page-frame.html",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9"
}
data = {
"userId": "",
"orderNo": order_number, #///////
"appType": "MINI_JSCARLIFE",
"channelId": "LKL_WX",
"subChannelId": "WeChat",
"couponList": [],
"callbackUrl": "MINI_JSCARLIFE",
"payType": "MINI_PROGRAM",
"reqSource": "WX_JTC",
"openId": "ofjjT5LRjJb_dmRhPO0D3YqcT598",
"appSource": "WX",
"subAppSource": "WX_XCX_JTC",
"unionId": "oRWxE56FsqijsUCbuZMUrKnXQKQ4",
"version": "2.0"
}
data1 ={"orderNo":order_number,"appType":"SERVICE"}
response = requests.post("https://sytgate.jslife.com.cn/core-gateway/payop/queryPayType", headers=headers, json=data1)
response = requests.post("https://sytgate.jslife.com.cn/core-gateway/order/pay/prepay", headers=headers, json=data).json()
print('request_third 支付信息:',response)
resultCode = response['resultCode']
return resultCode
def pay(auth_id):
try:
authorization = authorization_list[auth_id]
# print("authorization:",authorization)
first_results = request_first(authorization)
if first_results!=None:
third_no,fee,begin,duration,user_id = first_results
print("third_no:",third_no, "入场时间:", begin, "用户ID:", user_id,"停车时长:",duration, "费用:",fee)
order_number = request_second(authorization,third_no,fee,begin)
# print("order_number:",order_number)
resultCode = request_third(order_number)
if resultCode == 2323:
return f"✅缴费成功 {fee}元"
elif resultCode == 3138:
return f"❌请求频繁系统拒绝 {fee}元"
elif resultCode == 0:
return f"❌支付码已经使用 {fee}元"
else:
return f"❌支付失败 {fee}元"
else:
return "🈲无法查询到车辆入场信息"
except Exception as e:
print("异常>>>>>>>>>>>问题原因:",e )
return "🚫请求异常"
# a =pay(0)
# print(a)
authorization_list = [
# 9月22
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImE5ZWJiNDFlOGQ4YjQ3MTg5YmEwNmVlOGRiNzM1OGRiMDFkYzhmNGJhNDZhYWJlOThiNmExM2I4ZmZiZTljYWRhYzAyYjFiYWY3M2QyZTA3In0.eyJhdWQiOiIyIiwianRpIjoiYTllYmI0MWU4ZDhiNDcxODliYTA2ZWU4ZGI3MzU4ZGIwMWRjOGY0YmE0NmFhYmU5OGI2YTEzYjhmZmJlOWNhZGFjMDJiMWJhZjczZDJlMDciLCJpYXQiOjE3MjY5ODAzNjMsIm5iZiI6MTcyNjk4MDM2MywiZXhwIjoxNzI5NTcyMzYzLCJzdWIiOiI5NTM2MzkiLCJzY29wZXMiOlsiKiJdfQ.GQEdqovMWk0RgsE8M3RyKP-YhGlg8ZubxtEf57azXk786mXGwSx8WIEl_gVOcgy9zzC6YA26i_iUcJpDgtT-yFT2utqUpZS4LCoS0VYCQzXkDmYAPeypjgyK0WYHJ10EBSq6un1dljkIW2kRzKMOsn_Gq3L8jPGgQb4wyErllXpQETdCxoSX90diup7XjGqevhgLQJNmpcK5zv5kp1JCaMXzaqu9c7TnBTefM_pKcKD5P-18ftGIkHpCHcBDUTti3AzCVfrbWqhDRyM1MzQzp7pTL7d0K2YlQ36QgmIaphDrvhLeJCwwpGO1rfyG-ubiEBXisNNMUA9n63VRQZ6vhqYEEqNeY9wW1YRA_PDJY1w76HCKndn6GaV7dwDJXSy3SQEAeL9kl2sh-Abeg6rQEihIwkB03KNAfKdGnAqJXGA2UYORk0Mohh36KAMsUXDmGxdN2aGqTs36Olpqh1L_9aT5HY-Cs0xoOG3ZkZEFRioAPZKnKxCmsWiMXim5Vy-Bi3DQShfyxOhmScGMntEC1PKNOAMG1Ec_JL2NCb_1TkOBxzxlZKKCx6iWQn7mDE3LFkT8Knv3uoROch3roGdaO75oLWlS6BB5rd97yvoZBwAVzKEYJ5fIcCYofoFb7cVKUf3O4XWpK6m6KzsrQrZOfFJRYCil0kq-70aGFzE_2FE",
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjFkOTBlNmU2YThiZGRhYzEyMGYzOGE1ODBjNjUzZmI2ZWM2MDMxNGUxYmJlYzRjYjMzYjZiMzkyMjc2ZWQ0YTIzNWY3YmYxZjJkYjNkOTMxIn0.eyJhdWQiOiIyIiwianRpIjoiMWQ5MGU2ZTZhOGJkZGFjMTIwZjM4YTU4MGM2NTNmYjZlYzYwMzE0ZTFiYmVjNGNiMzNiNmIzOTIyNzZlZDRhMjM1ZjdiZjFmMmRiM2Q5MzEiLCJpYXQiOjE3MjcwMTcyNDYsIm5iZiI6MTcyNzAxNzI0NiwiZXhwIjoxNzI5NjA5MjQ2LCJzdWIiOiI5NDYxNTQiLCJzY29wZXMiOlsiKiJdfQ.1iFR3Il_nYuZP31eDiKDa2xdJmeYeTaR1hagC9jXFxCID2h4a278Ph3w-8mEF1VrK2uq7Hsa0KEkrqV6FrntMeV24_M7uQPPxnJ9zEZ4ZVozjhUOOAvfMNJfyfey812YZrq_hRx2Aa8I34W37D4ICBPdRLwIyJk_EmfBoGbtSMT4a_nxpDsQ-d162sn-Ji33bstg9X9WYm_eGyJiPu8wXWbVsWuY6TyRm6SjzjJp_dNzmeHf37tExWj2qHvW-rRp4IvieOm2HsXV3_JyUL8cfbyki5-0zWswroZKBMe8yVcPnnZ5lSMermiUpBuvddUpc77uwLF5qFuh1hpXzSpBUUbFhdYt06cDSXIpFeVVzPcFkeJSrSSk4z_FVM1OU8uV6SeJuIMSaqwozJxRpRNF26CEBgTKeseaKzwjuZRCiPp9Atfpz8DPU4ZKBeh-bjfF42LWNf3pf9bdrlueILEyIebbFbI6bFajDbGvFtwI7bt031QQONvFbwk5bxOZBJ8V-PTCgZibj-dyohThputgIdgSD0UOGDdUMAv1stXs1DXAAbOk7niZF4lbCOXU9VO6iZ7gbS46fwr5crGrRqVGXnY67c5dTouAKMsTWEOdFa3tX1H5Y8lBDfaC3BMS5fvot1ZxS19wvHOZNQVdyUZvYCdY4ZwnpFXyhMhzbANgB0A",
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjQ4NWQ1NzIzMjY4ZmFjNjdjM2ZiNzFjZjBmNDFjYjA2ZjU2ZmQ4OWE0NGEzNmQ0YTMxMmY5YzNjMTNkY2FkZDExMzgwNjUxYWEzZGIyMjljIn0.eyJhdWQiOiIyIiwianRpIjoiNDg1ZDU3MjMyNjhmYWM2N2MzZmI3MWNmMGY0MWNiMDZmNTZmZDg5YTQ0YTM2ZDRhMzEyZjljM2MxM2RjYWRkMTEzODA2NTFhYTNkYjIyOWMiLCJpYXQiOjE3MjcwMTc0NjksIm5iZiI6MTcyNzAxNzQ2OSwiZXhwIjoxNzI5NjA5NDY5LCJzdWIiOiI5NDU5MjgiLCJzY29wZXMiOlsiKiJdfQ.FOQMZoaic6EpLyRyAICyUolKoFoGC4loeT-6gPtdiB6WzTl-n65dsq9CiR9_ozQ8Gj5gcCCYp4hjE3XpIifcZv9wXDoqeevhDYdLfGe62vwGOfkn7mEHeyJ1WykX4xpa8XPKC-44UYTfjF_Lqy_qNA0JnZz9lZFZGYTHQaueQgehREeNdIcWjjJHH8VsgOncv8zXFUlwzBMJIsauKcZR02PUOsnunNNUeom6tWnwP8m-Jxyt5zg-uz2ovki_pn4me0h6GsTCncbSFKRtWVeyvy14OJpmLrhkmrpTcqkLLFR_XGozu8YqSjHzpB_M5iYbvR-EHON9XGR7XLDfUXhg8nIBlpjr-JBdAundOQgbEAM5NkI1I6VLBsg26rGw_M57w2WjRqFaG3Ny-sYhYTvCvIoa9iAQVXsOwhnuNefDRvu1IWN104zWL6_j_XERwrwhye8TgnkJEe_0SCTExpDNxu0vC5G5Ge8O9EOn-WIaFRw_qw4udANyqrnIZjC4WJJQSb1IdEb7uwNj1ikfDh3DRG4fm1NodpkpvGuSKyGS0p2dHdv__2KknmFfoBWUR_VsRex5wYnv2vyf8civL3pgn_2dg_e_HtBUzlbYM2FAN4gbmdCUbSRmOT_B7P8MjVa_ec1TxdQcwuCAFI-4J1XRAzpMa29cX7dUrWWllCIonTA",
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjNlNTkwM2Q3ZDQ3NTVjZDE4MDdkYTlkNjE1YTIyOTM2NjYxYTdiZTc3ODUyNDdjYmE3MzNmOTRjNTZhN2ExN2YxNTI5OTc4NmNkZmY1Y2EzIn0.eyJhdWQiOiIyIiwianRpIjoiM2U1OTAzZDdkNDc1NWNkMTgwN2RhOWQ2MTVhMjI5MzY2NjFhN2JlNzc4NTI0N2NiYTczM2Y5NGM1NmE3YTE3ZjE1Mjk5Nzg2Y2RmZjVjYTMiLCJpYXQiOjE3MjcwMTc2MDgsIm5iZiI6MTcyNzAxNzYwOCwiZXhwIjoxNzI5NjA5NjA4LCJzdWIiOiIxMDAzNTMwIiwic2NvcGVzIjpbIioiXX0.jaeF2CTfPD17VERFu6mTMBp_MbDafj6nk7KypXf3mIc2JuPn9sglARi5NG2GQQs_E5XikC1jOHvHUUqw3RsHyxJM1OjSU-rSstQSx9yI_xv9XfyDp9g6G2BgbNKfWvp-hHgzQtUf9KlY8lYqJ-tQStfgFs13iokw7Ox1WptGfwb0AnLyeikaY-uneDvPsFmktXxC8HkkgrAconFfwXdmMN0CMCieIRewVPktPbD73lkxzyy6H4NwncPRHY4pcjW6nBsPq6Vm0fdI_Dv3BoyWU6KD8dxwt6VUEvDgrfV_7sD75dKkWI-U_U1YvmX27BAuB6HIp2VBABh2_CSoExXxdVBz1DtVgX9p6PebDfc-dkWAxZ6-2F0PyKIQYU47WWxOGvmhTYtGUUtBay0ffatiTeMrlnzE8GA6Op3QprKrCoOxOlVYmihTVl4HsFqBXmpO9gP7rrUIph_eM68ZEH9NPe6Fy6TZDraKHgLajI07DMYTxrlia0jx0jCfHn3QYkOxDlJVcP0tDDqIm_o77V-LRz6HqP_nPIIeCYf_wxLHaiS27hgDh6ExpAJmsxgj_qK-HDi8112QN4kjqPjF1TeI6hMFMx-Gfns6cXHYI3Zxl9Kd6MmkF1Mi-Nf4LMC5FS-I1fCs0uv9xKzv5KHYZjH2sG9CrRjyuW9FfEzD-tKl7P4",
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjdkNjllMDYxZTcyN2Q5MzNlNjhiZjBjNTFkZGM0NzY5ZGM5YjBmOTE0NjI2YTI3OTE4OTY4NDRhNmJhMzNjZTcxZTY4MTQ1YzQyNmUxMGNkIn0.eyJhdWQiOiIyIiwianRpIjoiN2Q2OWUwNjFlNzI3ZDkzM2U2OGJmMGM1MWRkYzQ3NjlkYzliMGY5MTQ2MjZhMjc5MTg5Njg0NGE2YmEzM2NlNzFlNjgxNDVjNDI2ZTEwY2QiLCJpYXQiOjE3MjcwMTc3NzksIm5iZiI6MTcyNzAxNzc3OSwiZXhwIjoxNzI5NjA5Nzc5LCJzdWIiOiI5NzgzNzQiLCJzY29wZXMiOlsiKiJdfQ.EtEcTlNaQ7IobSdyUHmJXnDbNpAKp_1jE5NurqOSxj4Fp1w7o56DYhZbVtf3rhs-OyxX4nb651FWp3LxNc8LGcmVemF-2Vfvr0PoxU8E8R4k-tADOCb7VCdxZRTVEd0cxxs4ihejuV3c5cdHg9dHsbZj-hNKxaCDATCQLXLXMsX3zjl8uoRwoSLn34IoEk5sJxTLKf7vtvaTh9SCi2AP9pW301JOTh5pp8gBE0buT_u3hFeLrB2xTUzHkalDA-2N4q6j5-jwO12nbdwGWU_mxf8gy_4gOShhgg4sSlz7GVRAcT8ZjhJLMBMp_BwIG_5T93Db_CzqynIj1ycDgxXqDjGRjKOjNHSqwZnjXiy6BXc68v1KWJPaRV_y2JyJm8x2jXxdM4I5U4HxlLM6q2MMUcOElm_XOY-34NbFbaSamaFXyj7LEi4fs9eIXHrfAfjkmDydMKVz3fsMjMHlcMEn2cz21vzsyfJ4hzpSRkd5xwRlQtadvAqCp9xMRue4FrQEHO7ENHJy-VV7TgXiC6OFMpPGeW1A9ZdkO8bDV0adN_CogE6j0DYJXAtYm6cfBfhJcRoMG_7BfUDmc-3Pw7FavedfkgSqdHF4OC90GdMfpsnAF5P2D3eOE1EabioQILpUtt0unyw-v9YoNufpfVXARFTXgbZt_wOKrqAhz-HQdP4",
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImJhZjllOWFhODkyYmU0N2UxNTQ3ZjIzNmRmMDcyOTU2ZjFjZDkwMDczN2JhYmQ2NWIyM2QyOTgwZjllOTcyMzAzNzA2OWU3ODRhYzE4NTg3In0.eyJhdWQiOiIyIiwianRpIjoiYmFmOWU5YWE4OTJiZTQ3ZTE1NDdmMjM2ZGYwNzI5NTZmMWNkOTAwNzM3YmFiZDY1YjIzZDI5ODBmOWU5NzIzMDM3MDY5ZTc4NGFjMTg1ODciLCJpYXQiOjE3MjcwMTc5MzcsIm5iZiI6MTcyNzAxNzkzNywiZXhwIjoxNzI5NjA5OTM3LCJzdWIiOiI4NDg5ODQiLCJzY29wZXMiOlsiKiJdfQ.gRzOI10Fn139ZjScaoXZR_kV6HA92iPtgSNX3mAepa57VVesCO6Iy7vJyRK8GpIdkuxcdAwg62yYoWM6O_82-cpTX45ruckkf_VBrUtNCQ8OJzjOOe2xFtavN1wbQr0zv7jpLCQW4AACA-AteOHWaVKu-94HwVxi_hsMxdsKDQ_KFcIpb3CfCMzODbXT6aOdso0A8-pz_8IS_PJlWDAqRJEgNAlFmVJ5kX4fWDN84PGwhcGXo-Z_S_afrnGqNbTRu1BN_Mk675dz7HWyr50dwWq0r9N4lj4Oy2RgA6WxPQpIUAs6sZ2hwM550_jkCddLZNfQLtbSLwnmTAVFaLS0TJbLy11Kpt_LahJ-B9sk8firb-_du7zDpv4BfJsppAE8ExJFgppHQ5jTHtsGEOs3Gr-IjUGORdrJsd6E_0MBkVWOKc9C-XzNo4YG0vsCPraWOZj5PyqibpPJPVMZ_CPUeF0eVUR9OzV90N4Vqdrqgh6x1v4vfV0D6V9oYDzts5Ad6_ujvbCYPGJxrH5TSxLtkh3luX3yL-Wr7d__g78B1F-JowCsZefdHS21LqVXnTSsx4mEn2XKDaD2dNTsReKNDekEwoF8YYAWL_7bFR39LB7YDScOeCfAshL9VdpIFtmHa9EODhksC8WiTyIa0Tnk_a2FLTjKFa6o3-Vv-F-kIgI",
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjdmNTZiMjVlNTYzOThmYjQzY2IwNmJiNjBhNGNiMGY2YmNlMzJkNzIzZTc1YTg2Y2Q0MjE1N2Y3NzcxYzZkMjFkYmRmYjk0OTVkZjVlODZiIn0.eyJhdWQiOiIyIiwianRpIjoiN2Y1NmIyNWU1NjM5OGZiNDNjYjA2YmI2MGE0Y2IwZjZiY2UzMmQ3MjNlNzVhODZjZDQyMTU3Zjc3NzFjNmQyMWRiZGZiOTQ5NWRmNWU4NmIiLCJpYXQiOjE3MjY5ODA1NDIsIm5iZiI6MTcyNjk4MDU0MiwiZXhwIjoxNzI5NTcyNTQyLCJzdWIiOiI4NDcyNDUiLCJzY29wZXMiOlsiKiJdfQ.vLGyA6oKbyqAuAV2OXgxv2uhzUp8iBMA3kbaqMjnyMibhF_667QcOl-FpZlIDGdMvCF5PjHiN5krYfdkc6ebdHp1fO3S_sUuHmnj1ZnTKU64lT_Y7wRW7A7yGRgVrjF0kntw0kkEulCKkgTNmCcTq-tLNFlNPCIpWldJzptyvxj_737gc6yafm6vohDAkQ-uwkuKqyjEpR2yqlivH0d7Pk4wMwg-fDHEbg_D55fYJJAozv0a9PU_oUb29RX8_1XBpe5iKcR9yqjj1H1txp3e2ilJHw0Ttka-xDrCc2LWScUnE5vaQgILTJz15lEY6OeAGsh6DmAA0tu0_utH9sNgx8QDxNaAXpIW5BLfyo5CzY4ZwWuV-wVweY5s3HKUQx6i56wnSHsNYyARwRHiCIk3rSnOD3vALV77L9uDab49-vV2JWArdESiFxtibQbyGsfwXdGTH8Qwu09En9n0hR2B6lNJD7srEBFcGCLztUagiJplhLPIKd4cRT5zCp9OZGw9TFr7mtKZjNS21SVLg8BO2DwFYTfuBrOLlmvAQetGS1gablT3mo86DGS5Kvl9Cmvcujmjco1Czsa8JjPTMlD_z_OmmAci2XA-5w6BcrxJiOiwNTcELJhRGZARuNf25D52Qrx6poPFSWU5BYUTzjqblUD1cl2bUKivWwR4Hkadofk",
]
radio_num = []
for k,v in enumerate(authorization_list):
if v.startswith("Bearer"):
radio_num.append(k)
# print(k,v)
history = []
with gr.Blocks() as demo:
query_button = gr.Button("查询")
@query_button.click(inputs=None, outputs= gr.Json(label="查询结果"))
def query_click():
authorization = authorization_list[0]
# print("authorization:",authorization)
first_results = request_first(authorization)
third_no,fee,begin,duration,user_id = first_results
return {"费用":fee,"入场时间":begin,"时长":duration}
# 输入组件:单选按钮
auth_id = gr.Radio(radio_num, label="选择授权ID")
# 输出组件:文本和 DataFrame
output = gr.Dataframe(headers=["支付时间", "支付结果", "使用ID"], label="支付历史")
# 支付按钮组件
pay_button = gr.Button("支付")
@pay_button.click(inputs=auth_id, outputs= output)
def pay_click(auth_id):
pay_result = pay(auth_id)
history.append([str((datetime.now()+ timedelta(hours=6)).strftime("%Y-%m-%d %H:%M:%S")) , str(pay_result) ,str(auth_id) ])
return history
demo.launch(auth=("admin", "eyJ0eXAiOiJKV1QiLCJhbGciOiJUzI1NiIsI"))