ucpaas.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. TEMPLATE = {
  13. 'CAPTCHA_TEMPLATE_ID': '544642',
  14. 'SMS_NOTIFY_EXPIRED_DEVICE_TEMPLATEID': '384328',
  15. 'EDIT_MONITOR_ID': '584806',
  16. 'DEALER_MONITOR_WITHDRAW_ID': '584807',
  17. 'MERCHANT_NOTIFY': '611184'
  18. }
  19. def __init__(self, appid = None, sid = None, token = None):
  20. self.appid = appid or '06268c58ffcf412e875c38663b819495'
  21. self.sid = sid or '0dcff57b45a868c31a74ae5bf1488aa8'
  22. self.token = token or '52917c39382fbebda57e0a23be265357'
  23. def send(self, phoneNumber, templateName, msg, productName, verifyCode = False):
  24. """
  25. :param phoneNumber:
  26. :param templateName:
  27. :param msg:
  28. :param productName:
  29. :return: dict
  30. """
  31. templateId = self.TEMPLATE[templateName]
  32. logger.debug('productName = %s; templateId = %s; msg = %s' % (productName, templateId, msg))
  33. headers = {
  34. 'Accept': 'application/json',
  35. 'Content-Type': 'application/json;charset=utf-8'
  36. }
  37. body = {
  38. 'appid': self.appid,
  39. 'mobile': phoneNumber,
  40. 'templateid': templateId,
  41. 'sid': self.sid,
  42. 'token': self.token,
  43. # 'param': '%s,%s' % (productName, msg),
  44. 'uid': ''
  45. }
  46. if verifyCode:
  47. body['param'] = '{}'.format(msg)
  48. else:
  49. body['param'] = '{},{}'.format(productName, msg)
  50. try:
  51. result = requests.post(self.API_URL, data = json.dumps(body), headers = headers, timeout = 15, verify=False)
  52. response = result.json()
  53. if response.get("code") != '000000':
  54. if response.get("code") == '100015':
  55. return {'result': False, 'msg': u'号码不合法'}
  56. elif response.get("code") == '105147':
  57. return {'result': False, 'msg': u'对同号码发送短信超过限定频率, 请稍后再试'}
  58. else:
  59. logger.error('send sms error,response=(code=%s msg=%s) , phoneNumber=%s'
  60. % (response.get("code", ""), response.get("msg", "").encode('utf-8'), phoneNumber))
  61. return {'result': False, 'msg': u'请求验证码失败, 请稍后再试'}
  62. return {'result': True, 'msg': 'success'}
  63. except JSONDecodeError as e:
  64. logger.exception(e)
  65. return {'result': False, 'msg': u'短信服务器繁忙,请稍后重试'}
  66. except ConnectionError as e:
  67. logger.exception(e)
  68. return {'result': False, 'msg': u'短信服务器不可用,请稍后重试'}