update pay ui
This commit is contained in:
51
app_vx.py
51
app_vx.py
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user