Reputation: 11
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
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
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
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