aliyun.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. def __init__(self, ak, secret, region_id):
  13. self.ak = ak
  14. self.secret = secret
  15. self.region_id = region_id
  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. try:
  25. client = AcsClient(ak = self.ak, secret = self.secret, region_id = self.region_id)
  26. request = CommonRequest()
  27. request.set_accept_format('json')
  28. request.set_domain('dysmsapi.aliyuncs.com')
  29. request.set_method('POST')
  30. request.set_protocol_type('http') # https | http
  31. request.set_version('2017-05-25')
  32. request.set_action_name('SendSms')
  33. request.add_query_param('RegionId', 'cn-hangzhou')
  34. request.add_query_param('PhoneNumbers', phoneNumber)
  35. # request.add_query_param('SignName', productName)
  36. request.add_query_param('SignName', u'微付乐')
  37. request.add_query_param('TemplateCode', templateId)
  38. if verifyCode:
  39. request.add_query_param('TemplateParam', {'code': msg})
  40. else:
  41. request.add_query_param('TemplateParam', {'user': productName, 'detail': msg})
  42. response = client.do_action_with_exception(request)
  43. result = json.loads(response)
  44. if result['Code'] == 'OK':
  45. return {'result': True, 'msg': 'success'}
  46. else:
  47. return {'result': False, 'msg': result['Message']}
  48. except JSONDecodeError as e:
  49. logger.exception(e)
  50. return {'result': False, 'msg': u'短信服务器繁忙,请稍后重试'}
  51. except ConnectionError as e:
  52. logger.exception(e)
  53. return {'result': False, 'msg': u'短信服务器不可用,请稍后重试'}