我不明白如何获取令牌以进行 API 调用

I don't understand how to get a token to make API calls

我正在使用 Payouts API,为此我必须在调用 https://api-m.sandbox.paypal.com/v1/payments/payouts

时指定访问令牌

要获取访问令牌,as specified here I have to send a POST request with Postman to https://developer.paypal.com/docs/api/overview/#get-an-access-token 并在响应中 returns 令牌

我的问题是这个令牌有一个过期时间,这是一个问题,因为我不能每 15 分钟进入我的应用程序以更改授权 header 中的令牌。我怎样才能获得“永久”或“自动刷新”令牌?

我尝试从我的应用而不是 Postman 进行调用,但它似乎不起作用,它说我的凭据无效

这是我的代码,以防它有用(我正在管理 front-end 中的所有内容):

 window.paypal
        .Buttons({
          createOrder: (data, actions) => {
            return actions.order.create({
              purchase_units: [
                {
                  description: this.product.description,
                  amount: {
                    value: this.product.price
                  }
                }
              ]
            });
          },
          onApprove: (data, actions) => {
            const timestamp = new Date().getUTCMilliseconds();
            const id = timestamp;
            return actions.order.capture().then(details => {
              axios
                .post(
                  "https://api-m.sandbox.paypal.com/v1/payments/payouts",
                  {
                    sender_batch_header: {
                      sender_batch_id: id,
                      email_subject: "You have a payout!",
                      email_message:
                        "You have received a payout! Thanks for using our service!",
                      recipient_type: "EMAIL"
                    },
                    items: [
                      {
                        amount: {
                          value: this.product.price,
                          currency: "USD"
                        },
                        note: "congrats someone bought your stuff",
                        sender_item_id: id,
                        receiver: "john@doe.com"
                      }
                    ]
                  },
                  {
                    headers: {
                      Authorization:
                        "Bearer <my token that I get from postman>"
                    }
                  }
                )
                .then(() => {
                  alert(
                    "Transaction completed by " + details.payer.name.given_name
                  );
                })
                .catch(err => console.log(err));
            });
          }
        })
        .render(".paypal");
    }
  },

更新

再次阅读代码并注意到您的付款与原始付款的 this.product.price 相同,这毫无意义。对于此用例,根本不要使用支出。全部金额通常会转到您的帐户,但如果您希望全部金额转到其他地方,请为此结帐设置 payee 变量:https://developer.paypal.com/docs/checkout/integration-features/pay-another-account/

(下面是原始答案)


从客户端使用付款绝对是一个糟糕的主意,任何拥有您的客户凭据的人都可以从您的帐户向任何他们想要的地方汇款

支出 API 只能从您的服务器使用。您的服务器需要执行 API 调用以获取访问令牌,类似于您提到的邮递员 - 除了使用您拥有的任何后端环境。您可以集成直接 HTTPS 调用,或者还有 Payouts SDKs available 将自动处理获取访问令牌。

至于如何在获取付款时触发该后端操作,请使用适当的服务器集成:


创建两条路由,一条用于'Create Order',一条用于'Capture Order',documented here. 这些路由应该return JSON 数据。在 returning JSON 数据之前,最后一条路线(捕获路线)应在您的数据库中记录成功的交易并触发您想要的任何支付逻辑。

将这两条路线与以下批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server