aliyun.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import logging
  4. import simplejson as json
  5. from aliyunsdkcore.client import AcsClient
  6. from aliyunsdkcore.request import CommonRequest
  7. from requests import ConnectionError
  8. from simplejson import JSONDecodeError
  9. logger = logging.getLogger(__name__)
  10. from library.sms import SmsSender
  11. class Sender(SmsSender):
  12. TEMPLATE = {
  13. 'CAPTCHA_TEMPLATE_ID': 'SMS_190790529',
  14. 'SMS_NOTIFY_EXPIRED_DEVICE_TEMPLATEID': 'SMS_190784668',
  15. 'EDIT_MONITOR_ID': 'SMS_211215112',
  16. 'DEALER_MONITOR_WITHDRAW_ID': 'SMS_211230116',
  17. }
  18. def __init__(self, ak = None, secret = None, region_id = None):
  19. self.ak = ak or 'LTAI4GEc1j8pvs4EjFrtL5K9'
  20. self.secret = secret or 'KuCEo8YWRn7tjQaJsXJCcG7P4leBMr'
  21. self.region_id = region_id or 'cn-hangzhou'
  22. def send(self, phoneNumber, templateName, msg, productName, verifyCode = False):
  23. """
  24. :param phoneNumber:
  25. :param templateName:
  26. :param msg:
  27. :param productName:
  28. :return: dict
  29. """
  30. templateId = self.TEMPLATE[templateName]
  31. try:
  32. client = AcsClient(ak = self.ak, secret = self.secret, region_id = self.region_id)
  33. request = CommonRequest()
  34. request.set_accept_format('json')
  35. request.set_domain('dysmsapi.aliyuncs.com')
  36. request.set_method('POST')
  37. request.set_protocol_type('http') # https | http
  38. request.set_version('2017-05-25')
  39. request.set_action_name('SendSms')
  40. request.add_query_param('RegionId', 'cn-hangzhou')
  41. request.add_query_param('PhoneNumbers', phoneNumber)
  42. # request.add_query_param('SignName', productName)
  43. request.add_query_param('SignName', u'微付乐')
  44. request.add_query_param('TemplateCode', templateId)
  45. if verifyCode:
  46. request.add_query_param('TemplateParam', {'code': msg})
  47. else:
  48. request.add_query_param('TemplateParam', {'user': productName, 'detail': msg})
  49. response = client.do_action_with_exception(request)
  50. result = json.loads(response)
  51. if result['Code'] == 'OK':
  52. return {'result': True, 'msg': 'success'}
  53. else:
  54. return {'result': False, 'msg': result['Message']}
  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'短信服务器不可用,请稍后重试'}