models.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import base64
  4. import hashlib
  5. import hmac
  6. import logging
  7. import time
  8. from urllib import quote
  9. from mongoengine import StringField, IntField
  10. from apps.web.core.db import Searchable
  11. logger = logging.getLogger(__name__)
  12. class FengTuTechnologyNorther(Searchable):
  13. northPort = StringField(verbose_name="平台的 域名端口 推送数据给对方平台的时候 服务器的地址", default="")
  14. appId = StringField(vebose_name="App key,由丰图提供")
  15. appSecret = StringField(vebose_name="签名密钥 可以理解为 我方密码")
  16. northToken = StringField(vebose_name="northToken 通过getToken接口获取 ") # 我们像对方平台获取到的token
  17. northTokenExpiredTime = IntField(verbose_name=u"northToken的过期时间", default=time.time)
  18. northAppId = StringField(vebose_name="平台ID,由我们提供")
  19. meta = {
  20. "collection": "feng_tu_norther",
  21. "db_alias": "default"
  22. }
  23. def get_sig(self, ts):
  24. """
  25. 生成签名字符串
  26. :return:
  27. """
  28. payload = {
  29. 'appid' : str(self.appId),
  30. 'timestamp' : str(ts)
  31. }
  32. raw = [(k, payload[k]) for k in sorted(payload.keys())]
  33. s = str('&'.join('='.join(kv) for kv in raw if kv[1]))
  34. sigSecret = str(self.appSecret)
  35. sigDate = hmac.new(sigSecret,s, hashlib.md5).digest()
  36. sig = base64.b64encode(sigDate)
  37. return quote(sig)
  38. def join_url(self,path):
  39. return "{ipPort}/{path}".format(
  40. ipPort=self.northPort,
  41. path=path
  42. )
  43. def get_token_data(self):
  44. """
  45. 获取token的载数据 身份验证以平台为维度获取 那么token的范围也以 平台为准 即 northOperatorID
  46. """
  47. return {
  48. "northAppId": self.northAppId,
  49. }