# -*- coding: utf-8 -*- # !/usr/bin/env python import base64 import hashlib import hmac import logging import time from urllib import quote from mongoengine import StringField, IntField from apps.web.core.db import Searchable logger = logging.getLogger(__name__) class FengTuTechnologyNorther(Searchable): northPort = StringField(verbose_name="平台的 域名端口 推送数据给对方平台的时候 服务器的地址", default="") appId = StringField(vebose_name="App key,由丰图提供") appSecret = StringField(vebose_name="签名密钥 可以理解为 我方密码") northToken = StringField(vebose_name="northToken 通过getToken接口获取 ") # 我们像对方平台获取到的token northTokenExpiredTime = IntField(verbose_name=u"northToken的过期时间", default=time.time) northAppId = StringField(vebose_name="平台ID,由我们提供") meta = { "collection": "feng_tu_norther", "db_alias": "default" } def get_sig(self, ts): """ 生成签名字符串 :return: """ payload = { 'appid' : str(self.appId), 'timestamp' : str(ts) } raw = [(k, payload[k]) for k in sorted(payload.keys())] s = str('&'.join('='.join(kv) for kv in raw if kv[1])) sigSecret = str(self.appSecret) sigDate = hmac.new(sigSecret,s, hashlib.md5).digest() sig = base64.b64encode(sigDate) return quote(sig) def join_url(self,path): return "{ipPort}/{path}".format( ipPort=self.northPort, path=path ) def get_token_data(self): """ 获取token的载数据 身份验证以平台为维度获取 那么token的范围也以 平台为准 即 northOperatorID """ return { "northAppId": self.northAppId, }