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
다음과 같이 수정해 볼 수 있을 것 같습니다.
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로 데이터를 전송할 때 발생한 오류일 가능성이 있으므로 서버 로그의 오류 메시지를 확인해 보시는것도 해결하시는데 도움이 될 수 있습니다.
!-->!-->