# -*- coding: utf-8 -*- # !/usr/bin/env python import logging import simplejson as json import requests from requests import ConnectionError from simplejson import JSONDecodeError logger = logging.getLogger(__name__) from library.sms import SmsSender class Sender(SmsSender): API_URL = 'https://open.ucpaas.com/ol/sms/sendsms' TEMPLATE = { 'CAPTCHA_TEMPLATE_ID': '544642', 'SMS_NOTIFY_EXPIRED_DEVICE_TEMPLATEID': '384328', 'EDIT_MONITOR_ID': '584806', 'DEALER_MONITOR_WITHDRAW_ID': '584807', 'MERCHANT_NOTIFY': '611184' } def __init__(self, appid = None, sid = None, token = None): self.appid = appid or '06268c58ffcf412e875c38663b819495' self.sid = sid or '0dcff57b45a868c31a74ae5bf1488aa8' self.token = token or '52917c39382fbebda57e0a23be265357' def send(self, phoneNumber, templateName, msg, productName, verifyCode = False): """ :param phoneNumber: :param templateName: :param msg: :param productName: :return: dict """ templateId = self.TEMPLATE[templateName] logger.debug('productName = %s; templateId = %s; msg = %s' % (productName, templateId, msg)) headers = { 'Accept': 'application/json', 'Content-Type': 'application/json;charset=utf-8' } body = { 'appid': self.appid, 'mobile': phoneNumber, 'templateid': templateId, 'sid': self.sid, 'token': self.token, # 'param': '%s,%s' % (productName, msg), 'uid': '' } if verifyCode: body['param'] = '{}'.format(msg) else: body['param'] = '{},{}'.format(productName, msg) try: result = requests.post(self.API_URL, data = json.dumps(body), headers = headers, timeout = 15, verify=False) response = result.json() if response.get("code") != '000000': if response.get("code") == '100015': return {'result': False, 'msg': u'号码不合法'} elif response.get("code") == '105147': return {'result': False, 'msg': u'对同号码发送短信超过限定频率, 请稍后再试'} else: logger.error('send sms error,response=(code=%s msg=%s) , phoneNumber=%s' % (response.get("code", ""), response.get("msg", "").encode('utf-8'), phoneNumber)) return {'result': False, 'msg': u'请求验证码失败, 请稍后再试'} return {'result': True, 'msg': 'success'} except JSONDecodeError as e: logger.exception(e) return {'result': False, 'msg': u'短信服务器繁忙,请稍后重试'} except ConnectionError as e: logger.exception(e) return {'result': False, 'msg': u'短信服务器不可用,请稍后重试'}