import React, { useState, useEffect } from 'react'; import { useHistory } from 'react-router-dom'; import DaumPostcode from "react-daum-postcode"; import ListCard from '../Components/ListCard'; import axios from 'axios'; import { isAuthenticated } from '../utils/auth'; import catchErrors from '../utils/catchErrors'; import { Container, Row, Col, Button, Form } from 'react-bootstrap'; const paymentInfo = {} function Payment() { const [cart, setCart] = useState([]) const [order, setOrder] = useState({ products: [] }) const [userData, setUserData] = useState({}) const [error, setError] = useState() const [post, setPost] = useState([]) const [address, setAddress] = useState("") const [finalPrice, setFinalPrice] = useState(0) const [paymentWay, setPaymentWay] = useState([]) const [completeState, setCompleteState] = useState(false) const user = isAuthenticated() let history = useHistory(); useEffect(() => { getUser() getCart() }, [user]) useEffect(() => { let price = 0 cart.map((el) => { price = Number(el.count) * Number(el.productId.price) + price }) setFinalPrice(price) }, [cart]) async function getUser() { try { const response = await axios.get(`/api/users/account/${user}`) const { name, tel, email } = response.data setUserData({ name: name, tel: tel, email: email }) } catch (error) { catchErrors(error, setError) } } async function getCart() { try { setError('') const response = await axios.get(`/api/cart/showcart/${user}`) const preCart = response.data.filter((el) => el.checked === true) if (preCart.length) { setCart(preCart) setOrder({ products: preCart }) } else { alert("주문하실 상품이 없습니다.") history.push("/home") } } catch (error) { catchErrors(error, setError) } } async function deleteOrder(e) { try { setError('') const response = await axios.post('/api/cart/deletecart', { userId: user, cartId: e.target.name }) const preCart = response.data.products.filter((el) => el.checked === true) setCart(preCart) setOrder({ products: preCart }) } catch (error) { catchErrors(error, setError) } } function handleReceiverInfo(e) { const { name, value } = e.target console.log(name, value) setOrder({ ...order, receiverInfo: { ...order.receiverInfo, [name]: value } }) } function handlepaymentInfo(e) { const { name, value } = e.target // console.log(name, value) paymentInfo[name] = value console.log(paymentInfo) // setOrder({ ...order, paymentInfo: { ...order.paymentInfo, [name]: value } }) } function postClick() { if (post.length !== 0) { setPost([]) } else { setPost(
) } } const handleComplete = (data) => { let fullAddress = data.address; let extraAddress = ""; if (data.addressType === "R") { if (data.bname !== "") { extraAddress += data.bname; } if (data.buildingName !== "") { extraAddress += extraAddress !== "" ? `, ${data.buildingName}` : data.buildingName; } fullAddress += extraAddress !== "" ? ` (${extraAddress})` : ""; } setAddress({ full: fullAddress, code: data.zonecode }); setOrder({ ...order, receiverInfo: { ...order.receiverInfo, address: fullAddress, postalCode: data.zonecode } }) } const postCodeStyle = { position: "absolute", width: "400px", height: "500px", padding: "7px", zIndex: "1000" }; function handleClick() { const bankList = (
입금은행 입금자 입금예정일
) setCompleteState("Remittance") setPaymentWay(bankList) } async function kakaopay() { setCompleteState("kakaopay") setPaymentWay(

'카카오페이'

를 선택하셨습니다.

주문하기를 눌러 결제를 이어가주세요.

) // setOrder({ ...order, paymentInfo: { bank: "kakaopay" }}) } async function paymentCompleted() { console.log(paymentInfo) console.log(completeState) const cartIds = [] order.products.map((el) => { cartIds.push(el._id) }) try { setError('') if (completeState === "kakaopay") { let itemNames = "" if (cart.length > 1) { itemNames = cart[0].productId.pro_name + ' 외 ' + String(cart.length - 1) + '개' } else { itemNames = cart[0].productId.pro_name } setError('') const response = await fetch('/api/kakaopay/test/single', { method: "POST", headers: { 'Content-type': 'application/json' }, body: JSON.stringify({ cid: 'TC0ONETIME', partner_order_id: 'partner_order_id', partner_user_id: user, item_name: itemNames, quantity: cart.length, total_amount: finalPrice + 2500, vat_amount: 200, tax_free_amount: 0, approval_url: 'http://localhost:3000/paymentcompleted', fail_url: 'http://localhost:3000/shoppingcart', cancel_url: 'http://localhost:3000/shoppingcart', }) }) const data = await response.json() const response1 = await axios.post(`/api/order/addorder`, { userId: user, ...order, completeState, total: finalPrice + 2500 }) const response2 = await axios.post(`/api/cart/deletecart2`, { userId: user, cartId: cartIds }) const response3 = await axios.post(`/api/product/pluspurchase`, { products: order.products }) if (response1 && response2 && response3) { window.location.href = data.redirect_url } } else if(completeState === "Remittance"){ const response1 = await axios.post(`/api/order/addorder`, { userId: user, ...order, paymentInfo, completeState, total: finalPrice + 2500 }) const response2 = await axios.post(`/api/cart/deletecart2`, { userId: user, cartId: cartIds }) const response3 = await axios.post(`/api/product/pluspurchase`, { products: order.products }) if (response1 && response2 && response3) { alert("주문이 완료되었습니다.") history.push('/paymentcompleted') } else { alert("주문에 실패하셨습니다. 다시 확인해주세요.") } } else { alert("completeState없음") } } catch (error) { catchErrors(error, setError) alert("주문에 실패하셨습니다. 정보가 모두 입력되었는지 다시 확인해주세요.") window.location.reload() } } if (error) { alert(`${error}`) setError('') } return ( {console.log("order=", order)}

주문/결제

주문자 정보
이름 휴대전화 이메일
받는사람 정보
이름 휴대전화 주소 {post} 상세 주소를 입력하세요.
주문상품정보
결제금액{finalPrice + 2500}원
결제수단
{/*
입금은행 입금자 입금예정일
*/} {paymentWay}
) } export default Payment