spring boot 카카오페이 오류 관련..

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
spring boot 카카오페이 오류 관련..

QA

spring boot 카카오페이 오류 관련..

본문

1. RestController 

@PostMapping("/payList" )
public void insertPay(ProductPayVo productPayVo) {

    shopService.insertPay(productPayVo);

    System.out.println("sadasdasdasdasdasd");
    System.out.println(productPayVo);

}

 

 

 

 

 

2. js

 

 

$(".cart__bigorderbtn").on("click", function() {
    console.log("click!");
    console.log($(".priceResult").text());
    console.log($(".orderName").text());
    console.log($(".userId").text());
    console.log($(".userTelePhone").text());
    console.log($(".userEmail").text());
    console.log($("#address").text());
    console.log($("#address3").text());
    IMP.init("imp67568217"); // 가맹점 식별코드를 매개변수로 넘겨준다.

    IMP.request_pay(
        {
            pg: "kakaopay.TC0ONETIME", // kakaopay.{상점아이디(CID)}
            pay_method: "card", // 생략가
            merchant_uid: "merchant" + new Date().getTime(), // 상점에서 생성한 고유 주문번호
            name: $(".orderName").text(), // 상품 구매 이름
            amount: $(".priceResultNumber").text(), // 가격
            buyer_email: $(".userEmail").text(),
            buyer_id: $(".userId").text(),
            buyer_addr: $("#address").text(),
            buyer_postcode: $("#address3").text(),
            m_redirect_url: "/shop/shoppingFinish", // 결제 후 이동할 페이지 url(리다이렉트)
            buyer_tel: $(".userTelePhone").text()
        },
        function(rsp) {
            console.log(rsp);
            console.log(rsp.buyer_addr);
            console.log(rsp.buyer_email);
            console.log(rsp.buyer_id);
            console.log(rsp.buyer_postcode);
            console.log(rsp.buyer_tel);
            console.log(rsp.name); // 상품 이름
            console.log(rsp.merchant_uid); // 주문 고유 번호

            if (rsp.success) {
                let obj = {
                    shoppingName: $(".orderName").text().trim(),
                    amount: parseInt($(".priceResultNumber").text().replace("원", "").replace(",", "")),
                    buyerEmail: $(".userEmail").text().trim(),
                    buyerId: $(".userId").text().trim(),
                    buyerAddress: $("#address").val().trim(),
                    buyerPostcode: $("#address3").val().trim(),
                    buyerTel: $(".userTelePhone").text().trim()
                };

                console.log(obj);

                $.ajax({
                    url: '/shops/payList',
                    type: 'post',
                    data: JSON.stringify(obj),
                    contentType: "application/json; charset=utf-8",
                    success: function() {
                        console.log("success");
                        window.location.href = "/shop/shoppingFinish";
                    }
                });
            } else {
                console.log("else");
                // window.location.href = "/shop/shoppingPayInfoError";
            }
        }
    );
});


 

 

 

 

 

 

카카오페이 api 사용 중 

 

POST http://localhost:10000/shops/payList 500 이런 오류가 콘솔창에 출력이 되면서

 

결제 완료 화면으로 넘어가지질 않습니다..

 

서버 오류 일 가능성이 높은데 restcontroller로 넘겨주질 못하고 있습니다..

 

 

 

이 질문에 댓글 쓰기 :

답변 2

500 에러 관련해서 찾아봤습니다.

https://zimzalabim.tistory.com/18

https://nirsa.tistory.com/367

 

직업 브라우저에서 url 입력해서 콜 해보시는 것도 방법이고요.

다음과 같이 수정해 볼 수 있을 것 같습니다.

 

1. RestController


import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PayController {
    
    @PostMapping("/payList")
    public ResponseEntity<String> insertPay(@RequestBody ProductPayVo productPayVo) {
        // shopService.insertPay(productPayVo);
        System.out.println("sadasdasdasdasdasd");
        System.out.println(productPayVo);
        
        // TODO: Insert payment logic here
        
        return ResponseEntity.ok("Success");
    }
}

 

2. JavaScript


$(".cart__bigorderbtn").on("click", function() {
    console.log("click!");
    console.log($(".priceResult").text());
    console.log($(".orderName").text());
    console.log($(".userId").text());
    console.log($(".userTelePhone").text());
    console.log($(".userEmail").text());
    console.log($("#address").text());
    console.log($("#address3").text());
    IMP.init("imp67568217"); // 가맹점 식별코드를 매개변수로 넘겨준다.
    IMP.request_pay(
        {
            pg: "kakaopay.TC0ONETIME", // kakaopay.{상점아이디(CID)}
            pay_method: "card", // 생략 가능
            merchant_uid: "merchant" + new Date().getTime(), // 상점에서 생성한 고유 주문번호
            name: $(".orderName").text(), // 상품 구매 이름
            amount: $(".priceResultNumber").text(), // 가격
            buyer_email: $(".userEmail").text(),
            buyer_id: $(".userId").text(),
            buyer_addr: $("#address").text(),
            buyer_postcode: $("#address3").text(),
            m_redirect_url: "/shop/shoppingFinish", // 결제 후 이동할 페이지 url(리다이렉트)
            buyer_tel: $(".userTelePhone").text()
        },
        function(rsp) {
            console.log(rsp);
            console.log(rsp.buyer_addr);
            console.log(rsp.buyer_email);
            console.log(rsp.buyer_id);
            console.log(rsp.buyer_postcode);
            console.log(rsp.buyer_tel);
            console.log(rsp.name); // 상품 이름
            console.log(rsp.merchant_uid); // 주문 고유 번호
            if (rsp.success) {
                let obj = {
                    shoppingName: $(".orderName").text().trim(),
                    amount: parseInt($(".priceResultNumber").text().replace("원", "").replace(",", "")),
                    buyerEmail: $(".userEmail").text().trim(),
                    buyerId: $(".userId").text().trim(),
                    buyerAddress: $("#address").val().trim(),
                    buyerPostcode: $("#address3").val().trim(),
                    buyerTel: $(".userTelePhone").text().trim()
                };
                console.log(obj);
                $.ajax({
                    url: '/payList',
                    type: 'post',
                    data: JSON.stringify(obj),
                    contentType: "application/json; charset=utf-8",
                    success: function() {
                        console.log("success");
                        window.location.href = "/shop/shoppingFinish";
                    },
                    error: function() {
                        console.log("error");
                        // 오류 처리 로직 추가
                    }
                });
            } else {
                console.log("else");
                // window.location.href = "/shop/shoppingPayInfoError";
            }
        }
    );
});

 

RestController에서 /payList 엔드포인트를 정의하고, JavaScript에서 해당 엔드포인트로 POST 요청을 보내는 방식 이므로, RestController에서는 요청 본문을 @RequestBody로 받아 ProductPayVo 객체로 변환하고, JavaScript에서는 $.ajax()를 사용하여 데이터를 전송하게 됩니다.

 

주석처리 되거나 'TODO'로 표시된 해당 부분은 실제 비즈니스 로직이나 필요한 로직으로 수정 하시면 됩니다.  또한, shopService.insertPay(productPayVo) 부분은 실제 비즈니스 로직이 적용되어야 하는 부분이므로, 필요한 로직으로 대체 하시면 됩니다.

 

참고하셔서 원하시는 방식으로 로직을 구현하시면 될것 같습니다.

 

추가로 500 오류는 서버에서 내부 오류가 발생했음을 나타내며 RestController로 데이터를 전송할 때 발생한 오류일 가능성이 있으므로 서버 로그의 오류 메시지를 확인해 보시는것도 해결하시는데 도움이 될 수 있습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 2,664
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT