# -*- coding: utf-8 -*- # !/usr/bin/env python import logging import simplejson as json from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest from requests import ConnectionError from simplejson import JSONDecodeError logger = logging.getLogger(__name__) from library.sms import SmsSender class Sender(SmsSender): TEMPLATE = { 'CAPTCHA_TEMPLATE_ID': 'SMS_190790529', 'SMS_NOTIFY_EXPIRED_DEVICE_TEMPLATEID': 'SMS_190784668', 'EDIT_MONITOR_ID': 'SMS_211215112', 'DEALER_MONITOR_WITHDRAW_ID': 'SMS_211230116', } def __init__(self, ak = None, secret = None, region_id = None): self.ak = ak or 'LTAI4GEc1j8pvs4EjFrtL5K9' self.secret = secret or 'KuCEo8YWRn7tjQaJsXJCcG7P4leBMr' self.region_id = region_id or 'cn-hangzhou' def send(self, phoneNumber, templateName, msg, productName, verifyCode = False): """ :param phoneNumber: :param templateName: :param msg: :param productName: :return: dict """ templateId = self.TEMPLATE[templateName] try: client = AcsClient(ak = self.ak, secret = self.secret, region_id = self.region_id) request = CommonRequest() request.set_accept_format('json') request.set_domain('dysmsapi.aliyuncs.com') request.set_method('POST') request.set_protocol_type('http') # https | http request.set_version('2017-05-25') request.set_action_name('SendSms') request.add_query_param('RegionId', 'cn-hangzhou') request.add_query_param('PhoneNumbers', phoneNumber) # request.add_query_param('SignName', productName) request.add_query_param('SignName', u'微付乐') request.add_query_param('TemplateCode', templateId) if verifyCode: request.add_query_param('TemplateParam', {'code': msg}) else: request.add_query_param('TemplateParam', {'user': productName, 'detail': msg}) response = client.do_action_with_exception(request) result = json.loads(response) if result['Code'] == 'OK': return {'result': True, 'msg': 'success'} else: return {'result': False, 'msg': result['Message']} except JSONDecodeError as e: logger.exception(e) return {'result': False, 'msg': u'短信服务器繁忙,请稍后重试'} except ConnectionError as e: logger.exception(e) return {'result': False, 'msg': u'短信服务器不可用,请稍后重试'}