123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import base64
- import datetime
- import hashlib
- import hmac
- import json
- import logging
- import requests
- from apps.web.core.db import Searchable
- from mongoengine import StringField, IntField
- host = "39.105.191.99:40010"
- # https://www.apifox.cn/apidoc/shared-c761d37a-7da6-4ff1-b26a-d2476242cd8a/api-12349351
- # sectetKey: pvDTDJvGgm4rzVFZ8MBd/9T6uZ48iXgOcBGJ2MKpsc8=
- logger = logging.getLogger(__name__)
- class BeiJingFengTai(Searchable):
- sectetKey = StringField(verbose_name="运营商私钥,由平台提供", default="")
- operatorId = StringField(verbose_name="运营商唯一识别Id", default="")
- northPort = StringField(verbose_name="平台的 域名端口 推送数据给对方平台的时候 服务器的地址", default="")
- meta = {
- "collection": "BeiJingFengTai",
- "db_alias": "default"
- }
- def make_signature(self,timeDate,token=None):
- timeDate = timeDate
- operatorid = str(self.operatorId)
- sectetKey = str(self.sectetKey)
- originalString = "datetime: {}\noperatorid: {}".format(timeDate,operatorid)
- if token:
- originalString += "\ntoken: {}".format(token)
- sigDate = hmac.new(sectetKey, originalString, hashlib.sha256).digest()
- sig = base64.b64encode(sigDate)
- return sig
- def send_request(self,url,mode='POST',**kwargs):
- payload = kwargs
- timeDate = payload.pop("timeDate")
- sig = payload.pop("sig")
- timeout = payload.pop("timeout", 5)
- token = payload.pop("token", None)
- payload = json.dumps(payload)
- headers = {
- 'Datetime': timeDate,
- 'OperatorId': str(self.operatorId),
- 'Signature': sig,
- 'User-Agent': 'Apifox/1.0.0 (https://www.apifox.cn)'
- }
- if token:
- headers.update({'Token': token})
- try:
- if mode == 'POST':
- headers.update({'Content-Type': 'application/json'})
- response = requests.post(url=url, data=payload, headers=headers, timeout=timeout)
- elif mode == 'GET':
- response = requests.get(url=url, headers=headers, timeout=timeout,data={})
- elif mode == 'DELETE':
- response = requests.delete(url=url, headers=headers, timeout=timeout,data={})
- elif mode == 'PUT':
- headers.update({'Content-Type': 'application/json'})
- response = requests.put(url=url, headers=headers, timeout=timeout,data=payload)
- except requests.Timeout:
- return dict()
- except Exception as e:
- logger.exception(e)
- return dict()
- if response.status_code != 200:
- return dict()
- return response.json()
- def join_url(self,path):
- return "http://{ipPort}/{path}".format(
- ipPort=str(self.northPort),
- path=path
- )
- @classmethod
- def create(cls, sectetKey, operatorId, northPort):
- report = cls(
- sectetKey=sectetKey,
- operatorId=operatorId,
- northPort=northPort,
- )
- try:
- report.save()
- except Exception as e:
- logger.error(e)
- return
- return report
|