# coding=utf-8 import time import os from django.conf import settings from django.db import models from django.utils import timezone from utils.wx.wechat import WeChat from utils.exceptions import CustomError class WechatApplet(models.Model): authorizer_appid = models.CharField(max_length=512, verbose_name=u'小程序appid') secret = models.CharField(max_length=512, verbose_name=u'小程序秘钥', null=True) authorizer_refresh_token = models.CharField(max_length=512, verbose_name=u'刷新令牌', null=True) authorizer_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) agent_num = models.CharField(max_length=512, verbose_name=u'商户号', default="") agent_key = models.CharField(max_length=512, verbose_name=u'商户密钥', default="") cert_serial_no = models.CharField(max_length=512, verbose_name=u'商户证书序列号', default="") apiv3_key = models.CharField(max_length=512, verbose_name=u'商户APIv3密钥', default="") create_ip = models.CharField(max_length=100, verbose_name=u'服务器IP地址', default="") callback_api = models.CharField(max_length=100, verbose_name=u'微信支付回调API', default="") class Meta: db_table = "wechat_applet" ordering = ['-id'] verbose_name = u'小程序' default_permissions = () permissions = [] @staticmethod def getByAppid(appid): instance = WechatApplet.objects.filter(authorizer_appid=appid).first() if not instance: raise CustomError(u'未找到相应的小程序!') return instance def getAccessToken(self): if self.authorizer_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.authorizer_access_token gtime = timezone.now() res = WeChat.getAccessToken(self.authorizer_appid, self.secret) self.refreshAccessToken(gtime, res['access_token'], res['expires_in']) return self.authorizer_access_token def refreshAccessToken(self, gtime, access_token, expires_in, refresh_token=''): self.authorizer_access_token = access_token self.access_token_gtime = gtime self.expires_in = expires_in self.authorizer_refresh_token = refresh_token self.save()