#node.js #reactjs #stripe-payments #webhooks
#node.js #reactjs #stripe-платежи #webhooks
Вопрос:
Я только что посмотрел YouTube, чтобы создать платежную систему с stripe API, реагировать и node.js . Я не уверен, что такое webhook и какова цель этого API stirpe. Этот код уже проверяет ошибку, но зачем нужен webhook и как он работает? Я видел кучу node.js stripe webhook примеры, но все еще не мог понять. Я супер новичок
Вот мой код
Реагировать (index.html )
import React, {useState} from 'react';
import logo from './logo.svg';
import './App.css';
import StripeCheckout from "react-stripe-checkout"
function App() {
const [product, setstate] = useState({
name: "React from FB",
price: 10,
productBy:"facebook"
})
const makePayment = token => {
const body = {
token,
product
}
const headers = {
"Content-Type": "application/json"
}
return fetch('http://localhost:8282/payment', {
method: "POST",
headers,
body: JSON.stringify(body)
}).then(response =>{
console.log("RESPONSE", response)
const{status} = response;
console.log("STATUS", status)
})
.catch(error => {
console.log(error);
})
}
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<a
className="App-link"
href="#"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
<StripeCheckout
stripeKey="KEY"
token={makePayment}
name="Buy React"
amount = {product.price * 100}>
<button className="btn-large pink"> buy react is just {product.price}$</button>
</StripeCheckout>
</header>
</div>
);
}
export default App;
Node.js (index.js )
const cors = require('cors');
const express = require('express');
const stripe = require('stripe')("KEY");
const uuid = require("uuid");
const app = express();
//middleware
app.use(express.json());
app.use(cors());
//routes
app.get("/", (req,res)=>{
res.send("It works!!!")
});
app.post("/payment", (req,res)=>{
const{product, token} = req.body;
console.log("PRODUCT", product);
console.log("PRICE", product.price);
const idempontencyKey = uuid();
return stripe.customers.create({
email: token.email,
source: token.id
}).then(customer => {
stripe.charges.create({
amount: product.price * 100,
currency: 'usd',
customer: customer.id,
receipt_email: token.email,
description: product.name,
shipping: {
name: token.card.name,
address: {
country: token.card.address_country
}
}
}, {idempontencyKey})
})
.then(result => res.status(200).json(result))
.catch(err => console.log(err));
})
//listen
app.listen(8282, () =>{
console.log("Listening at PORT 8282");
});
Ответ №1:
Это кажется достойным объяснением того, что такое webhooks: https://zapier.com/blog/what-are-webhooks /
В принципе, однако: когда вы делаете запрос к API Stripe, вы запрашиваете информацию, webhooks предоставляют Stripe возможность отправлять информацию непосредственно в ваше приложение, как только она станет доступна.
Ответ №2:
Существуют разные способы интеграции Stripe в ваше приложение.
Только обработка на стороне клиента
Stripe позволяет интегрировать механизм оформления заказа, где вам нужно только реализовать клиентский код для выполнения платежей.
Вот ссылка на одноразовые платежи только с кодом на стороне клиента: https://stripe.com/docs/payments/checkout/client
На стороне клиента и на стороне сервера
Но иногда бывают случаи, когда клиенту и серверу необходимо взаимодействовать друг с другом до / во время процесса оплаты (https://stripe.com/docs/payments/integration-builder ). Например, если вы не управляете своим инвентарем с помощью Stripe, вам понадобится собственная логика на сервере. Одной из причин может быть то, что вы просто хотите предложить Stripe в качестве платежного шлюза для кредитных карт, помимо других способов оплаты, таких как PayPal.
Webhooks
Ну, webhooks можно использовать в обоих случаях. Webhooks позволяют Stripe взаимодействовать с вашим внутренним сервером, чтобы информировать вас об успешной оплате, неудачных платежах, обновлениях клиентов, заказах, выставлении счетов и так далее. Определяя URL-адрес webhook, вы можете указать, какие события вы хотите получать от Stripe. Затем вы можете использовать события для обновления указанных данных в вашей базе данных.
Я предполагаю, что одна из основных идей заключается в том, чтобы избежать ограничений скорости, потому что без webhooks вашему серверному серверу может потребоваться запросить Stripe API через указанный интервал времени или при запуске, чтобы вы могли отправлять последнюю информацию об указанном продукте или клиенте. С помощью ответа API вы сможете обновить свою собственную базу данных.
Давайте подумаем о случае, когда вы меняете продукт на своей панели инструментов Stripe, тогда вам нужно будет как можно скорее «вручную» обновить свой собственный серверный сервер с помощью триггера или чего-то еще, чтобы отображать последние изменения для посетителей вашего сайта. Существует также Stripe Billing, который позволяет интегрировать периодические платежи. В этом случае требуется еще больше запросов к API Stripe, чтобы поддерживать соответствие вашей собственной базы данных фактическим данным.
Для всего этого webhook очень необычен. Почему? Вам потребуется гораздо меньше обращений от вашего бэкэнда к Stripe API, потому что Stripe будет информировать вас о каждом изменении, внесенном в ваши цены, продукты, информацию о клиентах на вашей панели инструментов Stripe. На мой взгляд, с помощью этой информации вы можете автоматизировать свой сервер намного чище, потому что единственная ваша задача — проверить, какие события отправляются на ваш сервер, и как вы можете извлечь указанную информацию для своих нужд.
Вот указанные события Stripe https://stripe.com/docs/api/events .
Опять же, это действительно зависит от вашего варианта использования.