1

我无法按照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()
4

2 回答 2

1

您的instance论点似乎是这里的问题。该库希望您使用特定的 salesforce 测试实例。如此cs70.salesforce.comcs17.salesforce.com等等。当您从浏览器登录沙盒时test.salesforce.com,在成功登录后,您将被重定向到您的实例 ( abXX.salesforce.com)。将其用于instance.

此外,您不需要有一个“空”的 Salesforce 会话变量 ( sf = Salesforce(instance='test.salesforce.com',session_id = ''))


另外,(我知道这是一个 2 岁的线程,我不知道当时的 simple_salesforce 是什么样的,但是,)requests如果您不想使用,则无需使用。以下取自新的 github 页面。该网站上有更多示例,但是答案的整个部分都偏离了问题。

记录管理 要在 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')

要将联系人的姓氏从“Smith”更改为“Jones”并添加名字“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
于 2018-02-21T23:54:15.180 回答
0

我对该库了解不多,但您似乎正在覆盖 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 变量的第一个实例化,将有效值放在第二个中,然后再试一次。

于 2016-01-26T22:27:34.190 回答