Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用express、node和javascript从ebay API获取OAuth令牌_Javascript_Node.js_Express_Oauth_Ebay Api - Fatal编程技术网

如何使用express、node和javascript从ebay API获取OAuth令牌

如何使用express、node和javascript从ebay API获取OAuth令牌,javascript,node.js,express,oauth,ebay-api,Javascript,Node.js,Express,Oauth,Ebay Api,从易趣获得Oauth令牌需要什么样的请求和响应组合?什么是RunName?我需要什么标题才能让易趣开心?经过三天令人沮丧的努力,让易趣的oauth给我一个访问令牌,我终于找到了答案。由于这些文档很痛苦,而且网上几乎没有帮助,我决定在这里发布我的解决方案,希望它能帮助其他人。我不擅长StackOverflow,所以如果需要改进格式,请告诉我 app.get("/login/ebay", (req, res) => { res.redirect(`https://auth.sandbox.eb

从易趣获得Oauth令牌需要什么样的请求和响应组合?什么是RunName?我需要什么标题才能让易趣开心?

经过三天令人沮丧的努力,让易趣的oauth给我一个访问令牌,我终于找到了答案。由于这些文档很痛苦,而且网上几乎没有帮助,我决定在这里发布我的解决方案,希望它能帮助其他人。我不擅长StackOverflow,所以如果需要改进格式,请告诉我

app.get("/login/ebay", (req, res) => {
res.redirect(`https://auth.sandbox.ebay.com/oauth2/authorize?client_id=DeanSchm-TestApp-SBX-b843acc90-fd663cbb&redirect_uri=Dean_Schmid-DeanSchm-TestAp-kqmgc&response_type=code`
  );
});
您需要做的第一件事是重定向到此URL

格式是这样的

https://auth.sandbox.ebay.com/oauth2/authorize?client_id=&redirect_uri=&response_type=code
还有一个scope属性,但我还不明白,我得到了一个令牌,但没有它

该URL将带您进入易趣登录页面。如果您正在使用沙盒,则需要创建沙盒用户并使用沙盒凭据登录

登录后,易趣会将您重定向到您选择的URL。您可以在此处输入要重定向到的URL

它位于易趣开发者部分的“通过应用程序从易趣获取代币”下

此URL可以是任何内容。您只需在node或express或其他任何程序中处理它,因为一旦有人登录该URL,该URL就是他们要去的地方

我是这样处理的

app.get("/auth/ebay/callback", (req, res) => {
  axios("https://api.sandbox.ebay.com/identity/v1/oauth2/token", {
    method: "post",
    headers: {
      "Content-Type": "application/x-www-form-urlencoded",
      Authorization:
        "Basic " +
        btoa(
          `client public key:client secret keys`
        )
    },
    data: qs.stringify({
      grant_type: "authorization_code",
      // parsed from redirect URI after returning from eBay,
      code: req.query.code,
      // this is set in your dev account, also called RuName

      redirect_uri: "Dean_Schmid-DeanSchm-TestAp-kqmgc"
    })
  })
    .then(response => console.log(response))
    .catch(err => console.log(err));
});
一些让我抓狂的陷阱

确保授权书中的Basic后面有空格 标题。 bota是一个第三方库,Base64编码您的公共和 秘密钥匙。有很多方法可以做到这一点。我这么做是因为我偷了一堆代码。 对于Axios,请求主体称为数据,但使用fetch和other 方法它可以被称为body或param 由于ebay的重定向,Axios方法处于get请求中 默认为http get。 ebay现在使用https。确保您正在使用 沙盒URL
经过三天令人沮丧的努力,我终于找到了办法,让Ebay的oauth给我一个访问令牌。由于这些文档很痛苦,而且网上几乎没有帮助,我决定在这里发布我的解决方案,希望它能帮助其他人。我不擅长StackOverflow,所以如果需要改进格式,请告诉我

app.get("/login/ebay", (req, res) => {
res.redirect(`https://auth.sandbox.ebay.com/oauth2/authorize?client_id=DeanSchm-TestApp-SBX-b843acc90-fd663cbb&redirect_uri=Dean_Schmid-DeanSchm-TestAp-kqmgc&response_type=code`
  );
});
您需要做的第一件事是重定向到此URL

格式是这样的

https://auth.sandbox.ebay.com/oauth2/authorize?client_id=&redirect_uri=&response_type=code
还有一个scope属性,但我还不明白,我得到了一个令牌,但没有它

该URL将带您进入易趣登录页面。如果您正在使用沙盒,则需要创建沙盒用户并使用沙盒凭据登录

登录后,易趣会将您重定向到您选择的URL。您可以在此处输入要重定向到的URL

它位于易趣开发者部分的“通过应用程序从易趣获取代币”下

此URL可以是任何内容。您只需在node或express或其他任何程序中处理它,因为一旦有人登录该URL,该URL就是他们要去的地方

我是这样处理的

app.get("/auth/ebay/callback", (req, res) => {
  axios("https://api.sandbox.ebay.com/identity/v1/oauth2/token", {
    method: "post",
    headers: {
      "Content-Type": "application/x-www-form-urlencoded",
      Authorization:
        "Basic " +
        btoa(
          `client public key:client secret keys`
        )
    },
    data: qs.stringify({
      grant_type: "authorization_code",
      // parsed from redirect URI after returning from eBay,
      code: req.query.code,
      // this is set in your dev account, also called RuName

      redirect_uri: "Dean_Schmid-DeanSchm-TestAp-kqmgc"
    })
  })
    .then(response => console.log(response))
    .catch(err => console.log(err));
});
一些让我抓狂的陷阱

