import json from django.utils.translation import gettext_lazy as _ from django.conf import settings from alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_models from Tea.exceptions import TeaException from common.utils import get_logger from common.exceptions import JMSException from .base import BaseSMSClient logger = get_logger(__file__) class AlibabaSMS(BaseSMSClient): SIGN_AND_TMPL_SETTING_FIELD_PREFIX = 'ALIBABA' @classmethod def new_from_settings(cls): return cls( access_key_id=settings.ALIBABA_ACCESS_KEY_ID, access_key_secret=settings.ALIBABA_ACCESS_KEY_SECRET ) def __init__(self, access_key_id: str, access_key_secret: str): config = open_api_models.Config( # 您的AccessKey ID, access_key_id=access_key_id, # 您的AccessKey Secret, access_key_secret=access_key_secret ) # 访问的域名 config.endpoint = 'dysmsapi.aliyuncs.com' self.client = Dysmsapi20170525Client(config) def send_sms(self, phone_numbers: list, sign_name: str, template_code: str, template_param: dict, **kwargs): phone_numbers_str = ','.join(phone_numbers) send_sms_request = dysmsapi_20170525_models.SendSmsRequest( phone_numbers=phone_numbers_str, sign_name=sign_name, template_code=template_code, template_param=json.dumps(template_param) ) try: logger.info(f'Alibaba sms send: ' f'phone_numbers={phone_numbers} ' f'sign_name={sign_name} ' f'template_code={template_code} ' f'template_param={template_param}') response = self.client.send_sms(send_sms_request) # 这里只判断是否成功,失败抛出异常 if response.body.code != 'OK': raise JMSException(detail=response.body.message, code=response.body.code) except TeaException as e: if e.code == 'SignatureDoesNotMatch': raise JMSException(code=e.code, detail=_('Signature does not match')) raise JMSException(code=e.code, detail=e.message) return response client = AlibabaSMS