test_swap_api.py 7.3 KB

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