123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- """
- 目前三江和朗鑫支持对中天物业的南向接口
- """
- import datetime
- import hashlib
- import json
- import logging
- from collections import OrderedDict
- import requests
- from django.conf import settings
- logger = logging.getLogger(__name__)
- """
- 对接中天测试代码
- """
- """
- payload 相关
- 参数名称 参数类型 必选 参数说明
- level string 是 告警级别:1、普通;2、重要;3、严重
- eventCode string 是 告警类型编码
- description string 是 事件描述
- createTime string 是 创建时间
- deviceCode string 是 设备编号
- groupName string 是 地址分组名称
- address string 是 地址信息
- orderNo string 是 订单编号
- backMoney float 否 退款金额
- backCoins float 否 退款金币
- """
- # prod_url = "http://app.ztcnwy.com/api/gateway"
- prod_url = "http://119.27.178.214/api/gateway"
- test_url = "http://apptest.ztcnwy.com/api/gateway"
- # internal_test_url = "http://211.159.224.10/api/test/zhongtian"
- if settings.DEBUG:
- app_key = "37097f1ac2214d7ea735518d0181f33a"
- secret = "b55a8167c0dd4b438e0fa70b2b70ab9a"
- url = test_url
- else:
- app_key = "fa801fe50d8b43d0b9c0381fbc2dacc8"
- secret = "71d0d180f1e644a68f40b58208d1b1ca"
- url = prod_url
- def concat(secret, payload):
- """
- 拼接签名准备文本, 格式为 secret + 升序的字典文本keyvalue直接拼接 + secret
- """
- raw = secret
- for _ in sorted(payload.iteritems()):
- raw += ''.join(_)
- raw += secret
- return raw
- def encode(text):
- return hashlib.md5(text).hexdigest().upper()
- def sign(secret, payload):
- return encode(concat(secret, payload))
- def get_payload(orderNo, eventCode, deviceCode, groupName, address, refundable = False, level = '1', description = '',
- **kwargs):
- currentDateTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- data = OrderedDict(
- [
- ("level", level),
- ("eventCode", eventCode),
- ("description", description),
- ("createTimeStr", currentDateTime),
- ("deviceCode", deviceCode),
- ("groupName", groupName),
- ("address", address),
- ("orderNo", orderNo),
- ("refundable", refundable)
- ]
- )
- for k, v in kwargs.iteritems():
- data[k] = v
- payload = {
- "Method": "chargeapi.chargereturn",
- "AppKey": app_key,
- "Format": "Json",
- "TimeStamp": currentDateTime,
- "Data": json.dumps(data, separators = (',', ':'))
- }
- signed = sign(secret, payload)
- payload['Sign'] = signed
- return payload
- def send(payload):
- return requests.post(url, data = payload, timeout = 15).json()
- def report_zhongtian_service_complete(event_code, record, orderNo, deviceCode,
- groupName, address, actualNeedTime,
- leftTime, finishedState, description = u'充电完成'):
- """
- :param event_code:
- :param record:
- :param orderNo:
- :param deviceCode:
- :param groupName:
- :param address:
- :param actualNeedTime:
- :param leftTime:
- :param finishedState:
- :param description:
- :return:
- """
- payload = get_payload(
- eventCode = event_code,
- orderNo = orderNo,
- deviceCode = deviceCode,
- groupName = groupName,
- address = address,
- description = description,
- actualNeedTime = actualNeedTime,
- leftTime = leftTime,
- finishedState = finishedState
- )
- result = send(payload)
- logger.debug('report_zhongtian_service_complete result=%s' % result)
- updated = record.update(postActionTriggered = True, set__postActionResult__complete = result,
- set__sentPayload = payload)
- if not updated:
- logger.error('update api start device record failed report_zhongtian_refund')
- return result
- def report_zhongtian_refund(eventCode, record, orderNo, deviceCode, groupName, address, actualNeedTime, leftTime,
- finishedState, backMoney, backCoins, description = u'退费'):
- """
- :param record:
- :param orderNo:
- :param deviceCode:
- :param groupName:
- :param address:
- :param actualNeedTime:
- :param leftTime:
- :param finishedState:
- :param backMoney:
- :param backCoins:
- :param description:
- :return:
- """
- payload = get_payload(
- eventCode = eventCode,
- deviceCode = deviceCode,
- groupName = groupName,
- address = address,
- orderNo = orderNo,
- refundable = True,
- description = description,
- backMoney = backMoney,
- backCoins = backCoins,
- actualNeedTime = actualNeedTime,
- leftTime = leftTime,
- finishedState = finishedState
- )
- result = send(payload)
- logger.debug('report_zhongtian_refund result=%s' % result)
- updated = record.update(postActionTriggered = True, set__postActionResult__refund = result,
- set__sentPayload = payload)
- if not updated:
- logger.error('update api start device record failed report_zhongtian_refund')
- return result
|