我不知道如何设置 access_token

如何解决我不知道如何设置 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_urlaccess_token。您接下来的所有 API 调用都应从该实例开始(不要硬编码沙箱的 url)并包含 HTTP 标头 Authorization Bearer {access_token_here}

,

很抱歉我犯了一个愚蠢的错误,但解决方案类似于下面的那个。

我需要在“Bearer”后面加上空格

request["Authorization"] = "Bearer " + access_token

感谢大家的回答并为我的错误道歉。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?