如何解决我不知道如何设置 access_token
目前我正在使用 Salesforce 的 rest api,以便我可以在 Salesforce 中创建和更新对象。
通过使用 curl 命令,我发现我可以按照自己的意愿在 Salesforce 中创建和更新对象。
现在我想创建一个方法,它可以像我使用 curl 命令那样做。但是,当我阅读下面的错误时,似乎我需要做一些事情才能获得授权。
#<Net::HTTPUnauthorized:0x000055a3702171e0>%
我想做的是这样的。
1,我想在 salesforce 中创建对象。
2,要更新对象,我需要帐户对象。
3,所以我想创建一个从 salesforce 中提取所有 Account 对象的方法。
4、在一个方法中我需要使用 access_token 发送 Http 请求。
5,但是我不知道如何设置access_token。
这是我尝试进行身份验证和获取帐户对象的 curl 命令
OAuth
curl -v https://test.salesforce.com/services/oauth2/token \
-d "grant_type=password" \
-d "client_id=3MasubgboasbboUIUBOBOUBOUBOJBUTFHBLKJHIU1rMmmDExvMtiR" \
-d "client_secret=D33ASDFAS82C0EASDFAS48E8F1C21ASFASW6EF21C4D7AASDF4EB5EF3" \
-d "username=MYNAME@COMPANY.co.jp.instance" -d "password=yatta-"
get Account curl "https://instance.my.salesforce.com//services/data/v52.0/sobjects/Account" -H "Authorization: Bearer 00D1s0023202345234pwb!AQQasdgas3eOlKbprFFRMT_SLFp.Pwt5Q07AI0uHasdgasdxmasdgas2nLiaZ.baVoLZvVVaQK"
获取帐号
curl "https://instance.my.salesforce.com//services/data/v52.0/sobjects/Account" -H "Authorization: Bearer 00D1s0023202345234pwb\!AQQasdgas3eOlKbprFFRMT_SLFp.Pwt5Q07AI0uHasdgasdxmasdgas2nLiaZ.baVoLZvVVaQK"
我试过的代码是这样的。
def get_salesforce_company_list
# hit api and get company list
access_token = auth
uri = URI.parse("https://instance.my.salesforce.com//services/data/v52.0/sobjects/Account")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer" + access_token
req_options = {
use_ssl: uri.scheme == "https",}
response = Net::HTTP.start(uri.hostname,uri.port,req_options) do |http|
http.request(request)
end
print response
end
def auth
uri = URI.parse("https://test.salesforce.com/services/oauth2/token")
request = Net::HTTP::Post.new(uri)
request.set_form_data(
"client_id" => "jnas;jdbojasn;djlnfalsjbdbkjbljasdasknl","client_secret" => "asjbdabHVIVHBJNFLNLKNJDNSjbljsg","grant_type" => "password","password" => "yatta-","username" => "Myname@COMPANY.co.jp.INSTANCE",)
req_options = {
use_ssl: uri.scheme == "https",}
response = Net::HTTP.start(uri.hostname,req_options) do |http|
http.request(request)
end
auth_info = JSON.parse(response.body)
auth_info["access_token"]
end
如果有人知道如何发送 http 请求或任何解决方法的想法,我将不胜感激。
编辑
在上面的代码中,“auth”方法工作正常,我可以正确获取 access_token。问题是我无法将其设置为“get_salesforce_company_list”方法并将其用作不记名令牌。
谢谢。
解决方法
您是否必须使用 http 请求手动执行此操作?也许像 https://github.com/restforce/restforce 这样的现成的东西会更简单?
无论如何。您使用 https://test.salesforce.com/services/oauth2/token
的 curl 示例看起来像是在使用 "Username Password flow"。
调用成功后,你会得到一个类似这样的 JSON
{"id":"https://test.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P","issued_at":"1278448832702","instance_url":"https://yourInstance.salesforce.com/","signature":"0CmxinZir53Yex7nE0TD+zMpvIWYGb/bdJh6XfOH6EQ=","access_token":"00Dx0000000BV7z!AR8AQAxo9UfVkh8AlV0Gomt9Czx9LjHnSSpwBMmbRcgKFmxOtvxjTrKW19ye6PE3Ds1eQz3z8jr3W7_VbWmEu4Q8TVGSTHxs","token_type":"Bearer"}
从这里提取 instance_url
和 access_token
。您接下来的所有 API 调用都应从该实例开始(不要硬编码沙箱的 url)并包含 HTTP 标头 Authorization Bearer {access_token_here}
很抱歉我犯了一个愚蠢的错误,但解决方案类似于下面的那个。
我需要在“Bearer”后面加上空格
request["Authorization"] = "Bearer " + access_token
感谢大家的回答并为我的错误道歉。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。