我无法按照https://github.com/heroku/simple-salesforce中的指南将会话ID信息传递给请求。我似乎可以进行身份验证,但是当我尝试使用API查询时,它会给我一个'INVALID_SESSION_ID'。我不确定我在这里缺少什么,我认为这可能是我对API缺乏了解。
感谢任何帮助。
from simple_salesforce import Salesforce
import requests
session = requests.Session()
sf = Salesforce(instance='test.salesforce.com',session_id = '')
sf = Salesforce(username=username, password=password, security_token=security_token,session=session,sandbox=True)
response = session.get('https://test.salesforce.com/a4Z/o') #Returns a HTTP code 200
response = session.get('https://test.salesforce.com/services/data/v34.0/sobjects') #Returns a HTTP code 401
session.cookies.clear()
答案 0 :(得分:0)
我对该lib知之甚少,但您似乎正在覆盖sf变量的实例化。例如,如果你刚刚做了:
import requests
session = requests.Session()
response = session.get('https://test.salesforce.com/a4Z/o')
您将获得200,因为它是一个用于测试的开放式REST服务。
您也没有为Salesforce()对象创建任何值来传递...例如,请查看lib作者使用用户名和密码进行身份验证的更完整示例:
from simple_salesforce import Salesforce
import requests
session = requests.Session()
# manipulate the session instance (optional)
sf = Salesforce(
username='user@example.com', password='password', organizationId='OrgId',
session=session)
显然这些是json的测试值,而不是实际的用户名和值。您需要传递有效的用户名和密码才能使其生效。
如果我是你,我会放弃你的sf变量的第一个实例化,在第二个实例中放入有效值,然后重试。
答案 1 :(得分:0)
你的instance
论证似乎是这里的问题。该库希望您使用salesforce的特定测试实例。所以cs70.salesforce.com
或cs17.salesforce.com
等等。当您从test.salesforce.com
的浏览器登录沙箱时,成功登录后,您将被重定向到您的实例(abXX.salesforce.com
)。将其用于instance
。
另外,你不需要一个空的" Salesforce会话变量(sf = Salesforce(instance='test.salesforce.com',session_id = '')
)
另外,(我知道这是一个2岁的帖子,我不知道当时的simple_salesforce是什么样的,但是,如果你不想要的话,不需要使用requests
至。以下摘自the new github page。网站上有更多的例子,但答案的整个部分都偏离了这个问题。
记录管理创建新的'联系人'在Salesforce中:
sf.Contact.create({'LastName':'Smith','Email':'example@example.com'})
这将返回
等词典{u'errors': [], u'id': u'003e0000003GuNXAA0', u'success': True}
要获取包含该记录的所有信息的字典, 使用方法:
contact = sf.Contact.get('003e0000003GuNXAA0')
要获取包含该记录的所有信息的字典,请使用定义为外部ID的自定义字段:
contact = sf.Contact.get_by_custom_id('My_Custom_ID__c', '22')
要更改该联系人的姓氏来自史密斯'琼斯'并添加' John'的名字。使用方法:
sf.Contact.update('003e0000003GuNXAA0',{'LastName': 'Jones', 'FirstName': 'John'})
删除联系人:
sf.Contact.delete('003e0000003GuNXAA0')
因此,更新的答案只需要前两行
from simple_salesforce import Salesforce
sf = Salesforce(username=username, password=password, security_token=security_token,session=session,sandbox=True)
# my_object = sf.Custom_Object__c.get('123456789012345') # example use