This commit is contained in:
jeremygan2021
2026-01-29 19:35:12 +08:00
parent bda4e92113
commit 6f49dd2e8f

68
sms.py
View File

@@ -4,7 +4,7 @@ import sys
import os import os
import json import json
from typing import List from typing import List, Union, Dict, Any
from alibabacloud_dysmsapi20170525.client import Client as DysmsapiClient from alibabacloud_dysmsapi20170525.client import Client as DysmsapiClient
from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_tea_openapi import models as open_api_models
@@ -40,9 +40,10 @@ class SMS:
@staticmethod @staticmethod
def main(self, def main(self,
phone_number: str, phone_number: str,
template_param: str, template_param: Union[str, Dict[str, Any]] = None,
template_code: str = settings.sms_template_code, template_code: str = settings.sms_template_code,
sign_name: str = settings.sms_sign_name, sign_name: str = settings.sms_sign_name,
**kwargs
) -> dict: ) -> dict:
try: try:
@@ -55,9 +56,30 @@ class SMS:
phone_number = phone_number phone_number = phone_number
# sign_name is passed as argument # sign_name is passed as argument
# template_code is passed as argument # template_code is passed as argument
param_code = f"{{\"code\":\"{template_param}\"}}"
ConsoleClient.log(f"正在尝试发送短信... 模板代码: {template_code}, 签名: {sign_name}") # 构建参数字典
params = {}
if template_param:
if isinstance(template_param, dict):
params.update(template_param)
elif isinstance(template_param, str):
# 尝试解析 JSON 字符串,如果失败则作为 code 字段的值
try:
json_param = json.loads(template_param)
if isinstance(json_param, dict):
params.update(json_param)
else:
params['code'] = template_param
except json.JSONDecodeError:
params['code'] = template_param
# 添加额外的动态参数
if kwargs:
params.update(kwargs)
param_code = json.dumps(params)
ConsoleClient.log(f"正在尝试发送短信... 模板代码: {template_code}, 签名: {sign_name}, 参数: {param_code}")
# 1.发送短信 # 1.发送短信
send_req = dysmsapi_models.SendSmsRequest( send_req = dysmsapi_models.SendSmsRequest(
phone_numbers=phone_number, phone_numbers=phone_number,
@@ -130,9 +152,10 @@ class SMS:
@staticmethod @staticmethod
async def main_async(self, async def main_async(self,
phone_number: str, phone_number: str,
template_param: str, template_param: Union[str, Dict[str, Any]] = None,
template_code: str = settings.sms_template_code, template_code: str = settings.sms_template_code,
sign_name: str = settings.sms_sign_name, sign_name: str = settings.sms_sign_name,
**kwargs
) -> None: ) -> None:
try: try:
@@ -143,19 +166,40 @@ class SMS:
phone_number = phone_number phone_number = phone_number
# sign_name is passed as argument # sign_name is passed as argument
# template_code is passed as argument # template_code is passed as argument
template_param = f"{{\"code\":\"{template_param}\"}}"
# 构建参数字典
params = {}
if template_param:
if isinstance(template_param, dict):
params.update(template_param)
elif isinstance(template_param, str):
# 尝试解析 JSON 字符串,如果失败则作为 code 字段的值
try:
json_param = json.loads(template_param)
if isinstance(json_param, dict):
params.update(json_param)
else:
params['code'] = template_param
except json.JSONDecodeError:
params['code'] = template_param
# 添加额外的动态参数
if kwargs:
params.update(kwargs)
param_code = json.dumps(params)
# 如果提供了命令行参数,则使用命令行参数 # 如果提供了命令行参数,则使用命令行参数
ConsoleClient.log(f"正在尝试发送短信... 模板代码: {template_code}, 签名: {sign_name}") ConsoleClient.log(f"正在尝试发送短信... 模板代码: {template_code}, 签名: {sign_name}, 参数: {param_code}")
# 1.发送短信 # 1.发送短信
send_req = dysmsapi_models.SendSmsRequest( send_req = dysmsapi_models.SendSmsRequest(
phone_numbers=phone_number, phone_numbers=phone_number,
sign_name=sign_name, sign_name=sign_name,
template_code=template_code, template_code=template_code,
template_param=template_param template_param=param_code
) )
try: try:
send_resp = await client.send_sms_async(send_req) send_resp = await client.send_sms_async(send_req)
@@ -216,6 +260,10 @@ class SMS:
if __name__ == '__main__': if __name__ == '__main__':
SMS = SMS() sms = SMS()
SMS.main(self=SMS, phone_number="18585164448", template_param="6666") # 示例 1: 原有方式,仅传递 code
# sms.main(self=sms, phone_number="18585164448", template_param="6666")
# 示例 2: 动态参数传递 (phone, price 等)
sms.main(self=sms, phone_number="18585164448", code="6666")