forum
This commit is contained in:
43
backend/shop/utils.py
Normal file
43
backend/shop/utils.py
Normal file
@@ -0,0 +1,43 @@
|
||||
import requests
|
||||
from django.core.cache import cache
|
||||
from .models import WeChatPayConfig
|
||||
|
||||
def get_access_token(config=None):
|
||||
"""
|
||||
获取微信接口调用凭证 (client_credential)
|
||||
"""
|
||||
# 尝试从缓存获取
|
||||
cache_key = 'wechat_access_token'
|
||||
if config:
|
||||
cache_key = f'wechat_access_token_{config.app_id}'
|
||||
|
||||
token = cache.get(cache_key)
|
||||
if token:
|
||||
return token
|
||||
|
||||
if not config:
|
||||
# 优先查找指定 AppID
|
||||
config = WeChatPayConfig.objects.filter(app_id='wxdf2ca73e6c0929f0').first()
|
||||
if not config:
|
||||
config = WeChatPayConfig.objects.filter(is_active=True).first()
|
||||
|
||||
if not config or not config.app_id or not config.app_secret:
|
||||
return None
|
||||
|
||||
url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={config.app_id}&secret={config.app_secret}"
|
||||
try:
|
||||
response = requests.get(url, timeout=10)
|
||||
data = response.json()
|
||||
|
||||
if 'access_token' in data:
|
||||
token = data['access_token']
|
||||
expires_in = data.get('expires_in', 7200)
|
||||
# 缓存 Token,留出 200 秒缓冲时间
|
||||
cache.set(cache_key, token, expires_in - 200)
|
||||
return token
|
||||
else:
|
||||
print(f"获取 AccessToken 失败: {data}")
|
||||
except Exception as e:
|
||||
print(f"获取 AccessToken 异常: {str(e)}")
|
||||
|
||||
return None
|
||||
Reference in New Issue
Block a user