""" Django settings for a_long_dianjing project. 开发环境配置 - 参照旧项目结构精简 """ from pathlib import Path from datetime import timedelta import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production SECRET_KEY = 'django-insecure-9+xu)m%#!#qblgby5sq!sjyg5nj9lir78+&*f$28$459#yktej' # 开发环境可暂用,生产必须改 DEBUG = False # 开发环境为 True ALLOWED_HOSTS = ['localhost', '127.0.0.1','xingquewangluo.site','ios808.top','6ccy.top','wenhe.nmslb.com'] # 根据开发前端地址可添加 # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 第三方应用 (根据 requirements.txt 已安装的) 'rest_framework', 'rest_framework_simplejwt', 'corsheaders', 'django_celery_results', # 你的自定义应用 (按已创建的拼音命名) 'celery', 'yonghu', 'dingdan', 'shangpin', 'peizhi', 'houtai', # 'games', # 【待确认】你提到 games 还没创建,暂不添加 'utils', 'shangdian', 'dengji', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', # 跨域中间件放最前 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', # 默认开启,如API无需可注释 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', # 'guanapi.middleware.OpLogMiddleware', # 【待确认】这是旧项目的自定义中间件,新项目需要吗? ] ROOT_URLCONF = 'a_long_dianjing.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'a_long_dianjing.wsgi.application' # Database # 根据你提供的信息配置 (本地开发,端口3307) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #'NAME': 'a_long91', # 你创建的数据库名 'NAME': 'wenhe_dianjing', 'USER': 'root', # 你的本地MySQL用户名 #'PASSWORD': 'a_long999911111', # 你的本地MySQL密码 #'PASSWORD': 'ujedr783w4rfjsr8734fe4', 'PASSWORD': 'shgdy273tahsgd62u3tGHFY', 'HOST': '172.17.0.7', #'HOST': 'sh-cdb-ga6oxm4s.sql.tencentcdb.com', 'PORT': '3306', # 注意端口是3307 #'PORT': '20263', 'OPTIONS': { 'charset': 'utf8mb4', 'init_command': "SET time_zone='+08:00'", # 保持与旧项目一致 } } } # Password validation AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization LANGUAGE_CODE = 'zh-Hans' # 使用中文 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_TZ = False # 保持与旧项目一致,不使用UTC时区 # Static files (CSS, JavaScript, Images) STATIC_URL = 'static/' # 开发环境静态文件目录,可参照旧项目添加 MEDIA 配置 # MEDIA_URL = 'media/' # MEDIA_ROOT = BASE_DIR / 'media' # Default primary key field type DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # ==================== 以下为第三方库及自定义配置 ==================== # settings.py # 修改SIMPLE_JWT配置 SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(days=36500), 'REFRESH_TOKEN_LIFETIME': timedelta(days=36500), 'ROTATE_REFRESH_TOKENS': False, 'BLACKLIST_AFTER_ROTATION': False, 'UPDATE_LAST_LOGIN': False, 'ALGORITHM': 'HS256', 'SIGNING_KEY': SECRET_KEY, 'VERIFYING_KEY': None, 'AUDIENCE': None, 'ISSUER': None, 'JWK_URL': None, 'LEEWAY': 0, 'AUTH_HEADER_TYPES': ('Bearer',), 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', # 修改这里:使用yonghuid而不是id 'USER_ID_FIELD': 'yonghuid', 'USER_ID_CLAIM': 'yonghuid', 'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule', 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), 'TOKEN_TYPE_CLAIM': 'token_type', 'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser', 'JTI_CLAIM': 'jti', } # 添加自定义认证后端 AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', ] # 必须指定用户模型(即使它不继承AbstractBaseUser) AUTH_USER_MODEL = 'yonghu.UserMain' # DRF配置(也非常简单) REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'utils.jwt_auth.YonghuidJWTAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', # 匿名用户限制 'rest_framework.throttling.UserRateThrottle', # 登录用户限制 ], 'DEFAULT_THROTTLE_RATES': { 'anon': '100/minute', # 匿名用户每分钟100次 'user': '1000/minute', # 登录用户每分钟1000次 }, # 🔥 关键:使用自定义异常处理器 'EXCEPTION_HANDLER': 'utils.exception_handler.custom_exception_handler', # 🔥 生产环境只返回JSON,不返回HTML(更安全) 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', ], } # CORS settings(本地 Vite 客服后台 + 线上域名) CORS_ALLOWED_ORIGINS = [ "http://localhost:8080", "http://127.0.0.1:8080", "http://localhost:5173", "http://127.0.0.1:5173", "http://localhost:5174", "http://127.0.0.1:5174", "http://localhost:3000", "http://127.0.0.1:3000", "http://121.4.54.129", "https://wenhe.nmslb.com:9187", "https://wenhe.nmslb.com:4321", "https://wenhe.nmslb.com", ] CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_METHODS = ( "GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", ) CORS_ALLOW_HEADERS = [ "accept", "accept-encoding", "authorization", "content-type", "dnt", "origin", "user-agent", "x-csrftoken", "x-requested-with", ] # Django 4+:前端带 Cookie/凭证跨域访问时需要信任来源 CSRF_TRUSTED_ORIGINS = [ "http://localhost:5173", "http://127.0.0.1:5173", "http://localhost:5174", "http://127.0.0.1:5174", "http://localhost:8080", "http://127.0.0.1:8080", "https://wenhe.nmslb.com", "https://wenhe.nmslb.com:9187", "https://wenhe.nmslb.com:4321", ] # 【待确认】自定义用户模型,你需要在 yonghu/models.py 中创建 class Yonghu #AUTH_USER_MODEL = 'yonghu.Yonghu' # OSS配置 COS_SECRET_ID ='AKIDU6WikZBcz96xesxpVM3XoslS3TjogLDx' COS_SECRET_KEY ='qcJzVqLdkeKyXwKckjV5SCmncFfrqdu2' COS_REGION = 'ap-guangzhou' #COS_BUCKET = 'julebu-1361527063' COS_BUCKET = 'wenhedskjdshjshfjshjfjksdnk236-1404472910' COS_SCHEME = 'https' # 使用HTTPS COS_DOMAIN = f'https://{COS_BUCKET}.cos.{COS_REGION}.myqcloud.com' # settings.py - 在COS配置部分添加 COS_APPID = '1404472910' # 你的腾讯云APPID(julebu-1361527063中的数字部分) COS_STS_DURATION = 7200 # STS临时凭证有效期(秒) # ==================== 业务相关配置 (值先空着,结构可保留) ==================== # 微信小程序配置 (开发环境可先留空或使用测试号) #WEIXIN_APPID = 'wx0e4be86faac4a8d1' # 你的小程序APPID WEIXIN_APPID = 'wx568f9b618bfa7578' # 你的小程序APPID WEIXIN_SECRET = '269dbb2a81fa843ef92f0cee8857c841' # 微信虚拟支付配置 VP_OFFER_ID = '1450521456' # 虚拟支付应用ID VP_APPKEY = '4cQkc13i7rkFNbubUJ63ijP2MMCrpB45' # 正式环境密钥 VP_APPKEY_SANDBOX = 'zlMiTaXppd6OtgLNKKOqmUGnJZuPPq5G' # 沙箱环境密钥 VP_ENV = 0 # 1=沙箱(测试), 0=正式(上线改这里) VP_PRODUCT_ID = 'spgm1001' # 在后台道具管理中创建并发布后获取 # 原有微信配置保持不变(WEIXIN_APPID, WEIXIN_SECRET) # 🆕【新增】服务号配置 WEIXIN_OFFICIAL_APPID = 'wx49a7cfa8dc2ecc49' # 服务号APPID WEIXIN_OFFICIAL_SECRET = 'ba1bba743756058edbea99f13ae5bac1' # 服务号SECRET WEIXIN_OFFICIAL_TOKEN = 'u7623ghdwegftr763dhgwe' # 服务号Token WEIXIN_OFFICIAL_ENCODING_AES_KEY = 'y9bSP14ujdqJvrx1LAnYSEftaJ3yuwNixSHJef4DdRd' # 可选 WEIXIN_TEMPLATE_ID = 'Ngs1sT9TPyFaN4cA108YyMV_0nnutTynPQFXoOdNZZE' # 模板ID # 🆕【新增】模板消息配置 WEIXIN_TEMPLATE_MAX_PER_MINUTE = 950 # 每分钟最大发送量(留50缓冲) WEIXIN_TEMPLATE_BATCH_SIZE = 100 # 每批发送数量 WEIXIN_BROADCAST_ENABLED = True # 服务号订单广播总开关 WEIXIN_BROADCAST_WORKERS = 30 # Celery 任务内并发推送线程数(勿过大,避免触发微信频控) # 打手无邀请码一键注册(须与小程序 default-invite-code.js 保持一致) DASHOU_DEFAULT_INVITE_CODE = '0000008U3Ck4267NmxuY' # 默认邀请码在库中查不到时,回退到该管事 yonghuid(请确保该账号在库中存在且为管事) DASHOU_DEFAULT_GUANSHI_YONGHUID = '0000008' WEIXIN_MCHID = '1746784529' # 商户号,支付功能需要紧急 WEIXIN_SHANGHUMIYAO = 'thgnfbdyhd4536dbvgf7dgfhcvdgfh58'# 商户密钥,支付功能需要紧急 #WEIXIN_SECRET = '3c3673cf052571dea9e3bea88e198434' # 你的小程序SECRET #WEIXIN_MCHID = '1731500296' # 商户号,支付功能需要 #WEIXIN_MCHID = '1103593250' # 商户号,支付功能需要 #WEIXIN_SHANGHUMIYAO = 'Dujieduze53631383771411017633490' #WEIXIN_SHANGHUMIYAO = 'abc12345asgjhasklsasdcndcsdklcns'# 商户密钥,支付功能需要 # 罚款缴纳微信支付配置 FAKUAN_PAY_DESCRIPTION = '罚款缴纳' # 支付描述 FAKUAN_PAY_NOTIFY_URL = 'https://wenhe.nmslb.com/hqhd/yonghu/fk_huitiao' # 微信支付回调地址(根据实际域名调整) WEIXIN_NOTIFY_URL = 'https://wenhe.nmslb.com/hqhd/dingdan/pay-notify/' # 支付回调地址,如:http://你的域名/api/pay/callback/ # settings.py 或相应配置文件中 WEIXIN_PAY_DESCRIPTION = "阿龙电竞" # 支付描述 # 押金充值相关配置 YAJIN_PAY_DESCRIPTION = "打手押金充值" # 押金支付描述 YAJIN_PAY_NOTIFY_URL = "https://wenhe.nmslb.com/hqhd/shangpin/yajinhuitiao" # 押金支付回调地址 # 积分充值相关配置 JIFEN_PAY_DESCRIPTION = "打手积分补充" # 积分支付描述 JIFEN_PAY_NOTIFY_URL = "https://wenhe.nmslb.com/hqhd/shangpin/jifenhuitiao" # 积分支付回调地址 # 会员充值相关配置 HUIYUAN_PAY_DESCRIPTION = "打手会员充值" # 会员支付描述 HUIYUAN_PAY_NOTIFY_URL = "https://wenhe.nmslb.com/hqhd/shangpin/huiyuanhuitiao" # 会员支付回调地址 # 考核支付配置 KAOHE_PAY_DESCRIPTION = '考核金牌-缴纳考核费' KAOHE_PAY_NOTIFY_URL = 'https://wenhe.nmslb.com/hqhd/yonghu/kh_huitiao' # 替换为实际回调地址 KAOHE_PAY_DEFAULT_FEE = 5.00 # 未配置费用时的默认金额 WEIXIN_CERT_PATH = '/opt/1panel/apps/openresty/openresty/www/sites/119.28.221.247.1199/tuikuanzhengshu/apiclient_cert.pem' # 证书文件路径 WEIXIN_KEY_PATH = '/opt/1panel/apps/openresty/openresty/www/sites/119.28.221.247.1199/tuikuanzhengshu/apiclient_key.pem' # 密钥文件路径 # settings.py SHANGJIA_CZ_PREFIX = "CzSJ" # 商家充值订单前缀 SHANGJIA_CZ_PAY_DESCRIPTION = "阿龙电竞-商家余额充值" SHANGJIA_CZ_PAY_NOTIFY_URL = "https://wenhe.nmslb.com/hqhd/shangpin/sjhuitiao" SHANGJIA_CZ_MIN_AMOUNT = 1 SHANGJIA_CZ_MAX_AMOUNT = 10000 # 订单ID前缀配置 ORDER_PREFIX = { 'yajin': 'CzYJ', # 押金订单前缀 'jifen': 'CzJF', # 积分订单前缀 'huiyuan': 'CzHY', # 会员订单前缀 } # 腾讯云即时通讯 (IM) - 开发环境可暂不配置 TENCENT_IM_CONFIG = { 'SDK_APP_ID': 0, # 整数 'SECRET_KEY': '', } # 阿里云短信 - 开发环境可暂不配置 ALIYUN_SMS_CONFIG = { 'ACCESS_KEY_ID': '', 'ACCESS_KEY_SECRET': '', 'SIGN_NAME': '', 'TEMPLATE_CODE': '', 'REGION_ID': 'cn-hangzhou', } # HashID (用于加密ID,旧项目有,新项目需要吗?) # HASHID_FIELD_SALT = 'a_long_dianjing_2025_salt' # 【待确认】请设置你的盐值 # settings.py 尾部添加 # settings.py # settings.py # settings.py 中添加配置 #GOEASY_APPKEY = 'BC-32e2991c69bc47e1b538e73aaed37fc1' # 你的AppKey GOEASY_APPKEY = 'BC-03d6d588e8a047fc8170ac29ec54220f' # 你的AppKey(阿龙) #GOEASY_SECRET = 'A469ABAA3cc34D64' # 从GoEasy控制台获取 GOEASY_SECRET = '42c38958a09348e7' # 从GoEasy控制台获取(阿龙) GOEASY_REST_URL = 'https://rest-hz.goeasy.io/v2/im/message' #正式环境 # settings.py # H5静态页面域名配置 H5_DOMAIN = 'https://wenhe.nmslb.com:9187' # 生产环境 # H5_DOMAIN = 'https://test-h5.yourdomain.com' # 测试环境 """ 阿龙电竞 - Django设置文件中的Celery配置部分 请在您的settings.py中添加以下配置 """ # ==================== Celery配置 ==================== # Redis作为消息代理和结果后端 # 生产环境请修改这里的Redis连接信息 REDIS_HOST = '172.19.0.2' # Redis服务器IP REDIS_PORT = 6379 REDIS_PASSWORD = 'a_long919191' # 如果有密码,替换为你的密码 REDIS_DB_CELERY = 0 REDIS_DB_RESULT = 1 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', 'LOCATION': f'redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/2', 'TIMEOUT': 300, 'OPTIONS': { # 不需要 CLIENT_CLASS } } } # 构建Redis连接字符串 if REDIS_PASSWORD: CELERY_BROKER_URL = f'redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB_CELERY}' CELERY_RESULT_BACKEND = f'redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB_RESULT}' else: CELERY_BROKER_URL = f'redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB_CELERY}' CELERY_RESULT_BACKEND = f'redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB_RESULT}' # 任务接受的内容类型 CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' # 时区设置 CELERY_TIMEZONE = 'Asia/Shanghai' CELERY_ENABLE_UTC = True # settings.py 末尾添加(在其他 Celery 配置之后) CELERY_IMPORTS = ('dingdan.tongzhi_tasks',) # 生产硬性开关:仅允许新订单服务号广播 Celery 任务,其余一律禁止执行 CELERY_ONLY_ORDER_BROADCAST = True # 任务超时设置 CELERY_TASK_TIME_LIMIT = 300 # 任务最大执行时间300秒 CELERY_TASK_SOFT_TIME_LIMIT = 240 # 软超时240秒 # Worker并发设置 CELERY_WORKER_CONCURRENCY = 4 # 根据服务器CPU核心数调整 CELERY_WORKER_PREFETCH_MULTIPLIER = 1 # 任务确认设置 CELERY_TASK_ACKS_LATE = True CELERY_WORKER_DISABLE_RATE_LIMITS = True # 队列配置 CELERY_TASK_DEFAULT_QUEUE = 'default' CELERY_TASK_QUEUES = { 'default': { 'exchange': 'default', 'routing_key': 'default', }, 'order_tasks': { 'exchange': 'order_tasks', 'routing_key': 'order_tasks', }, 'periodic_tasks': { 'exchange': 'periodic_tasks', 'routing_key': 'periodic_tasks', }, 'broadcast': { 'exchange': 'broadcast', 'routing_key': 'broadcast', }, } CELERY_TASK_ROUTES = { 'dingdan.tongzhi_tasks.dingdan_guangbo': {'queue': 'broadcast'}, } # ==================== 定时任务时间配置 ==================== # 所有时间配置都在这里,方便修改 # 订单超时时间(秒) - 48小时 ORDER_EXPIRE_SECONDS = 48 * 60 * 60 # 172800秒 # 订单自动结算(Celery 延时任务 + 定时补偿)是否启用 ORDER_AUTO_SETTLE_ENABLED = False # 每日任务执行时间(24小时制) DAILY_TASK_HOUR = 0 # 0点 DAILY_TASK_MINUTE = 0 # 0分 # 每月任务执行时间 MONTHLY_TASK_DAY = 1 # 每月1日 MONTHLY_TASK_HOUR = 0 # 0点 MONTHLY_TASK_MINUTE = 0 # 0分 # 订单检查频率(分钟) ORDER_CHECK_INTERVAL = 5 # 每5分钟检查一次 # ==================== 跨平台订单互通配置 ==================== # 接口认证令牌(双方约定,用于简单验证) CROSS_PLATFORM_TOKEN = 'jdjdjshwjqk' # 对方平台接口基础URL(需根据实际部署修改) PARTNER_BASE_URL = 'https://www.abas.asia/hqhd' # 对方平台各接口路径(可根据实际情况调整,但双方需保持一致) PARTNER_SYNC_ORDER_URL = '/dingdan/partner_sync_order' # 接收派单 PARTNER_CHECK_CLAIM_URL = '/dingdan/partner_check_claim' # 抢单询问 PARTNER_NOTIFY_CLAIM_URL = '/dingdan/partner_notify_claim' # 抢单成功通知 PARTNER_REFUND_NOTIFY_URL = '/dingdan/partner_refund_notify' # 退款通知 # 我方代表对方发单的商家ID(需在数据库中存在,且具有商家扩展表) AGENT_SHANGJIA_ID = '5438898' # 用于验证的会员ID(根据业务约定) CROSS_PLATFORM_MEMBER_ID = 'VC7CTU' # 默认游戏类型ID(当对方未传递时使用) CROSS_PLATFORM_GAME_TYPE_ID = 2 # 允许跨平台的商家ID列表(白名单) CROSS_PLATFORM_WHITELIST = ['001'] # settings.py ALLOW_INCREASE_ADMINS = ['15552331414','19053065029','13206038845','16686411550','15555555555','13191651805'] # 示例手机号 # ========== 管理员批量链接白名单 ========== ADMIN_BATCH_LINK_ALLOWED_PHONES = [ '15552331414', '19053065029', ] BATCH_LINK_DEFAULT_COUNT = 1 BATCH_LINK_MAX_COUNT = 100 # ==================== 日志配置(终端输出,便于生产排查) ==================== LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '[{asctime}] {levelname} {name} {pathname}:{lineno} — {message}', 'style': '{', }, 'simple': { 'format': '[{asctime}] {levelname} {name} — {message}', 'style': '{', }, }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'formatter': 'verbose', 'level': 'INFO', }, }, 'root': { 'handlers': ['console'], 'level': 'INFO', }, 'loggers': { 'django': { 'handlers': ['console'], 'level': 'INFO', 'propagate': False, }, 'django.request': { 'handlers': ['console'], 'level': 'ERROR', 'propagate': False, }, 'yonghu': { 'handlers': ['console'], 'level': 'INFO', 'propagate': False, }, 'dingdan': { 'handlers': ['console'], 'level': 'INFO', 'propagate': False, }, 'utils': { 'handlers': ['console'], 'level': 'INFO', 'propagate': False, }, }, } WECHAT_PAY_V3_CONFIG = { 'MCHID': '1746784529', # 商户号 'APPID': 'wx568f9b618bfa7578', # 小程序APPID 'API_V3_KEY': 'askldskjd783y827Jjksdnhfj3489439', # APIv3密钥(32字节) 'PRIVATE_KEY_PATH': '/opt/1panel/apps/openresty/openresty/www/sites/119.28.221.247.1199/huizhifuzhengshu/apiclient_key.pem', # 商户私钥文件路径 'CERT_SERIAL_NO': '69B157D89C273CF07A3E233B3BCC84A94D142FB5', # 商户证书序列号 'PLATFORM_CERT_DIR': '/opt/1panel/apps/openresty/openresty/www/sites/119.28.221.247.1199/huizhifuzhengshu/pub_key.pem', # 存放微信平台证书公钥的目录(文件名:序列号.pem) 'NOTIFY_URL': 'https://wenhe.nmslb.com/hqhd/yonghu/tixiancallback', # 回调地址 'TRANSFER_SCENE_ID': '1005', # 替换为你的实际场景ID } # 多商户证书上传根目录(每个商户一个子目录:{BASE}/{mch_id}/) WECHAT_MCH_CERT_BASE_DIR = '/opt/1panel/apps/openresty/openresty/www/sites/119.28.221.247.1199/huizhifuzhengshu' CROSS_PLATFORM_SYNC_TOKEN = 'xK9mP2vL8qW5rT7y'