123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # coding=utf-8
- import time
- from django.db import models
- from django.utils import timezone
- from utils.exceptions import CustomError
- from utils.wx.wechat import WeChat
- class WechatTp(models.Model):
- component_appid = models.CharField(max_length=512, verbose_name=u'第三方平台appid')
- component_appsecret = models.CharField(max_length=512, verbose_name=u'第三方平台appsecret')
- m_encode_key = models.CharField(max_length=512, verbose_name=u'消息加密key')
- m_token = models.CharField(max_length=512, verbose_name=u'消息校验token')
- component_verify_ticket = models.CharField(max_length=512, verbose_name=u'验证票据', null=True)
- component_access_token = models.CharField(max_length=512, verbose_name=u'令牌', null=True)
- access_token_gtime = models.DateTimeField(verbose_name=u"获取令牌时间", null=True)
- expires_in = models.IntegerField(verbose_name=u'令牌有效期', null=True)
- class Meta:
- db_table = "wechat_tp"
- ordering = ['-id']
- index_together = ()
- verbose_name = u"第三方平台"
- default_permissions = ()
- @staticmethod
- def getDefault():
- tp = WechatTp.objects.filter().first()
- if not tp:
- raise CustomError(u'未找到微信第三方平台!')
- return tp
- @staticmethod
- def getByAppid(appid):
- component = WechatTp.objects.filter(component_appid=appid).first()
- if not component:
- raise CustomError(u'未找到相应的第三方平台!')
- return component
- def getAppid(self):
- return self.component_appid
- def getToken(self):
- return self.m_token
- def getEncodeKey(self):
- return self.m_encode_key
- def getAccessToken(self):
- if self.component_access_token:
- last_time = time.mktime(self.access_token_gtime.timetuple()) + self.expires_in
- now = time.mktime(timezone.now().timetuple())
- if last_time > now:
- return self.component_access_token
- res = WeChat.getComponentAccessToken(self.component_appid, self.component_appsecret, self.component_verify_ticket)
- self.refreshAccessToken(timezone.now(), res['component_access_token'], res['expires_in'])
- return self.component_access_token
- def getPreAuthCode(self):
- res = WeChat.getPreAuthCode(self.component_appid, self.getAccessToken())
- return res['pre_auth_code']
- def refreshVerifyTicket(self, component_verify_ticket):
- self.component_verify_ticket = component_verify_ticket
- self.save()
- def refreshAccessToken(self, gtime, component_access_token, expires_in):
- self.access_token_gtime = gtime
- self.component_access_token = component_access_token
- self.expires_in = expires_in
- self.save()
- def getAuthUrl(self, tenant_id):
- url = 'https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=' + self.getAppid() + '&pre_auth_code=' + self.getPreAuthCode()
- url += '&redirect_uri=https://baoxiu360.top/api/redirect_authorize/' + tenant_id + '/&auth_type=2'
- return url
- def getTemplateList(self):
- template_list = WeChat.getCodeTemplateList(self.getAccessToken())
- return template_list
|