更新配置

This commit is contained in:
ping 2026-03-19 18:04:20 +08:00
parent 4aecf56050
commit 7d127c873c
7 changed files with 19 additions and 405 deletions

View File

@ -1,8 +0,0 @@
{
"smsConfig": {
"baidu_sms_access_key": "ALTAKPk92fX9cgGDax83yNL8mP",
"baidu_sms_access_key_secret": "9b16b8efd4dc463d8bbd5462db1db8a5",
"baidu_sms_host": "sms.bj.baidubce.com",
"baidu_sms_signature_id": "sms-sign-xQYUwp42637"
}
}

View File

@ -1,37 +0,0 @@
CREATE TABLE `sms_template` (
`id` varchar(32) NOT NULL COMMENT 'id',
`name` varchar(32) DEFAULT NULL COMMENT '模板名称',
`template_type` varchar(32) DEFAULT NULL COMMENT '模板类型',
`code` varchar(32) DEFAULT NULL COMMENT '模板编码',
`content` varchar(200) DEFAULT NULL COMMENT '模板内容',
`description` varchar(100) DEFAULT NULL COMMENT '场景说明',
`provider` varchar(100) DEFAULT NULL COMMENT '短信供应商名称',
`del_flg` varchar(1) DEFAULT '0' COMMENT '删除标志',
`create_at` timestamp NULL DEFAULT current_timestamp() COMMENT '创建时间戳',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci ROW_FORMAT=DYNAMIC COMMENT='短信模板表';
CREATE TABLE `validatecode` (
`id` varchar(32) NOT NULL COMMENT 'id',
`vcode` varchar(32) DEFAULT NULL COMMENT '验证码',
`expire_time` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '有效期',
`del_flg` varchar(1) DEFAULT '0' COMMENT '删除标志',
`create_at` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '创建时间戳',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci ROW_FORMAT=DYNAMIC COMMENT='验证码表';
CREATE TABLE `sms_record` (
`id` varchar(32) NOT NULL COMMENT 'id',
`customerid` varchar(32) DEFAULT NULL COMMENT '客户id',
`send_type` varchar(32) DEFAULT NULL COMMENT '发送类型',
`mobile` varchar(15) DEFAULT NULL COMMENT '手机号',
`email` varchar(32) DEFAULT NULL COMMENT '邮箱',
`message` varchar(510) DEFAULT NULL COMMENT '发送内容',
`send_time` varchar(32) DEFAULT NULL COMMENT '发送时间',
`send_status` varchar(1) DEFAULT NULL COMMENT '发送状态',
`task_status` varchar(2) DEFAULT NULL COMMENT '任务状态 1:待发送,2:待定时发送,11:发送MQ成功,12:MQ消费成功,21:请求成功,22:请求失败,31:取消发送',
`remark` varchar(200) DEFAULT NULL COMMENT '发送失败备注信息',
`del_flg` varchar(1) DEFAULT NULL COMMENT '删除标志',
`create_at` timestamp NULL DEFAULT current_timestamp() COMMENT '创建时间戳',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci ROW_FORMAT=DYNAMIC COMMENT='短信邮箱记录表';

View File

@ -7,17 +7,9 @@ SMS Send Module Init
- load_smssend() 加载模块
- 将功能注册到 ServerEnv
"""
import sys
sys.path.append('D:/Code/dagflow_demo/')
import asyncio
from functools import partial
from appPublic.jsonConfig import getConfig
from appPublic.log import debug, exception, error, info
from appPublic.log import info
from ahserver.serverenv import ServerEnv
from ahserver.configuredServer import add_cleanupctx
import random
import string
from .smssend import (
SMSEngine,
@ -54,7 +46,6 @@ async def smsbacktask(engine, app):
def load_smssend():
config = getConfig()
global _sms_engine_instance
_sms_engine_instance = SMSEngine()
info(f'SMS Send Module loaded, signature_id: {_sms_engine_instance.signature_id}')

View File

@ -70,11 +70,19 @@ class SMSEngine:
doc = "https://cloud.baidu.com/doc/SMS/s/zjwvxry6e"
def __init__(self):
config = getConfig()
self.access_key = config.smsConfig.baidu_sms_access_key
self.access_key_secret = config.smsConfig.baidu_sms_access_key_secret
self.host = config.smsConfig.baidu_sms_host
self.signature_id = config.smsConfig.baidu_sms_signature_id
self.access_key = os.getenv('BAIDU_SMS_ACCESS_KEY')
self.access_key_secret = os.getenv('BAIDU_SMS_ACCESS_KEY_SECRET')
self.host = os.getenv('BAIDU_SMS_HOST')
self.signature_id = os.getenv('BAIDU_SMS_SIGNATURE_ID')
# 检查必需的环境变量是否都已设置,若缺失则抛出异常
required_vars = [self.access_key, self.access_key_secret, self.host, self.signature_id]
if not all(required_vars):
missing = [name for name, val in zip(
['BAIDU_SMS_ACCESS_KEY', 'BAIDU_SMS_ACCESS_KEY_SECRET', 'BAIDU_SMS_HOST', 'BAIDU_SMS_SIGNATURE_ID'],
required_vars) if val is None]
raise EnvironmentError(f"Missing required environment variables: {', '.join(missing)}")
self.sms_client = self.create_client()
self.sms_types = {}

View File

@ -1,7 +0,0 @@
from appPublic.aes import aes_encode_b64
import sys
encry_key = '!@#$%^&*(*&^%$QWERTYUIqwertyui234567'
pwd = 'lima2018'
code = aes_encode_b64(encry_key, pwd)
print(code)

View File

@ -14,12 +14,8 @@ SMS Send Module Test
import asyncio
from smssend import (
load_smssend,
generate_sms_code,
check_sms_code,
send_vcode,
send_sms,
get_sms_engine,
SMSEngine
send_sms
)
async def test_check_sms_code():
@ -37,8 +33,8 @@ async def test_check_sms_code():
return False
async def test_send_sms():
phone = "18053191417"
stype = "用户注册登录验证" # 充值提醒/欠费短信通知等
phone = ""
stype = "注册登录" # 充值提醒/欠费短信通知等
result = await send_sms(phone, stype) # 需要引用的参数 phone和stype必填
print(f"发送结果: {result}")
@ -77,14 +73,14 @@ async def main():
from ahserver.serverenv import ServerEnv
env = ServerEnv()
def get_db_name(s=None): return 'kboss'
def get_db_name(s=None): return 'database_name'
env.get_module_dbname = get_db_name
if __name__ == '__main__':
from sqlor.dbpools import DBPools
from appPublic.jsonConfig import getConfig
p = 'D:/Code/backend_code/test_/'
p = ''
config = getConfig(p)
DBPools(config.databases)
loop = asyncio.get_event_loop()

View File

@ -1,329 +0,0 @@
# -*- coding: utf-8 -*-
"""
SMS Send Module Test
====================
测试用例覆盖所有功能接口
1. generate_sms_code - 生成验证码入库并返回codeid
2. check_sms_code - 验证码校验
3. send_vcode - 发送验证码短信
4. send_sms - 发送短信整合生成和发送
5. get_sms_engine - 获取引擎实例
6. SMSEngine - 引擎类方法
"""
import sys
sys.path.append('D:/Code/dagflow_demo/smssend')
import asyncio
from smssend import (
load_smssend,
generate_sms_code,
check_sms_code,
send_vcode,
send_sms,
get_sms_engine,
SMSEngine
)
async def get_vcode_from_db(codeid: str) -> dict:
from sqlor.dbpools import DBPools
db = DBPools()
async with db.sqlorContext('kboss') as sor:
result = await sor.R('validatecode', {'id': codeid, 'del_flg': '0'})
if result:
return result[0]
return None
async def test_get_sms_engine():
print("=" * 50)
print("测试1: get_sms_engine() - 获取引擎实例")
print("=" * 50)
engine = get_sms_engine()
print(f"引擎实例: {engine}")
print(f"引擎类型: {type(engine)}")
if engine is not None and isinstance(engine, SMSEngine):
print("✅ 获取引擎实例成功")
return True
else:
print("❌ 获取引擎实例失败")
return False
async def test_generate_sms_code():
print("\n" + "=" * 50)
print("测试2: generate_sms_code() - 生成验证码入库")
print("=" * 50)
codeid = await generate_sms_code()
print(f"生成的验证码ID: {codeid}")
if not codeid:
print("❌ 生成验证码失败")
return False, None
print("✅ 生成验证码成功")
return True, codeid
async def test_generate_sms_code_with_params():
print("\n" + "=" * 50)
print("测试3: generate_sms_code(自定义长度和有效期) - 生成验证码")
print("=" * 50)
codeid = await generate_sms_code(length=4, expire_minutes=10)
print(f"生成的验证码ID: {codeid}")
print(f"验证码长度: 4, 有效期: 10分钟")
if not codeid:
print("❌ 生成验证码失败")
return False, None
db_result = await get_vcode_from_db(codeid)
if db_result:
vcode = db_result['vcode']
print(f"数据库中的验证码: {vcode}")
if len(vcode) == 4:
print("✅ 自定义参数生成验证码成功")
return True, codeid
print("❌ 自定义参数验证失败")
return False, None
async def test_check_sms_code_wrong():
print("\n" + "=" * 50)
print("测试4: check_sms_code() - 验证码校验(错误验证码)")
print("=" * 50)
codeid = await generate_sms_code()
if not codeid:
print("❌ 生成验证码失败")
return False
wrong_code = "000000"
result = await check_sms_code(codeid, wrong_code)
print(f"校验结果 (错误验证码): {result}")
if not result:
print("✅ 正确返回 False")
return True
else:
print("❌ 应该返回 False")
return False
async def test_check_sms_code_correct():
print("\n" + "=" * 50)
print("测试5: check_sms_code() - 验证码校验(正确验证码)")
print("=" * 50)
codeid = await generate_sms_code()
codeid = 'ltBojwOXD4VvC73lFTeKb'
if not codeid:
print("❌ 生成验证码失败")
return False
db_result = await get_vcode_from_db(codeid)
if not db_result:
print("❌ 获取验证码失败")
return False
real_vcode = db_result['vcode']
real_vcode = '577948'
print(f"真实验证码: {real_vcode}")
result = await check_sms_code(codeid, real_vcode)
print(f"校验结果 (正确验证码): {result}")
if result:
print("✅ 验证码校验成功")
return True
else:
print("❌ 验证码校验失败")
return False
async def test_check_sms_code_invalid_codeid():
print("\n" + "=" * 50)
print("测试6: check_sms_code() - 验证码校验(无效codeid)")
print("=" * 50)
invalid_codeid = "invalid_codeid_12345"
result = await check_sms_code(invalid_codeid, "123456")
print(f"校验结果: {result}")
if not result:
print("✅ 正确返回 False")
return True
else:
print("❌ 应该返回 False")
return False
async def test_check_sms_code_expired():
print("\n" + "=" * 50)
print("测试7: check_sms_code() - 验证码校验(已过期)")
print("=" * 50)
from sqlor.dbpools import DBPools
import datetime
from appPublic.uniqueID import getID as uuid
expired_codeid = uuid()
expired_time = datetime.datetime.now() - datetime.timedelta(minutes=10)
db = DBPools()
async with db.sqlorContext('kboss') as sor:
await sor.C('validatecode', {
'id': expired_codeid,
'vcode': '888888',
'expire_time': expired_time,
'del_flg': '0',
'create_at': datetime.datetime.now()
})
result = await check_sms_code(expired_codeid, "888888")
print(f"校验结果 (已过期验证码): {result}")
if not result:
print("✅ 正确返回 False(已过期)")
return True
else:
print("❌ 应该返回 False")
return False
async def test_send_vcode():
print("\n" + "=" * 50)
print("测试8: send_vcode() - 发送验证码短信")
print("=" * 50)
phone = "18053191417"
stype = "用户注册登录验证"
vcode = {"SMSvCode": "123456"}
result = await send_vcode(phone, stype, vcode)
print(f"发送结果: {result}")
if result.get('status') == False:
if "模板未配置" in result.get('msg', ''):
print("⚠️ 模板未配置这是预期行为需先配置sms_template表")
return True
print("✅ 发送功能正常(可能因配置问题失败)")
return True
elif result.get('status') == True:
print("✅ 发送成功")
return True
else:
print("❌ 发送失败")
return False
async def test_send_sms():
print("\n" + "=" * 50)
print("测试9: send_sms() - 发送短信(整合生成和发送)")
print("=" * 50)
phone = "18053191417"
stype = "用户注册登录验证"
result = await send_sms(phone, stype)
print(f"发送结果: {result}")
if result.get('status') == 'error':
if "模板未配置" in result.get('data', {}).get('message', ''):
print("⚠️ 模板未配置这是预期行为需先配置sms_template表")
return True
print("✅ 发送功能正常(可能因配置问题失败)")
return True
elif result.get('status') == 'ok':
codeid = result.get('data', {}).get('codeid')
print(f"✅ 发送成功验证码ID: {codeid}")
return True
else:
print("❌ 发送失败")
return False
async def test_sms_engine_attributes():
print("\n" + "=" * 50)
print("测试10: SMSEngine 属性检查")
print("=" * 50)
engine = get_sms_engine()
print(f"access_key: {engine.access_key}")
print(f"host: {engine.host}")
print(f"signature_id: {engine.signature_id}")
print(f"sms_types: {engine.sms_types}")
print(f"doc: {engine.doc}")
if engine.access_key and engine.host and engine.signature_id:
print("✅ 引擎属性正常")
return True
else:
print("❌ 引擎属性异常")
return False
async def main():
print("=" * 50)
print("SMS Send Module 完整测试")
print("=" * 50)
load_smssend()
results = []
# results.append(("get_sms_engine", await test_get_sms_engine()))
# r, codeid = await test_generate_sms_code()
# results.append(("generate_sms_code", r))
# r, codeid2 = await test_generate_sms_code_with_params()
# results.append(("generate_sms_code(自定义参数)", r))
# results.append(("check_sms_code(错误验证码)", await test_check_sms_code_wrong()))
results.append(("check_sms_code(正确验证码)", await test_check_sms_code_correct()))
# results.append(("check_sms_code(无效codeid)", await test_check_sms_code_invalid_codeid()))
# results.append(("check_sms_code(已过期)", await test_check_sms_code_expired()))
# results.append(("send_vcode", await test_send_vcode()))
# results.append(("send_sms", await test_send_sms()))
# results.append(("SMSEngine属性", await test_sms_engine_attributes()))
print("\n" + "=" * 50)
print("测试结果汇总")
print("=" * 50)
passed = 0
failed = 0
for name, result in results:
status = "✅ 通过" if result else "❌ 失败"
print(f"{name}: {status}")
if result:
passed += 1
else:
failed += 1
print("-" * 50)
print(f"总计: {passed} 通过, {failed} 失败")
from ahserver.serverenv import ServerEnv
env = ServerEnv()
def get_db_name(s=None): return 'kboss'
env.get_module_dbname = get_db_name
if __name__ == '__main__':
from sqlor.dbpools import DBPools
from appPublic.jsonConfig import getConfig
p = 'D:/Code/backend_code/test_/'
config = getConfig(p)
DBPools(config.databases)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())