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
# 9. 构造返回数据 - 完全匹配要求的格式
# 手机绑定状态
phone_bindcd = bool(user.phone and user.phone_confirmed)
response_data = {
'code': 200,
'data': {
@@ -4016,7 +4019,10 @@ def api_login_wechat():
'nickname': user.nickname or user.username,
'reputation_score': user.reputation_score,
'user_level': user.user_level,
'username': user.username
'username': user.username,
# 手机绑定状态
'phone_bindcd': phone_bindcd,
'phone': user.phone if phone_bindcd else None
}
},
'message': '登录成功'
@@ -4047,27 +4053,30 @@ def api_login_wechat():
# ============================================
# 微信获取手机号接口
# ============================================
# 缓存微信 access_token
_wechat_access_token_cache = {
'token': None,
'expires_at': 0
}
# 微信 access_token 缓存 Key
_WECHAT_ACCESS_TOKEN_KEY = 'vf_wechat_access_token'
def get_wechat_access_token():
"""
获取微信小程序 access_token带缓存
获取微信小程序 access_token使用 Redis 缓存,支持多 worker 共享
access_token 有效期为 7200 秒,提前 5 分钟刷新
"""
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分钟刷新
if (_wechat_access_token_cache['token'] and
_wechat_access_token_cache['expires_at'] > current_time + 300):
return _wechat_access_token_cache['token']
# 尝试从 Redis 获取缓存的 token
cached = redis_client.get(_WECHAT_ACCESS_TOKEN_KEY)
if cached:
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
url = 'https://api.weixin.qq.com/cgi-bin/token'
@@ -4082,10 +4091,18 @@ def get_wechat_access_token():
result = response.json()
if 'access_token' in result:
_wechat_access_token_cache['token'] = result['access_token']
_wechat_access_token_cache['expires_at'] = current_time + result.get('expires_in', 7200)
logger.info(f"获取微信 access_token 成功,有效期: {result.get('expires_in', 7200)}")
return result['access_token']
access_token = result['access_token']
expires_in = result.get('expires_in', 7200)
# 存入 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:
logger.error(f"获取微信 access_token 失败: {result}")
return None