PayPal REST API:代表商家发出请求

Posted

技术标签:

【中文标题】PayPal REST API:代表商家发出请求【英文标题】:PayPal REST API: Make requests on behalf of a merchant 【发布时间】:2020-08-10 16:35:19 【问题描述】:

我正在将我们的软件(它使用 PayPal SOAP API 代表商家向 PayPal 发出请求)迁移到 PayPal REST API 基础架构。

我正在使用我的 PayPal 开发者帐户的客户端 ID/密码从沙盒获取不记名令牌,使用 https://api.sandbox.paypal.com/v1/oauth2/token。

然后我正在使用我们刚刚获得的不记名令牌致电https://api.sandbox.paypal.com/v2/checkout/orders,代表商家发出请求。我正在使用带有以下(编码)JWT-Token 的 PayPal-Auth-Assertion 标头:

Header:
    
  "typ": "JWT",
  "alg": "HS256"

Body: 
  "email": "[merchant e-mail]",
  "iss": "[my client id]"

“商户邮箱”是我在https://developer.paypal.com/developer/accounts/开设的沙盒账户之一

作为回报,我得到一个(400) Bad Request "error":"invalid_request","error_description":"No permissions to set target_client_id"

沙盒帐户似乎必须有一个额外的步骤才能向开发者帐户授予权限。对于 SOAP API,我可以在以下屏幕 中添加第三方的用户名。然后我可以使用与X-PAYPAL-SECURITY-USERID 的标头值相同的用户名。但是,我似乎无法以相同的方式链接沙盒帐户,因为主帐户(我从中获取客户端 ID 的那个)没有“第三方用户名”。

究竟需要进行哪些配置才能允许对 REST API 进行这些类型的第 3 方调用?

【问题讨论】:

【参考方案1】:

我正在使用带有以下(编码)JWT-Token 的 PayPal-Auth-Assertion 标头:

您需要成为 PayPal 合作伙伴才能使用此类功能。如果您想成为合作伙伴,请联系 PayPal。

如果您想使用他们普遍可访问的 API,您有两种选择。

    让每个商家通过 https://www.paypal.com/signin?intent=developer&returnUri=https%3A%2F%2Fdeveloper.paypal.com%2Fdeveloper%2Fapplications 创建自己的 REST API 应用程序,并将其实时客户端 ID 和密码复制粘贴到您的配置中。这是最好的解决方案,也是你应该追求的解决方案。 使用 payee 对象:https://developer.paypal.com/docs/checkout/integration-features/custom-payee/,这使您的控制权更少(例如,无法获取授权或发出退款)

【讨论】:

“您需要成为 PayPal 合作伙伴才能使用该类型的功能。”:您是指 developer.paypal.com/docs/commerce-platform 吗?在他们的工作流程图 (developer.paypal.com/img/docs/partners/setup-flow.png) 中,我们可以假设我们不需要它来进行开发,只有在上线时才需要它。不是这样吗? 要在沙盒中测试商务平台功能,您本身不需要批准,但您需要指导和设置 仅供参考,实际问题似乎是我的开发者帐户未标记为“企业帐户”。一旦我升级了帐户,API 就可以工作了 :-) 我只希望错误消息会更好,这样可以节省我 2 天的时间来尝试找出问题所在。

以上是关于PayPal REST API:代表商家发出请求的主要内容,如果未能解决你的问题,请参考以下文章

PayPal REST API - 沙盒为 API 请求返回 401 但访问令牌成功

在 PayPal REST API 中查找 Braintree 计费协议 ID

使用 REST api 执行 PayPal 付款

使用 Paypal REST API 时需要 API 证书

PayPal REST API Payment::get 不返回电话

PayPal REST API - 代表其他人收款