【问题标题】:How to connect to the Paypal API through Javascript using OAuth?如何使用 OAuth 通过 Javascript 连接到 Paypal API?
【发布时间】:2017-09-22 15:08:36
【问题描述】:

我想制作一个小应用程序,它可以从 Paypal 获取一些帐户信息并在 HTML 页面中显示这些信息。我只使用 HTML/CSS 和 Javascript,出于安全考虑,我不喜欢在服务器上运行授权流程。我不想在服务器上拥有令牌。

我现在使用 Paypal 提供的 OAuth code grant flow(更多 here)进行了工作设置,但如上所述,我想将服务器从图片中删除。

我刚刚引用的页面中描述了一些方法,但似乎没有一个暗示可能存在隐式授权。

是否可以将 Paypal 与 OAuth 隐式授权或类似的东西一起使用?

(目前的答案是采用代码授权流程,这具体不是我要求的。我知道存在一个,但在这种情况下使用它是不好的,所以请仅在您知道没有的方法时回答需要向客户端提供 OAuth 秘密令牌。)

【问题讨论】:

  • 当然这对于普通的 JS 是可行的。没有任何“服务器端”。你检查过这个吗? developer.paypal.com/docs/integration/direct/…有什么不明白的地方吗?
  • 什么需要我的 Javascript 应用程序向用户本身询问用户名和密码。这不是我真正想要遵循的流程。他们应该在 OAuth 端点输入它,而不是在我的应用程序中。 @k1r0s
  • 是的,然后 ->(从贝宝文档粘贴)After the user grants consent, PayPal redirects (HTTP 302) the user to the return URL with an authorization code appended to the URL. Use the authorization code to get a refresh token and initial access token.
  • 如果我的回答还不够,我会尝试在家里用paypal沙箱自己完成整个过程,以便向您展示
  • 这是关于代码授权流程的,请参阅我的 cmets 在您的回答中为什么这是错误的,并且在我的问题中明确不是一个选项。

标签: javascript paypal oauth


【解决方案1】:

如果有人不明白什么是/如何工作Implicit grant

当然这是可能的使用纯 Javascript 但不推荐。 Paypal 有一个端点来提供身份验证令牌:

https://developer.paypal.com/docs/integration/direct/make-your-first-call/#get-an-access-token

Also you will need to obtain user's consent.。执行请求时,您应该提供 redirect_uri 参数和您的 webapp url。通常,开发人员倾向于将返回值存储在从贝宝接收响应的服务器脚本上。但没有必要因为您能够阅读包含所有参数的 javascript global var location

How PayPal uses OAuth 2.0

编辑:

为了实现这一点,您必须执行以下步骤:

变量:

  • APP_CLIENT_ID -> 您应用的 client_id
  • APP_SECRET -> 您应用的密码
  • APP_RETURN_URL -> 应用的默认端点必须等于redirect_uri
  • OPEN_ID -> 返回的代码允许为特定客户创建令牌,也可以从用户那里检索信息

假设您已经在 developer.paypal 站点中创建了一个 APP 以获取“client_id”和“secret”,以便构建一个 url 将用户重定向到 paypal 登录表单。

  1. 将您的客户重定向到:

https://www.[sandbox.]paypal.com/signin/authorize?client_id=APP_CLIENT_ID&response_type=token&scope=openid&redirect_uri=APP_RETURN_URL

  1. 客户将登录其帐户并生成一个openid,它将通过http:302 重定向到您的应用程序redirect_uri 发送回您的应用程序。

APP_RETURN_URL?code=OPEN_ID&scope=openid

  1. 回到您的应用程序中,您可以使用该代码执行创建令牌的请求。这取决于您:

您可以从用户那里检索个人资料数据,例如地址、电话……

请求: curl -v https://api.sandbox.paypal.com/v1/oauth2/token -H "Accept: application/json" -H "Accept-Language: en_US" -H "Authorization: Bearer OPEN_ID" -u "APP_CLIENT_ID:APP_SECRET" -d "grant_type=client_credentials"

回应: {"范围":"https://uri.paypal.com/services/identity/proxyclienthttps://uri.paypal.com/services/subscriptionshttps://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-cardhttps://uri.paypal.com/services/applications/webhooks openid https://uri.paypal.com/payments/payoutshttps://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/identity/grantdelegation","nonce":"2017-05-05T14:33: 28Z488Zx8aUM1aSVo_wpq8IOecfccJMHptR1PVO2OpWcbA”, “ACCESS_TOKEN”: “A21AAHZCMP5vBuLMzz2m78DJGZhhpmu854amEVEO5WOavfk1GlNl_gmjSi01_69tJLRi5N_6pT-3GpRqZ81_pD1qKIAGANHMQ”, “token_type”: “承载”, “APP_ID”: “APP-80W284485P519543T”, “expires_in”:32400}

  1. 然后你可以关注这个:https://developer.paypal.com/docs/integration/direct/make-your-first-call/#make-an-api-call

【讨论】:

  • 第一个身份验证不是 OAuth。它要求应用程序自己询问用户用户名和密码,这是你真的不想做的事情。您答案的第二部分是代码授权流程,它需要一个服务器,这显然不是我在我的问题中想要的。该文档充其量是模棱两可的,在其他情况下是完全错误的。
  • 感谢您的宝贵时间。
  • 我什至认为你不需要服务器,rly :\
  • 是的,因为根据 OAuth 要求,client_secret 应该驻留在服务器上。
  • 确实,无法使用 Javascript。这是绝对不行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2013-06-08
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多