phulekv
phulekv

Reputation: 11

How to get access_token from fyers API?

I'm looking to get access_token from fyers API I'm able to get authorization_code and build authorization_url to open it in browser to enter user credentials. access_token is displayed in browser's address when user enters credentials but my program is unable to retrieve the access_code. Your help is much appreciable.

My code is as follows:

from fyers_api import accessToken

from fyers_api import fyersModel
import requests

import webbrowser

import urllib.request as ur

app_id = "XXXXXXXXX"

app_secret = "XXXXXXXXX"

app_session = accessToken.SessionModel(app_id, app_secret)

response = app_session.auth()

if response['code'] != 200:
    print('CODE=' + str(response['code']))
    print('MESSAGE=' + str(response['message']))
    print('Exiting program...')
    exit(0)

authorization_code = response['data']['authorization_code']

app_session.set_token(authorization_code)

authorization_url=app_session.generate_token('XXXXXX')

token = webbrowser.open(authorization_url)
#Following authorization url is opened in browser:
#https://api.fyers.in/api/v1/genrateToken?authorization_code=xxxxxxxxxxxxx&appId=xxxxxxxxx&user_id=xxxxxx

#User is redirected to following url after successful log-in:
#https://trade.fyers.in/?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=&user_id=xxxxxx

print(token)

#token=”your_access_token”

#is_async = False #(By default False, Change to True for asnyc API calls.)

#fyers = fyersModel.FyersModel(is_async)


#fyers. get_profile(token = token)

Upvotes: 1

Views: 2041

Answers (3)

krishnendu dalui
krishnendu dalui

Reputation: 1

# Import the required module from the fyers_apiv3 package
from fyers_apiv3 import fyersModel
import credentials as cd
client_id = cd.client_id
secret_key = cd.secret_key
redirect_uri =cd.redirect_uri
user_name=cd.user_name
totp_key=cd.totp_key
pin1 =cd.pin1
pin2 = cd.pin2
pin3 = cd.pin3
pin4 = cd.pin4


# Replace these values with your actual API credentials

response_type = "code"  
state = "sample_state"

# Create a session model with the provided credentials
session = fyersModel.SessionModel(
    client_id=client_id,
    secret_key=secret_key,
    redirect_uri=redirect_uri,
    response_type=response_type
)

# Generate the auth code using the session model
response = session.generate_authcode()

# Print the auth code received in the response
print(response)


link=response


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
import pyotp as tp

# driver = webdriver.Chrome()
# Set Chrome options for headless mode
options = Options()
options.add_argument('--headless=new')

# Initialize Chrome webdriver
driver = webdriver.Chrome(options=options)



driver.get(link)

time.sleep(1)
login_with_clien_id_x_path='//*[@id="login_client_id"]'
elem = driver.find_element(By.XPATH, login_with_clien_id_x_path)
elem.click()
time.sleep(1)
client_id_input_x_path='//*[@id="fy_client_id"]'
elem2 = driver.find_element(By.XPATH, client_id_input_x_path)
elem2.send_keys("XS45474")
elem2.send_keys(Keys.RETURN)
time.sleep(1)

t=tp.TOTP(totp_key).now()



driver.find_element(By.XPATH, '//*[@id="first"]').send_keys(t[0])
driver.find_element(By.XPATH, '//*[@id="second"]').send_keys(t[1])
driver.find_element(By.XPATH, '//*[@id="third"]').send_keys(t[2])
driver.find_element(By.XPATH, '//*[@id="fourth"]').send_keys(t[3])
driver.find_element(By.XPATH, '//*[@id="fifth"]').send_keys(t[4])
driver.find_element(By.XPATH, '//*[@id="sixth"]').send_keys(t[5])

driver.find_element(By.XPATH, '//*[@id="confirmOtpSubmit"]').click() 
time.sleep(1)

driver.find_element(By.ID,"verifyPinForm").find_element(By.ID,"first").send_keys(pin1)
driver.find_element(By.ID,"verifyPinForm").find_element(By.ID,"second").send_keys(pin2)
driver.find_element(By.ID,"verifyPinForm").find_element(By.ID,"third").send_keys(pin3)
driver.find_element(By.ID,"verifyPinForm").find_element(By.ID,"fourth").send_keys(pin4)

driver.find_element(By.XPATH,'//*[@id="verifyPinSubmit"]').click()
time.sleep(1)
newurl = driver.current_url
print(newurl)
auth_code = newurl[newurl.index('auth_code=')+10:newurl.index('&state')]
print(auth_code)
driver.close()


# Import the required module from the fyers_apiv3 package
from fyers_apiv3 import fyersModel

response_type = "code" 
grant_type = "authorization_code"  


# Create a session object to handle the Fyers API authentication and token generation
session = fyersModel.SessionModel(
    client_id=client_id,
    secret_key=secret_key, 
    redirect_uri=redirect_uri, 
    response_type=response_type, 
    grant_type=grant_type
)

# Set the authorization code in the session object
session.set_token(auth_code)

# Generate the access token using the authorization code
response = session.generate_token()

# Print the response, which should contain the access token and other details
print(response)

access_token=response['access_token']
with open('access.txt','w') as k:
    k.write(access_token)

Upvotes: 0

ANMOL JAGGA
ANMOL JAGGA

Reputation: 31

Instead of writing the mentioned code, it is better to directly call Fyers Api.

import requests
url = 'https://api.fyers.in/api/v1/token'
requestParams = {
"fyers_id":"Your Client ID",
"password":"Your Password",
"pan_dob":"Your PAN card or DOB(DD-MM-YYYY)",
"appId":"YOur APP ID",
"create_cookie":False}
response = requests.post(url, json = requestParams )
print (response.text)

Upvotes: 3

user3575514
user3575514

Reputation: 11

         from fyers_api import accessToken
         from fyers_api import fyersModel

               app_id = "xxxxxxxxxx"
               app_secret = "xxxxxxxxxx"
               app_session = accessToken.SessionModel(app_id, app_secret)
               response = app_session.auth()
               print(app_session)
               print(response)
               authorization_code = response['data']['authorization_code']

               app_session.set_token(authorization_code)
               gen_token = app_session.generate_token()
               print("token url is copy paste this url in browser and copy access 
               token excluding your id at Last  ")
               print(gen_token)
               print("tokent printed thanks")




   token="gAAAAABeTWk7AnufuuQQx0D0NkgABinWk7AnufuuQQx0DQ3ctAFWk7AnufuuQQx0DMQQwacJ- 
   _xUVnrTu2Pk5K5QCLF0SZmw7nlpaWk7AnufuuQQx0DG4_3EGCYw92-iAh8="
  is_async = False
  fyers = fyersModel.FyersModel(is_async)
  print(fyers. get_profile(token = token))
  fyers.funds(token = token)
  print(fyers.funds(token = token))

Upvotes: 0

Related Questions