Я не понимаю, как получить токен для выполнения вызовов API

#paypal #paypal-sandbox #paypal-rest-sdk

#paypal #paypal-песочница #paypal-rest-sdk

Вопрос:

Я использую API Payouts, и для этого мне нужно указать токен доступа при вызове https://api-m.sandbox.paypal.com/v1/payments/payouts

Чтобы получить токен доступа, как указано здесь, я должен отправить запрос POST с помощью Postman на https://developer.paypal.com/docs/api/overview/#get-an-access-token и он возвращает в ответе токен

Моя проблема в том, что у этого токена есть время истечения срока действия, что является проблемой, потому что я не могу заходить в свое приложение каждые 15 минут, чтобы изменить токен в заголовке авторизации. Как я могу получить «постоянный» или, скорее, «автоматически обновляемый» токен?

Я попытался позвонить из своего приложения вместо Postman, но, похоже, это не работает, в нем говорится, что мои учетные данные недействительны

Это мой код на случай, если он может быть полезен (я управляю всем из интерфейса).:

  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");
    }
  },
 

Ответ №1:

Обновить

Читая код во второй раз и замечая, что ваша выплата такая же this.product.price , как и при первоначальном платеже, это не имеет смысла. Не используйте выплаты вообще для этого варианта использования. Полная сумма будет зачислена на ваш счет в обычном режиме, но если вы хотите, чтобы вместо этого вся сумма ушла куда-то еще, установите payee переменную для этого оформления заказа: https://developer.paypal.com/docs/checkout/integration-features/pay-another-account /

(оригинальный ответ ниже)


Использование выплат со стороны клиента — абсолютно ужасная идея, любой, у кого есть ваши учетные данные клиента, сможет отправлять деньги с вашего аккаунта куда угодно

API payouts должен использоваться только с вашего сервера. Ваш сервер должен выполнить вызов API, чтобы получить токен доступа, аналогичный тому, что вы упомянули о postman — за исключением использования любой серверной среды, которая у вас есть. Вы можете интегрировать прямые вызовы HTTPS, или также доступны пакеты SDK с выплатами, которые будут обрабатывать автоматическое получение токена доступа.

Что касается того, как запустить это серверное действие при захвате платежа, используйте надлежащую интеграцию с сервером:


Создайте два маршрута, один для «Создать заказ» и один для «Заказа захвата», описанный здесь . Эти маршруты должны возвращать данные JSON. Прежде чем возвращать данные в формате JSON, этот последний маршрут (захват) должен записать успешную транзакцию в вашу базу данных и запустить любую логику выплат, которую вы хотите.

Соедините эти два маршрута со следующим потоком утверждения: https://developer.paypal.com/demo/checkout/#/pattern/server

Комментарии:

1. Спасибо, сэр, ваш ответ очень помог. Да, я хотел отправить сумму кому-то другому, поскольку цель моего сайта заключается в том, чтобы люди могли покупать вещи друг друга, и я не знал об этом payee объекте. Теперь я также обрабатываю это на сервере, а не на клиенте. Однако я должен спросить, зачем мне хранить транзакции в своей базе данных? Чтобы отслеживать транзакции в случае возникновения споров или чего-то еще? Кроме того, если бы я хотел сократить транзакции, я думаю, на этот раз выплаты были бы уместны, верно?

2. Это верно. Необычно заниматься электронной коммерцией с сервером и не хотеть вести учет успешных транзакций для целей учета / оспаривания / возврата.