Я хотел добавить кнопку пожертвования на свой веб-сайт React https://localpdf.tech. Stripes Client-Only-Checkout идеально подходит для этого, потому что вам не нужен сервер.

Включить только интеграцию Stripe Client

Во-первых, вам нужно добавить Test-Product в Stripe. Убедитесь, что вы активировали Просмотр тестовых данных:

После этого создайте простой Test-Product, чтобы позже протестировать нашу кнопку Donation. После того, как вы создали продукт, мы можем включить интеграцию только с клиентом. Перейдите в раздел Настройки › Настройки оформления заказа и включите интеграцию только с клиентом.

Затем введите домен для вашего веб-сайта, чтобы его можно было использовать в режиме реального времени. В моем случае это localpdf.tech.

Теперь вы настроены на сторону Stripe, и мы можем приступить к созданию кнопки React Donation.

Реагировать кнопку пожертвования

Чтобы использовать Stripe, установите пакет Stripe NPM:

npm install @stripe/stripe-js

После этого получите свой Ключ для публикации и с его помощью запустите библиотеку Stripe:

import { loadStripe } from "@stripe/stripe-js";
const stripePromise = loadStripe(
      "pk_test_51IUqMCJ2iOysJZvP3vrQpEoV2l1SpF9PzkycqVdKjmC3RYuDC3AqTvRfBDcsDwDmtxJlkUyip4GQOb8Akt0lF3O100RSHVPfch"
    );

Чтобы начать оформление заказа с помощью интеграции только с клиентом, вам нужно вызвать redirectToCheckout:

const stripe = await stripePromise;
stripe
  .redirectToCheckout({
    lineItems: [{ price: itemID, quantity: 1 }],
    mode: "payment",
    successUrl: window.location.protocol + "//localpdf.tech/merge",
    cancelUrl: window.location.protocol + "//localpdf.tech/merge",
    submitType: "donate",
  })
  .then(function (result) {
    if (result.error) {
      console.log(result);
    }
  });

Установите price в ProductID созданного Test-Product на Stripe-Dashboard. Затем установите successUrl и cancelUrl в нужное место. Вы можете установить submitType слишком auto, если вы не хотите, чтобы платеж был пожертвованием.

Вот полный код кнопки пожертвования React:

import React from "react";
import "./styles.css";
import "./styles/tailwind-pre-build.css";
import { loadStripe } from "@stripe/stripe-js";
const stripePromise = loadStripe(
  "pk_test_51IUqMCJ2iOysJZvP3vrQpEoV2l1SpF9PzkycqVdKjmC3RYuDC3AqTvRfBDcsDwDmtxJlkUyip4GQOb8Akt0lF3O100RSHVPfch"
);
const DonationButton = ({ itemID, ammount }) => {
  const handleClick = async (event) => {
    const stripe = await stripePromise;
    stripe
      .redirectToCheckout({
        lineItems: [{ price: itemID, quantity: 1 }],
        mode: "payment",
        successUrl: window.location.protocol + "//localpdf.tech/merge",
        cancelUrl: window.location.protocol + "//localpdf.tech/merge",
        submitType: "donate",
      })
      .then(function (result) {
        if (result.error) {
          console.log(result);
        }
      });
  };
  return (
    <button
      className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-lg"
      onClick={handleClick}
    >
      Donate {ammount}$
    </button>
  );
};
export default function App() {
  return (
    <>
      <div className="justify-center items-center flex overflow-x-hidden overflow-y-auto fixed inset-0 z-50 outline-none focus:outline-none">
        <DonationButton
          ammount={"5.00"}
          itemID="price_1IUx1FJ2iOysJZvP1LD3EzTR"
        ></DonationButton>
      </div>
    </>
  );
}