@tosspayments/widget-sdk-react-native
TypeScript icon, indicating that this package has built-in type declarations

1.3.5 • Public • Published

widget-sdk-react-native

Payment SDK for React Native

Installation

# npm
npm install @tosspayments/widget-sdk-react-native

# yarn
yarn add @tosspayments/widget-sdk-react-native

Usage

import { PaymentWidgetProvider,
  usePaymentWidget,
  AgreementWidget,
  PaymentMethodWidget } from "@tosspayments/widget-sdk-react-native";
import type {
  AgreementWidgetControl,
  PaymentMethodWidgetControl,
  AgreementStatus,
} from '@tosspayments/widget-sdk-react-native';

// ...
export default function App() {
  return <PaymentWidgetProvider
    clientKey={`test_ck_0Poxy1XQL8R4P1zpv14V7nO5Wmlg`}
    customerKey={`094ee04fe5d32758ec6e7f56285ad8b2`}
  >
    <CheckoutPage />
  </PaymentWidgetProvider>
}


function CheckoutPage() {
  const paymentWidgetControl = usePaymentWidget();
  const [paymentMethodWidgetControl, setPaymentMethodWidgetControl] =
    useState<PaymentMethodWidgetControl | null>(null);
  const [agreementWidgetControl, setAgreementWidgetControl] =
    useState<AgreementWidgetControl | null>(null);

  return (
    <>
      <PaymentMethodWidget
        selector="payment-methods"
        onLoadEnd={() => {
          paymentWidgetControl
            .renderPaymentMethods(
              'payment-methods',
              {value: 50_000},
              {
                variantKey: 'DEFAULT',
              },
            )
            .then(control => {
              setPaymentMethodWidgetControl(control);
            });
        }}
      />
      <AgreementWidget
        selector="agreement"
        onLoadEnd={() => {
          paymentWidgetControl
            .renderAgreement('agreement', {
              variantKey: 'DEFAULT',
            })
            .then(control => {
              setAgreementWidgetControl(control);
            });
        }}
      />
      <Button
        title="결제요청"
        onPress={async () => {
          if (paymentWidgetControl == null || agreementWidgetControl == null) {
            Alert.alert('주문 정보가 초기화되지 않았습니다.');
            return;
          }

          const agreeement = await agreementWidgetControl.getAgreementStatus();
          if (agreeement.agreedRequiredTerms !== true) {
            Alert.alert('약관에 동의하지 않았습니다.');
            return;
          }

          paymentWidgetControl.requestPayment({
            orderId: 'OrderId_123',
            orderName: '파란티셔츠 외 2건',
          });
        }}
      />
      <Button
        title="선택된 결제수단"
        onPress={async () => {
          if (paymentMethodWidgetControl == null) {
            Alert.alert('주문 정보가 초기화되지 않았습니다.');
            return;
          }

          Alert.alert(
            `선택된 결제수단: ${JSON.stringify(
              await paymentMethodWidgetControl.getSelectedPaymentMethod(),
            )}`,
          );
        }}
      />
      <Button
        title="결제 금액 변경"
        onPress={async () => {
          if (paymentMethodWidgetControl == null) {
            Alert.alert('주문 정보가 초기화되지 않았습니다.');
            return;
          }

          await paymentMethodWidgetControl.updateAmount(100_000);
          Alert.alert('결제 금액이 100000원으로 변경되었습니다.');
        }}
      />
    </>
  );
}

License

MIT

Package Sidebar

Install

npm i @tosspayments/widget-sdk-react-native

Weekly Downloads

674

Version

1.3.5

License

MIT

Unpacked Size

336 kB

Total Files

257

Last publish

Collaborators

  • daejin.oh
  • moreso
  • toss-core
  • kimyouknow
  • jh.yang
  • woojo.kim
  • node-chapter-bot
  • jiyoonpark
  • payments.frontend
  • eunko
  • zih0
  • dayoung.kang
  • joi0104
  • sh.park
  • myuoong
  • kimseongtoss
  • ykd1217