models.py 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # coding=utf-8
  2. import time
  3. import os
  4. from django.conf import settings
  5. from django.db import models
  6. from django.utils import timezone
  7. from util.wx.wechat import WeChat
  8. from util.exceptions import CustomError
  9. class WechatApplet(models.Model):
  10. authorizer_appid = models.CharField(max_length=512, verbose_name=u'小程序appid')
  11. secret = models.CharField(max_length=512, verbose_name=u'小程序秘钥', null=True)
  12. authorizer_refresh_token = models.CharField(max_length=512, verbose_name=u'刷新令牌', null=True)
  13. authorizer_access_token = models.CharField(max_length=512, verbose_name=u'令牌', null=True)
  14. access_token_gtime = models.DateTimeField(verbose_name=u"获取令牌时间", null=True)
  15. expires_in = models.IntegerField(verbose_name=u'令牌有效期', null=True)
  16. agent_num = models.CharField(max_length=512, verbose_name=u'商户号', default="")
  17. agent_key = models.CharField(max_length=512, verbose_name=u'商户密钥', default="")
  18. cert_serial_no = models.CharField(max_length=512, verbose_name=u'商户证书序列号', default="")
  19. apiv3_key = models.CharField(max_length=512, verbose_name=u'商户APIv3密钥', default="")
  20. class Meta:
  21. db_table = "wechat_applet"
  22. ordering = ['-id']
  23. index_together = ()
  24. verbose_name = u"小程序"
  25. default_permissions = ()
  26. permissions = []
  27. @staticmethod
  28. def getByAppid(appid):
  29. instance = WechatApplet.objects.filter(authorizer_appid=appid).first()
  30. if not instance:
  31. raise CustomError(u'未找到相应的小程序!')
  32. return instance
  33. def getAccessToken(self):
  34. if self.authorizer_access_token:
  35. last_time = time.mktime(self.access_token_gtime.timetuple()) + self.expires_in
  36. now = time.mktime(timezone.now().timetuple())
  37. if last_time > now:
  38. return self.authorizer_access_token
  39. gtime = timezone.now()
  40. res = WeChat.getAccessToken(self.authorizer_appid, self.secret)
  41. self.refreshAccessToken(gtime, res['access_token'], res['expires_in'])
  42. return self.authorizer_access_token
  43. def refreshAccessToken(self, gtime, access_token, expires_in, refresh_token=''):
  44. self.authorizer_access_token = access_token
  45. self.access_token_gtime = gtime
  46. self.expires_in = expires_in
  47. self.authorizer_refresh_token = refresh_token
  48. self.save()
  49. def generateActivityCode(self, customer_id, activity_id):
  50. '''生成海报二维码'''
  51. filename = "{}{}_{}.png".format("wxacode/", activity_id, customer_id)
  52. full_filename = "{}/{}".format(settings.MEDIA_ROOT, filename)
  53. if os.path.exists(full_filename):
  54. return filename
  55. page = 'pages/index/index'
  56. filename = WeChat.getActivityCode(self.getAccessToken(), page, customer_id, activity_id)
  57. return filename
  58. def generateActivityWXappCode(self, activity_id):
  59. filename = "{}_{}.png".format("wxacode/", activity_id)
  60. full_filename = "{}/{}".format(settings.MEDIA_ROOT, filename)
  61. if os.path.exists(full_filename):
  62. return filename
  63. page = 'pages/index/index'
  64. filename = WeChat.getActivityWXappCode(self.getAccessToken(), page, activity_id)
  65. return filename
  66. # def getMsgTemplateId(self, title):
  67. # templates = WeChat.getTemplateList(self.getAccessToken())
  68. # for template in templates:
  69. # if template['title'] == title:
  70. # return template['priTmplId']
  71. # return ''
  72. #
  73. # def sendPayOrderMsg(self, openid, msg_data):
  74. # template_id = self.getMsgTemplateId('订单支付成功通知')
  75. # if not template_id:
  76. # return
  77. # data = {
  78. # 'date3':{'value':msg_data['pay_time'].strftime('%Y-%m-%d %H:%M:%S')},
  79. # 'phrase4': {'value': msg_data['payment']},
  80. # 'character_string5': {'value': msg_data['no']},
  81. # 'amount2':{'value': msg_data['pay_amount']},
  82. # 'thing7':{'value': msg_data['tips']},
  83. # }
  84. # page = 'pages/order/order?value=1'
  85. # WeChat.sendSubscribeMessage(self.getAccessToken(), openid, template_id, page, data)