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
|
||||
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user