factory/apps/utils/sms.py

66 lines
2.2 KiB
Python

import json
import logging
from server.settings import get_sysconfig
from apps.utils.decorators import auto_log
from rest_framework.exceptions import ParseError
# 实例化myLogger
myLogger = logging.getLogger('log')
@auto_log(name='阿里云短信', raise_exception=True, send_mail=False)
def send_sms(phone: str, template_code: int, template_param: dict):
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
config = get_sysconfig()
if config.get("sms", {}).get('enabled', False) is False:
raise ParseError("短信发送功能未启用")
try:
client = AcsClient(config['sms']['xn_key'],
config['sms']['xn_secret'], 'default')
request = CommonRequest()
# 固定json
request.set_accept_format('json')
# 固定地址
request.set_domain('sms11.hzgxr.com:40081')
# 固定POST
request.set_method('POST')
# 固定HTTP
request.set_protocol_type('http') # https | http
# 固定版本号
request.set_version('2017-05-25')
# 固定操作名
request.set_action_name('SendSms')
# 手机号码
request.add_query_param('PhoneNumbers', phone)
# 签名名称
request.add_query_param('SignName', config['sms']['xn_sign'])
# 模板CODE
request.add_query_param('TemplateCode', template_code)
# 如果有模板参数 填写模板参数 如果无 无须填写
request.add_query_param('TemplateParam', json.dumps(template_param))
res = client.do_action(request)
res_dict = json.loads(str(res, encoding='utf-8'))
# print(phone, template_code, template_param, res_dict)
if res_dict['result'] == 0:
return True, res_dict
else:
myLogger.error("短信发送失败:{}-{}-{}-{}".format(phone,
template_code, str(template_param), str(res_dict)))
return False, res_dict
except Exception:
myLogger.error("短信发送失败", exc_info=True)
return False, {}
def send_sms_huawei():
"""华为短信发送/备用
"""
def send_sms_tencent():
"""腾讯短信发送/备用
"""