결제하기 구현하기 -react




지금 바로 결제 페이지를 확인하세요!


1번

2번

둘 다 해야 한다

그리고 Firebase 홈페이지로 돌아갑니다.






중괄호가 아닌 괄호를 사용해야 합니다.


아래에 요소를 만들고 Promise를 사용하십시오.

<Route path="/payment">
    <Header />
    <Elements stripe={promise}>
    <Payment/>
    </Elements>
</Route>


아래는 Payment.js입니다.

import React, {useState} from 'react';

import './Payment.css'
import {useStateValue} from "./StateProvider";
import {Link, useHistory} from "react-router-dom";
import CheckoutProduct from "./CheckoutProduct";
import CurrencyFormat from 'react-currency-format';
import {getBasketTotal} from "./Reducer";
import {CardElement, useElements, useStripe} from "@stripe/react-stripe-js";

function Payment() {
    const ({basket, user }, dispatch ) = useStateValue();
    const history = useHistory();
    //App.js 에 적어주고 ! subtotal.js 결제하기 onclick 실행 !
    const (disable,setDisable) =useState(true);

    const (error, setError) = useState(null);
    const stripe = useStripe();
    const elements = useElements(true);
    const (processing,setProcessing) = useState("");
    const (succeeded , setSucceeded) = useState(false);
    const (clientSecret, setClientSecret) =useState(true);

    //아래는 비동기 async
    const handleSubmit = async(event) =>{

    }

    const handleChange = (event) => {
        setDisable(event.empty);
        setError(event.error ? event.error.message:"");
    }


    return (
        <div className="payment">
            <div className="payment_container">
                <Link to='/checkout' className="checkoutlink">
                    <h1>장바구니로 돌아가기 </h1>
                </Link>
                   <h1>{ basket?.length} 개의 상품목록이 존재합니다.</h1>

                    <div className="payment_section">
                        <div className="payment_title">
                            <h3>배달 받을곳</h3>
                        </div>
                        <div className="payment_address">
                            <p>{user?.email}님의 주소</p>
                            <p>강원도</p>
                            <p>철원</p>
                        </div>
                    </div>
            </div>

            <div className="payment_section">
                <div className="payment_title">
                    <h3>상품 목록</h3>
                </div>
                <div className="payment_items">
                    {basket.map((item) => {

                        return (
                            <CheckoutProduct
                                key={item.id}
                                id={item.id}
                                title={item.title}
                                image={item.image}
                                price={item.price}
                                rating={item.rating}
                            />
                        );
                    })}
                </div>
            </div>


            <div className="payment_section">
                <div className="payment_title">
                    <h3> 결제 </h3>
                </div>
                <div className="payment_detail">
                    <form onSubmit={handleSubmit}>
                        <CardElement onChange={handleChange}/>

                        <div className="payment_priceContainer">
                            <CurrencyFormat
                                renderText={(value) => (
                                    <>
                                        <p>
                                            총액(상품갯수 : {basket.length} EA) : <strong>{ value }원</strong>

                                        </p>
                                        <small className="subtotal_gift">
                                            <input type="checkbox"/> 체크박스 입니다.
                                        </small>
                                    </>
                                )}
                                decimalScale={2}  //소수점 몇짜리 까지
                                value={getBasketTotal(basket)}
                                displayType={'text'}
                                thousandSeparator={true}
                                prefix={'₩'}
                            />

                            <button disabled={processing || disable || succeeded }><span>{processing?<p>결제중입니다</p> : "결제하기"}</span></button>

                        </div>
                        {error && <div>{error}</div>}
                    </form>
                </div>
            </div>


        </div>
    );
}

export default Payment;

그런 다음 터미널에 다음 명령을 입력하십시오.

npm i axios –force

액시오스란 무엇인가

브라우저용 비동기 통신 라이브(깜박임 없이 쓰기)

Cloud Functions가 있는 서버 측

서버리스 서버를 가장한 서버, 간단한 기능