Skip to content

Commit

Permalink
Merge pull request #290 from OpenApi-5p/users/jenish/newPbiChanges
Browse files Browse the repository at this point in the history
redirection url validation for socket & payload empty & set_access_token
  • Loading branch information
5paisa committed Apr 22, 2024
2 parents d4f02b7 + bfb2387 commit 1bd2a45
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 7 deletions.
57 changes: 54 additions & 3 deletions py5paisa/py5paisa.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import pandas as pd
import websocket
from .urlconst import *
import jwt

from io import StringIO
from enum import Enum
Expand Down Expand Up @@ -145,6 +146,7 @@ def _user_info_request(self, data_type):
raise Exception("Invalid data type requested")
response = self.session.post(
url, json=payload, headers=HEADERS).json()
self.payload = GENERIC_PAYLOAD

data = response["body"][return_type]
return data
Expand Down Expand Up @@ -267,12 +269,16 @@ def order_request(self, req_type) -> None:
url = self.BASKETMARGIN_ROUTE
elif req_type == "BLKO":
url = self.PLACEORDERBULK_ROUTE
# self.payload["head"]["requestCode"] = "5PSMOOrd"
self.payload["body"]["AppSource"]=self.APP_SOURCE
elif req_type == "NETPOS":
url = self.NETPOSITION_ROUTE
elif req_type == "MFS":
url = self.MARKETSNAPSHOT_ROUTE
else:
raise Exception("Invalid request type!")
res = self.session.post(url, json=self.payload,
headers=HEADERS).json()
self.payload = GENERIC_PAYLOAD

if req_type == "MS":
log_response(res["head"]["statusDescription"])
Expand Down Expand Up @@ -522,7 +528,10 @@ def Request_Feed(self, Method: str, Operation: str, req_list: list):

def connect(self, wspayload: dict):
try:
self.web_url = f'wss://openfeed.5paisa.com/Feeds/api/chat?Value1={self.Jwt_token}|{self.client_code}'
if self.WEBSOCKET_URL == '':
self.WEBSOCKET_URL=self.decode_token(self.Jwt_token)

self.web_url = f'{self.WEBSOCKET_URL}{self.Jwt_token}|{self.client_code}'

def on_open(ws):
log_response("Streaming Started")
Expand Down Expand Up @@ -701,6 +710,8 @@ def set_url(self):
self.HISVTTORDER_ROUTE = HISVTTORDER_ROUTE
self.BASKETMARGIN_ROUTE = BASKETMARGIN_ROUTE
self.PLACEORDERBULK_ROUTE = PLACEORDERBULK_ROUTE
self.NETPOSITION_ROUTE = NETPOSITION_ROUTE
self.MARKETSNAPSHOT_ROUTE = MARKETSNAPSHOT_ROUTE
except Exception as e:
log_response(e)

Expand Down Expand Up @@ -738,6 +749,7 @@ def get_access_token(self, request_token=None):
url = ACCESS_TOKEN_ROUTE

res = self.session.post(url, json=self.payload).json()
self.payload = GENERIC_PAYLOAD
message = res["body"]["Message"]

if message == "Success":
Expand All @@ -760,6 +772,7 @@ def get_request_token(self, client_code, totp, pin):
url = GET_REQUEST_TOKEN_ROUTE

res = self.session.post(url, json=self.payload).json()
self.payload = GENERIC_PAYLOAD
message = res["body"]["Status"]

if message == 0:
Expand Down Expand Up @@ -957,7 +970,6 @@ def vtt_order(self, order_type, **order):
try:
self.set_payload(order)
order_type_str = self.VTT_TYPE[order_type].value
print(order_type_str)
return self.order_request(order_type_str)
except KeyError:
# Handle unknown order_type if needed
Expand All @@ -981,5 +993,44 @@ def place_order_bulk(self, **order):
except KeyError:
# Handle unknown order_type if needed
pass
except Exception as e:
log_response(e)

def decode_token(self,token):
try:
decoded = jwt.decode(token, options={"verify_signature": False})
#decoded_token = jwt.decode(token)
url=self.get_feed_url(decoded['RedirectServer'])
return url
except jwt.InvalidTokenError:
log_response("Invalid token")

def get_feed_url(self,redirect_server):
if redirect_server == "A":
return "wss://aopenfeed.5paisa.com/feeds/api/chat?Value1="
elif redirect_server == "B":
return "wss://bopenfeed.5paisa.com/feeds/api/chat?Value1="
elif redirect_server == "C":
return "wss://openfeed.5paisa.com/feeds/api/chat?Value1="
else:
return "wss://openfeed.5paisa.com/Feeds/api/chat?Value1="


def set_access_token(self,accessToken,clientCode):
self.access_token=accessToken
self.client_code=clientCode
self.Jwt_token = self.access_token


def positions_day(self):
try:
return self.order_request("NETPOS")
except Exception as e:
log_response(e)

def fetch_market_snapshot(self,reqList):
try:
self.payload["body"]["Data"] = reqList
return self.order_request("MFS")
except Exception as e:
log_response(e)
6 changes: 4 additions & 2 deletions py5paisa/urlconst.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,13 @@
POSITION_CONVERSION_ROUTE = f'{BaseUrl}PositionConversion'
MARKET_DEPTH_ROUTE_20 = "https://openapi.5paisa.com/marketfeed-token/token"
APIUID = 'ka7SFqAU6SC'
ORDERMARGIN_ROUTE='https://Swarajtrade.5paisa.com/5P_PreOrderMargin/Service1.svc/V1/PreOrdMarginCalculationVendor'
ORDERMARGIN_ROUTE=f'{BaseUrl}V1/PreOrdMarginCalculationVendor'
ADDVTTORDER_ROUTE=f'{BaseUrl}AddVTTOrder'
CALVTTORDER_ROUTE=f'{BaseUrl}CancelVTTOrder'
MODVTTORDER_ROUTE=f'{BaseUrl}ModifyVTTOrder'
GETVTTORDER_ROUTE=f'{BaseUrl}GetVTTOrder'
HISVTTORDER_ROUTE=f'{BaseUrl}GetHistoryVTTOrder'
BASKETMARGIN_ROUTE= f'{BaseUrl}PreOrdMarginCalculationBulkVendor'
PLACEORDERBULK_ROUTE= f'{BaseUrl}PlaceOrderBulk'
PLACEORDERBULK_ROUTE= f'{BaseUrl}PlaceOrderBulk'
NETPOSITION_ROUTE= f'{BaseUrl}V4/NetPosition'
MARKETSNAPSHOT_ROUTE = f'{BaseUrl}MarketSnapshot'
1 change: 1 addition & 0 deletions requirements_dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ pycryptodome==3.9.8
requests==2.23.0
urllib3==1.26.6
loguru==0.5.1
pyjwt==2.3.0
5 changes: 3 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
"idna>=2.9",
"loguru>=0.5.1",
"websocket-client>=0.58.0",
"pandas>=1.2.4"
"pandas>=1.2.4",
"pyjwt==2.3.0",
]

setup_requirements = []
Expand Down Expand Up @@ -49,6 +50,6 @@
test_suite='tests',
tests_require=test_requirements,
url='https://github.com/5paisa/py5paisa',
version='0.7.12',
version='0.7.13',
zip_safe=False,
)

0 comments on commit 1bd2a45

Please sign in to comment.