确保授权书中的Basic后面有空格 标题。 bota是一个第三方库,Base64编码您的公共和 秘密钥匙。有很多方法可以做到这一点。我这么做是因为我偷了一堆代码。 对于Axios,请求主体称为数据,但使用fetch和other 方法它可以被称为body或param 由于ebay的重定向,Axios方法处于get请求中 默认为http get。 ebay现在使用https。确保您正在使用 沙盒URL
我们还必须为eBay API使用JS,并通过开发新库解决了您提到的问题。有空。如果令牌过期,此lib还会自动尝试刷新令牌

这是我们获取oAuth令牌的方式:

从“@hendt/eBayApi”导入eBayApi; const ebay=new eBayApi{ appId:“-或客户端ID-”, certId:“-或客户机密”, 沙盒:错, siteId:eBayApi.siteId.EBAY\u US, RunName:'-eBay重定向URL名称-'//本例中为Dean_Schmid-DeanSchm-TestAp-kqmgc }; //这将生成您需要访问的URL const url=ebay.oAuth2.generateAuthUrl; //授予访问权限后,易趣会将您重定向到RunName页面并设置?代码查询。 //获取?代码并使用以下各项获取令牌: ebay.oAuth2.getTokencode.thentoken=>{ console.log'Token',Token; ebay.oAuth2.setCredentialstoken; //现在,您可以向易趣API发出请求: ebay.buy.browse.getItem'v1 | 382282567190 | 651094235351' .thenitem=>{ console.logJSON.stringifyitem,null,2; } .catch=>{ console.loge; }; }; 我们可以找到另一个具有范围的示例

一些提示:

使用scope,您可以告诉易趣您计划使用什么。你可以找到 说明,在沙箱/生产密钥框下。非统组织 范围 如果使用axios,则可以使用身份验证配置,因此不需要 需要btoa: A.xioshttps://api.sandbox.ebay.com/identity/v1/oauth2/token, { // ... 认证:{ 用户名:“appId”, 暗语 :“认证” } }; 要使用没有https的沙盒,例如localhost,您可以在https站点上设置重定向,并将代码重定向/传递到非https站点。
我们还必须为eBay API使用JS,并通过开发新库解决了您提到的问题。有空。如果令牌过期,此lib还会自动尝试刷新令牌

这是我们获取oAuth令牌的方式:

从“@hendt/eBayApi”导入eBayApi; const ebay=new eBayApi{ appId:“-或客户端ID-”, certId:“-或客户机密”, 沙盒:错, siteId:eBayApi.siteId.EBAY\u US, RunName:'-eBay重定向URL名称-'//本例中为Dean_Schmid-DeanSchm-TestAp-kqmgc }; //这将生成您需要访问的URL const url=ebay.oAuth2.generateAuthUrl; //授予访问权限后,易趣会将您重定向到RunName页面并设置?代码查询。 //获取?代码并使用以下各项获取令牌: ebay.oAuth2.getTokencode.thentoken=>{ console.log'Token',Token; ebay.oAuth2.setCredentialstoken; //现在,您可以向易趣API发出请求: ebay.buy.browse.getItem'v1 | 382282567190 | 651094235351' .thenitem=>{ console.logJSON.stringifyitem,null,2; } .catch=>{ console.loge; }; }; 我们可以找到另一个具有范围的示例

一些提示:

使用scope,您可以告诉易趣您计划使用什么。你可以找到 说明,在沙箱/生产密钥框下。非统组织 范围 如果使用axios,则可以使用身份验证配置,因此不需要 需要btoa: A.xioshttps://api.sandbox.ebay.com/identity/v1/oauth2/token, { // ... 认证:{ 用户名:“appId”, 密码:“certId” } }; 要使用没有https的沙盒,例如localhost,您可以在https站点上设置重定向,并将代码重定向/传递到非https站点。
太疯狂了!感谢您告诉我有关Axios auth config的信息。我不知道那是一件事。你的Lib绝对简化了一切。我不需要再这样做了,但很高兴知道它就在那里。@Dantio我可以补充一下,这个库太棒了!!!非常感谢。@Danito-我一直收到一个错误,上面写着错误:无效的授权,错误描述:提供的授权刷新令牌无效,或者是使用您创建的api发给另一个客户端的。这是针对沙箱环境的。你知道是什么导致了这个问题吗?这就是你上面引用的。Thanks@ste没有更多的细节很难说。你确定你没有两次发行代币吗?如果你能在GitHub上创建一个票证就太好了。您还可以尝试使用env变量:DEBUG=ebay查看更多日志。这太疯狂了!感谢您告诉我有关Axios auth config的信息。我不知道那是一件事。你的Lib绝对简化了一切。我不需要再这样做了,但很高兴知道它就在那里。@Dantio我可以补充一下,这个库太棒了!!!非常感谢。@Danito-我一直收到一个错误,上面写着错误:无效的授权,错误描述:提供的授权刷新令牌无效,或者是使用您创建的api发给另一个客户端的。这是针对沙箱环境的。你知道是什么导致了这个问题吗?这就是你上面引用的。Thanks@ste没有更多的细节很难说。你确定你没有两次发行代币吗?如果你能在GitHub上创建一个票证就太好了。您还可以尝试使用env variable:DEBUG=ebay查看更多日志。