7

Really early days for me learning to use the API as well as Python.

The code below Authenticates and passes back the token correctly - but I have no idea how to pass the session ID in the code after... I get an "invalid session ID error".

I simply need help with getting the "get" to authenticate and execute a simple request successfully. Thank you!

import requests
    consumer_key = "xxxx"
    consumer_secret = "xxxx"
    username = "xxxx"
    password = "xxxx"
    payload = {
        'grant_type': 'password',
        'client_id': consumer_key,
        'client_secret': consumer_secret,
        'username': username,
        'password': password
    }
    r = requests.post("https://login.salesforce.com/services/oauth2/token",
        headers={"Content-Type":"application/x-www-form-urlencoded"},
        data=payload)
    print r.content
    r = requests.get("https://ap2.salesforce.com/services/data/v36.0/wave")
    print r.text

2 Answers 2

6

Refer to Set up Authorization:

Once authenticated, every request must pass in the access_token value in the header. It cannot be passed as a request parameter.

Parse for access_token in request.content. Then use it in Authorization header:

import json, requests
#...
body = json.loads(r.content)
token = body["access_token"]
url = body["instance_url"] + "/services/data/v36.0/limits"

r = requests.get(url, headers = {"Authorization":"Bearer " + token});
print r.content
2
  • I'm getting an error : " tokens = r["access_token"] TypeError: 'Response' object has no attribute 'getitem'"
    – Dawid
    May 4, 2016 at 10:03
  • my bad, content is a list of bytes, it should be loaded to json May 4, 2016 at 18:07
3

For now it is necessary additionally to have security_token.

You can get it in SalesForce, using Lightning Theme:

  1. Click in the top right corner your profile icon -> Settings;
  2. In the tree select My Personal Information -> Reset My Security Token;
  3. Click Reset Security Token;
  4. Check your email for a new token.

In order to get client_id and client_secret (also known as consumer_key and consumer_secret) in SalesForce, using Lightning Theme it is necessary to:

  1. Click Gear Icon in the top right corner (next to Profile Icon) -> Setup;
  2. In the tree select PLATFORM TOOLS -> Apps -> App Manager;
  3. Click New Connected App in the top right corner;
  4. Fill in all required fields;
  5. Tick Enable OAuth Settings + enter any Callback URL + select needed Scopes;
  6. Click Save at the bottom, then Continue;
  7. On the new page you will see Consumer Key and Consumer Secret fields.

import requests

email = [email protected]
password = 'your_password'
security_token = 'admlnlkrsl'

client_id = 'Asdmlansdkjaduqoenaqonq234234'
client_secret = 'sdqlasdasmdpfk2093jdsajdiom'

your_instance = 'https://your_company.lightning.force.com'

payload = {
    'grant_type': 'password',
    'client_id': client_id,
    'client_secret': client_secret,
    'username': email,
    'password': password+security_token
}

request_token_url = "https://login.salesforce.com/services/oauth2/token"

r = requests.post(
    request_token_url,
    headers={"Content-Type":"application/x-www-form-urlencoded"}, data=payload)

body = r.json()
token = body['access_token']

url = your_instance + "/services/data/v45.0"
r = requests.get(url, headers = {"Authorization":"Bearer " + token})
print('response:', r.json())

SalesForce API Username-Password OAuth Authentication Flow

SalesForce EndPoints

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .