test_swap_api.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import os
  5. import requests
  6. import random
  7. import logging
  8. import hmac
  9. import hashlib
  10. import json
  11. import itsdangerous
  12. from concurrent.futures import ThreadPoolExecutor
  13. from base import init_env
  14. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "configs.testing")
  15. init_env(interactive = False)
  16. from apps.thirdparties.dingding import DingDingRobot
  17. from apps.web.device.models import Device
  18. from apps import serviceCache
  19. from django.conf import settings
  20. from apps.web.constant import RechargeRecordVia
  21. from apps.web.core.db import copy_document_classes
  22. from apps.web.dealer.proxy import DealerIncomeProxy
  23. from apilib.monetary import RMB
  24. from apps.web.user.models import RechargeRecord
  25. from bson import ObjectId
  26. from apps.web.common.models import WithdrawRecord, WithdrawRefundRecord
  27. from apps.web.dealer.models import Dealer
  28. from apps.web.core.bridge.wechat.WechatClientProxy import MyWeChatComponent
  29. from apps.web.south_intf.swap_carcharger import SwapContract
  30. from apps.web.api.utils import AES_CBC_PKCS5padding_encrypt, AES_CBC_PKCS5padding_decrypt
  31. from apps.web.constant import DeviceOnlineStatus
  32. logger = logging.getLogger(__name__)
  33. # newObj = SwapContract(
  34. # source = u'快电',
  35. # swapLabel = 'wfl_kd',
  36. # operatorType = 'agent',
  37. # operatorInnerId = '5b5d87ebaa4fca310e25c5b1',
  38. # OperatorID = 'MA4KWBHB5',
  39. # OperatorName = u'微付乐',
  40. # OperatorTell = '18963981712',
  41. # OperatorTel2 = '19063981712',
  42. # OperatorRegAddress = u'光谷物联港',
  43. # OperatorNote = u'oooo',
  44. # northToken = 'waerasasfwr322',
  45. # northPort = 'localhost:1883',
  46. #
  47. # secretFromUs = 'UePNOXPHzb4Jz6cD',
  48. # sigSecretFromUs = 'y6J5Qneg7e9tZ2XI',
  49. # dataSecretFromUs = 'G6WRJDkZUFW3XSmP',
  50. # dataSecretIVFromUs = 'vN2yZWX54Z9zaIZQ',
  51. #
  52. # operatorId2Us = 'MA005DBW1',
  53. # secret2Us = 'UePNOXPHzb4Jz6cD',
  54. # sigSecret2Us = 'y6J5Qneg7e9tZ2XI',
  55. # dataSecret2Us = 'G6WRJDkZUFW3XSmP',
  56. # dataSecretIV2Us = 'vN2yZWX54Z9zaIZQ',
  57. # )
  58. #
  59. # newObj.save()
  60. kdOperId = 'MA005DBW1'
  61. kdSecret = 'UePNOXPHzb4Jz6cD'
  62. sigSecret2Us = 'y6J5Qneg7e9tZ2XI'
  63. dataSecret2Us = 'G6WRJDkZUFW3XSmP'
  64. dataSecretIV2Us = 'vN2yZWX54Z9zaIZQ'
  65. testUrl = 'http://www.washpayer.com' #'http://211.159.224.10' #
  66. def get_sig( data):
  67. sigSecret = sigSecret2Us
  68. return hmac.new(sigSecret, data, hashlib.md5).hexdigest().upper()
  69. def get_token():
  70. url = '%s/api/swap/wfl_kd/query_token' % testUrl
  71. data = {
  72. "OperatorID": kdOperId,
  73. "OperatorSecret": kdSecret
  74. }
  75. result = send_request(url, **data)
  76. ret = result.get("Ret")
  77. print 'ret is ',ret
  78. if ret != 0:
  79. return
  80. responseJson = result.get("Data")
  81. print 'get token data :',responseJson
  82. responseData = json.loads(
  83. AES_CBC_PKCS5padding_decrypt(s=responseJson, dataSecret=dataSecret2Us, dataSecretIV=dataSecretIV2Us) or "{}"
  84. )
  85. # 防止解析出错
  86. token = responseData.get("AccessToken", "")
  87. print 'token is :',token
  88. return token
  89. def send_request( url, **kwargs):
  90. """
  91. 主动发送HTTP请求获取数据 秘钥以及签名
  92. :param url:
  93. :param kwargs:
  94. :return:
  95. """
  96. headers = {"Content-Type": "application/json;charset=utf-8"}
  97. token = kwargs.pop("token", None)
  98. if token: headers.update({"Authorization": "Bearer {}".format(token)})
  99. timeout = kwargs.pop("timeout", 60)
  100. # 主动推送 加密以及向量为 dataSecret 和 dataSecretIV
  101. data = AES_CBC_PKCS5padding_encrypt(
  102. json.dumps(kwargs), dataSecret=dataSecret2Us, dataSecretIV=dataSecretIV2Us
  103. )
  104. data = {
  105. "OperatorID": kdOperId,
  106. "TimeStamp": datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
  107. "Seq": "{:0>4}".format(random.randint(1, 1)),
  108. "Data": data
  109. }
  110. sig = get_sig(data.get("OperatorID") + data.get("Data") + data.get("TimeStamp") + data.get("Seq"))
  111. data.update({"Sig": sig})
  112. try:
  113. response = requests.post(url = url, json = data, headers = headers, timeout = timeout)
  114. except requests.Timeout:
  115. return dict()
  116. except Exception as e:
  117. return dict()
  118. if response.status_code != 200:
  119. return dict()
  120. return response.json()
  121. # 测试query stations info
  122. token = get_token()
  123. # LastQueryTime = '2022-02-01 00:00:00'
  124. # pageNo = 1
  125. # pageSize = 10
  126. # result = send_request('%s/api/swap/wfl_kd/query_stations_info' % testUrl,token=token,LastQueryTime=LastQueryTime,pageNo=pageNo,pageSize=pageSize)
  127. LastQueryTime = '2022-02-01 00:00:00'
  128. pageNo = 1
  129. pageSize = 10
  130. result = send_request('%s/api/swap/wfl_kd/query_stations_info' % testUrl,token=token,LastQueryTime=LastQueryTime,pageNo=pageNo,pageSize=pageSize)
  131. # from apps.web.constant import Const
  132. # dev = Device.get_dev_by_l('11112203240001')
  133. # SwapContract.notify_2_all_northers_port_status(dev, 1, Const.DEV_WORK_STATUS_FAULT)
  134. # StationIDs = ['d6d5e1621d073a0f']
  135. # result = send_request('%s/api/swap/wfl_kd/query_station_status'% testUrl,token=token,StationIDs=StationIDs)
  136. # StationID = 'd6d5e1621d073a0f'
  137. # StartTime = '2000-02-01'
  138. # EndTime = '2023-02-01'
  139. # result = send_request('%s/api/swap/wfl_kd/query_station_stats'% testUrl,token=token,StationID=StationID,StartTime=StartTime,EndTime = EndTime)
  140. # EquipAuthSeq = 'd6d5e1621d073a0f'
  141. # ConnectorID = '623c3d54b7c98903d90b4e8e'
  142. # result = send_request('%s/api/swap/wfl_kd/query_equip_auth'% testUrl,token=token,EquipAuthSeq=EquipAuthSeq,ConnectorID=ConnectorID)
  143. # EquipBizSeq = 'd6d5e1621d073a0f'
  144. # ConnectorID = '623c3d54b7c98903d90b4e8e'
  145. # result = send_request('%s/api/swap/wfl_kd/query_equip_business_policy'% testUrl,token=token,EquipBizSeq=EquipBizSeq,ConnectorID=ConnectorID)
  146. # StartChargeSeq = 'd6d5e1621d073a0f2222'
  147. # ConnectorID = '623c3d54b7c98903d90b4e8e'
  148. # QRCode = ''
  149. # result = send_request('%s/api/swap/wfl_kd/query_start_charge'% testUrl,token=token,StartChargeSeq=StartChargeSeq,ConnectorID=ConnectorID,QRCode=QRCode)
  150. # StartChargeSeq = 'd6d5e1621d073a0f2222'
  151. # result = send_request('%s/api/swap/wfl_kd/query_equip_charge_status'% testUrl,token=token,StartChargeSeq=StartChargeSeq)
  152. # StartChargeSeq = 'd6d5e1621d073a0f2222'
  153. # ConnectorID = '623c3d54b7c98903d90b4e8e'
  154. # result = send_request('%s/api/swap/wfl_kd/query_stop_charge'% testUrl,token=token,StartChargeSeq=StartChargeSeq,ConnectorID=ConnectorID)
  155. # dev = Device.get_dev_by_l('11112203240001')
  156. # SwapContract.notify_2_all_northers_port_network_status(dev,DeviceOnlineStatus.DEV_STATUS_OFFLINE)
  157. # SwapContract.notify_2_all_northers_port_status(dev,1,1)
  158. # orderStatus ={
  159. # 'StartChargeSeq':'123412341234',
  160. # 'StartChargeSeqStat':4 ,
  161. # 'ConnectorID':'2323423',
  162. # 'ConnectorStatus':2,
  163. # 'CurrentA':2,
  164. # 'VoltageA':220.0,
  165. # 'Soc':0,
  166. # 'StartTime':'2022-02-23 00:00:23',
  167. # 'EndTime':'2022-02-23 00:00:23',
  168. # 'TotalPower':3,
  169. # 'TotalMoney':4,
  170. # 'ConnectorId':'223232323',
  171. # }
  172. #
  173. # SwapContract.notify_2_all_northers_order_status(dev,orderStatus)
  174. # result = {
  175. # 'StartChargeSeq':'123412341234',
  176. # 'StartChargeSeqStat':4 ,
  177. # 'ConnectorID':'2323423',
  178. # 'ConnectorStatus':2,
  179. # 'StartTime':'2022-02-23 00:00:23',
  180. # 'EndTime':'2022-02-23 00:00:23',
  181. # 'TotalPower':3,
  182. # 'TotalElecMoney':4,
  183. # 'TotalSeviceMoney':3,
  184. # 'TotalMoney':4,
  185. # 'StopReason':2
  186. # }
  187. # SwapContract.notify_2_all_northers_order_info(dev,result)
  188. print 'OK'