ucpaas.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import logging
  4. import simplejson as json
  5. import requests
  6. from requests import ConnectionError
  7. from simplejson import JSONDecodeError
  8. logger = logging.getLogger(__name__)
  9. from library.sms import SmsSender
  10. class Sender(SmsSender):
  11. API_URL = 'https://open.ucpaas.com/ol/sms/sendsms'
  12. def __init__(self, appid, sid, token):
  13. self.appid = appid
  14. self.sid = sid
  15. self.token = token
  16. def send(self, phoneNumber, templateId, msg, productName, verifyCode = False):
  17. """
  18. :param phoneNumber:
  19. :param templateId:
  20. :param msg:
  21. :param productName:
  22. :return: dict
  23. """
  24. logger.debug('productName = %s; templateId = %s; msg = %s' % (productName, templateId, msg))
  25. headers = {
  26. 'Accept': 'application/json',
  27. 'Content-Type': 'application/json;charset=utf-8'
  28. }
  29. body = {
  30. 'appid': self.appid,
  31. 'mobile': phoneNumber,
  32. 'templateid': templateId,
  33. 'sid': self.sid,
  34. 'token': self.token,
  35. # 'param': '%s,%s' % (productName, msg),
  36. 'uid': ''
  37. }
  38. if verifyCode:
  39. body['param'] = '{}'.format(msg)
  40. else:
  41. body['param'] = '{},{}'.format(productName, msg)
  42. try:
  43. result = requests.post(self.API_URL, data = json.dumps(body), headers = headers, timeout = 15, verify=False)
  44. response = result.json()
  45. if response.get("code") != '000000':
  46. if response.get("code") == '100015':
  47. return {'result': False, 'msg': u'号码不合法'}
  48. elif response.get("code") == '105147':
  49. return {'result': False, 'msg': u'对同号码发送短信超过限定频率, 请稍后再试'}
  50. else:
  51. logger.error('send sms error,response=(code=%s msg=%s) , phoneNumber=%s'
  52. % (response.get("code", ""), response.get("msg", "").encode('utf-8'), phoneNumber))
  53. return {'result': False, 'msg': u'请求验证码失败, 请稍后再试'}
  54. return {'result': True, 'msg': 'success'}
  55. except JSONDecodeError as e:
  56. logger.exception(e)
  57. return {'result': False, 'msg': u'短信服务器繁忙,请稍后重试'}
  58. except ConnectionError as e:
  59. logger.exception(e)
  60. return {'result': False, 'msg': u'短信服务器不可用,请稍后重试'}