update pay ui

This commit is contained in:
2025-12-12 16:30:38 +08:00
parent 6ecae5ed76
commit 969780e784

View File

@@ -4002,6 +4002,9 @@ def api_login_wechat():
session['logged_in'] = True session['logged_in'] = True
# 9. 构造返回数据 - 完全匹配要求的格式 # 9. 构造返回数据 - 完全匹配要求的格式
# 手机绑定状态
phone_bindcd = bool(user.phone and user.phone_confirmed)
response_data = { response_data = {
'code': 200, 'code': 200,
'data': { 'data': {
@@ -4016,7 +4019,10 @@ def api_login_wechat():
'nickname': user.nickname or user.username, 'nickname': user.nickname or user.username,
'reputation_score': user.reputation_score, 'reputation_score': user.reputation_score,
'user_level': user.user_level, 'user_level': user.user_level,
'username': user.username 'username': user.username,
# 手机绑定状态
'phone_bindcd': phone_bindcd,
'phone': user.phone if phone_bindcd else None
} }
}, },
'message': '登录成功' 'message': '登录成功'
@@ -4047,27 +4053,30 @@ def api_login_wechat():
# ============================================ # ============================================
# 微信获取手机号接口 # 微信获取手机号接口
# ============================================ # ============================================
# 缓存微信 access_token # 微信 access_token 缓存 Key
_wechat_access_token_cache = { _WECHAT_ACCESS_TOKEN_KEY = 'vf_wechat_access_token'
'token': None,
'expires_at': 0
}
def get_wechat_access_token(): def get_wechat_access_token():
""" """
获取微信小程序 access_token带缓存 获取微信小程序 access_token使用 Redis 缓存,支持多 worker 共享
access_token 有效期为 7200 秒,提前 5 分钟刷新 access_token 有效期为 7200 秒,提前 5 分钟刷新
""" """
import time import time
global _wechat_access_token_cache
current_time = time.time() try:
import redis
redis_client = redis.from_url(os.environ.get('REDIS_URL', 'redis://localhost:6379/0'))
# 如果缓存有效提前5分钟刷新 # 尝试从 Redis 获取缓存的 token
if (_wechat_access_token_cache['token'] and cached = redis_client.get(_WECHAT_ACCESS_TOKEN_KEY)
_wechat_access_token_cache['expires_at'] > current_time + 300): if cached:
return _wechat_access_token_cache['token'] logger.debug("从 Redis 获取微信 access_token")
return cached.decode('utf-8')
except Exception as e:
logger.warning(f"Redis 获取 access_token 失败: {e},将直接请求微信接口")
redis_client = None
# 请求新的 access_token # 请求新的 access_token
url = 'https://api.weixin.qq.com/cgi-bin/token' url = 'https://api.weixin.qq.com/cgi-bin/token'
@@ -4082,10 +4091,18 @@ def get_wechat_access_token():
result = response.json() result = response.json()
if 'access_token' in result: if 'access_token' in result:
_wechat_access_token_cache['token'] = result['access_token'] access_token = result['access_token']
_wechat_access_token_cache['expires_at'] = current_time + result.get('expires_in', 7200) expires_in = result.get('expires_in', 7200)
logger.info(f"获取微信 access_token 成功,有效期: {result.get('expires_in', 7200)}")
return result['access_token'] # 存入 Redis提前 5 分钟过期,确保不会使用即将过期的 token
if redis_client:
try:
redis_client.setex(_WECHAT_ACCESS_TOKEN_KEY, expires_in - 300, access_token)
logger.info(f"微信 access_token 已缓存到 Redis有效期: {expires_in - 300}")
except Exception as e:
logger.warning(f"Redis 缓存 access_token 失败: {e}")
return access_token
else: else:
logger.error(f"获取微信 access_token 失败: {result}") logger.error(f"获取微信 access_token 失败: {result}")
return None return None