#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. Это верно. Необычно заниматься электронной коммерцией с сервером и не хотеть вести учет успешных транзакций для целей учета / оспаривания / возврата.