unable to generate auth token for login

import json

import requests

import pyotp

from urllib import parse

from hashlib import sha256

class fyerslogin:

def init(self):

self.access_token = ""

self.app_secret = ""

self.redirect_uri = "https://www.google.com/"

self.fyers_id = ""

self.pin = ""

self.client_id = "-100"

self.app_id = ""

self.totp_secret = ""

self.APP_ID_TYPE = "2" # Keep default as 2, It denotes web login

self.APP_TYPE = "100"

self.APP_ID_HASH = sha256((self.client_id + ":" + self.app_secret).encode('utf-8')).hexdigest()

self.SUCCESS = 1

self.ERROR = -1

self.BASE_URL = "https://api-t2.fyers.in/vagator/v2"

self.BASE_URL_2 = "https://api.fyers.in/api/v2"

self.URL_SEND_LOGIN_OTP = f"{self.BASE_URL}/send_login_otp"

self.URL_VERIFY_TOTP = f"{self.BASE_URL}/verify_otp"

self.URL_VERIFY_PIN = f"{self.BASE_URL}/verify_pin"

self.URL_TOKEN = f"{self.BASE_URL_2}/token"

self.URL_VALIDATE_AUTH_CODE = f"{self.BASE_URL_2}/validate-authcode"

def get_client_id(self):

return self.client_id

def send_request(self, url, payload, headers=None):

try:

result_string = requests.post(url=url, json=payload, headers=headers)

if result_string.status_code != 200:

return [self.ERROR, result_string.text]

return [self.SUCCESS, json.loads(result_string.text)]

except Exception as e:

return [self.ERROR, e]

def send_login_otp(self, fy_id, app_id):

try:

payload = {

"fy_id": fy_id,

"app_id": app_id

}

result_string = requests.post(url=self.URL_SEND_LOGIN_OTP, json=payload)

if result_string.status_code != 200:

return [self.ERROR, result_string.text]

result = json.loads(result_string.text)

request_key = result["request_key"]

return [self.SUCCESS, request_key]

except Exception as e:

return [self.ERROR, e]

def generate_totp(self, secret):

try:

generated_totp = pyotp.TOTP(secret).now()

return [self.SUCCESS, generated_totp]

except Exception as e:

return [self.ERROR, e]

def verify_totp(self, request_key, totp):

try:

payload = {

"request_key": request_key,

"otp": totp

}

result_string = requests.post(url=self.URL_VERIFY_TOTP, json=payload)

if result_string.status_code != 200:

return [self.ERROR, result_string.text]

result = json.loads(result_string.text)

request_key = result["request_key"]

return [self.SUCCESS, request_key]

except Exception as e:

return [self.ERROR, e]

def verify_PIN(self, request_key, pin):

try:

payload = {

"request_key": request_key,

"identity_type": "pin",

"identifier": pin

}

result_string = requests.post(url=self.URL_VERIFY_PIN, json=payload)

if result_string.status_code != 200:

return [self.ERROR, result_string.text]

result = json.loads(result_string.text)

access_token = result["data"]["access_token"]

return [self.SUCCESS, access_token]

except Exception as e:

return [self.ERROR, e]

def token(self, access_token):

try:

payload = {

"fyers_id": self.fyers_id,

"app_id": self.app_id,

"redirect_uri": self.redirect_uri,

"appType": self.APP_TYPE,

"code_challenge": "",

"state": "sample_state",

"scope": "",

"nonce": "",

"response_type": "code",

"create_cookie": True

}

headers = {'Authorization': f'Bearer {access_token}'}

result_string = requests.post(url=self.URL_TOKEN, json=payload, headers=headers)

if result_string.status_code != 308:

return [self.ERROR, result_string.text]

result = json.loads(result_string.text)

url = result["Url"]

auth_code = parse.parse_qs(parse.urlparse(url).query)['auth_code'][0]

return [self.SUCCESS, auth_code]

except Exception as e:

return [self.ERROR, e]

def validate_authcode(self, auth_code):

try:

payload = {

"grant_type": "authorization_code",

"appIdHash": self.APP_ID_HASH,

"code": auth_code,

}

result_string = requests.post(url=self.URL_VALIDATE_AUTH_CODE, json=payload)

if result_string.status_code != 200:

return [self.ERROR, result_string.text]

result = json.loads(result_string.text)

access_token = result["access_token"]

return [self.SUCCESS, access_token]

except Exception as e:

return [self.ERROR, e]

def get_auth_code(self):

try:

# Step 1 - Retrieve request_key from send_login_otp API

send_otp_result = self.send_login_otp(fy_id=self.fyers_id, app_id=self.APP_ID_TYPE)

if send_otp_result[0] != self.SUCCESS:

print(f"send_login_otp failure - {send_otp_result[1]}")

return

else:

print("send_login_otp success")

# Step 2 - Generate totp

generate_totp_result = self.generate_totp(secret=self.totp_secret)

if generate_totp_result[0] != self.SUCCESS:

print(f"generate_totp failure - {generate_totp_result[1]}")

return

else:

print("generate_totp success")

# Step 3 - Verify totp and get request key from verify_otp API

request_key = send_otp_result[1]

totp = generate_totp_result[1]

verify_totp_result = self.verify_totp(request_key=request_key, totp=totp)

if verify_totp_result[0] != self.SUCCESS:

print(f"verify_totp_result failure - {verify_totp_result[1]}")

return

else:

print("verify_totp_result success")

# Step 4 - Verify pin and send back access token

request_key_2 = verify_totp_result[1]

verify_pin_result = self.verify_PIN(request_key=request_key_2, pin=self.pin)

if verify_pin_result[0] != self.SUCCESS:

print(f"verify_pin_result failure - {verify_pin_result[1]}")

return

else:

print("verify_pin_result success")

# Step 5 - Get auth code for API V2 App from trade access token

token_result = self.token(verify_pin_result[1])

if token_result[0] != self.SUCCESS:

print(f"token_result failure - {token_result[1]}")

return

else:

print("token_result success")

# Step 6 - Get API V2 access token from validating auth code

auth_code = token_result[1]

validate_authcode_result = self.validate_authcode(auth_code=auth_code)

if validate_authcode_result[0] != self.SUCCESS:

print(f"get_auth_code - validate_authcode failure - {validate_authcode_result[1]}")

print(f"validate_authcode failure - {validate_authcode_result[1]}")

return

else:

print("get_auth_code - validate_authcode success")

print("validate_authcode success")

access_token = validate_authcode_result[1]

print(f"get_auth_code - access_token - {access_token}")

print(f"access_token - {access_token}")

return access_token

except Exception as e:

print(f"get_auth_code - Error during get_auth_code: {e}")

login = fyerslogin()

login.get_auth_code()

I am getting - send_login_otp success generate_totp success verify_totp_result success verify_pin_result success token_result failure - {"s": "error", "code": -410, "message": "The requested resource is no longer available. It appears you are using a deprecated endpoint. Please migrate to APIv3 for continued support."}

if i change to v3 its giving some other error, can you please check and let me know what changes are required.

2 replies