Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 시작일종료일
  • 오류해결
  • 연습문제
  • AllArgsConstructor
  • 비쥬얼스튜디오코드
  • oracle
  • SQL
  • sql기간
  • colaboratory
  • SQLD합격후기
  • Eclipse
  • 창초기화
  • SQLD합격
  • spring
  • Database
  • 독학후기
  • 노마드코더
  • 기간설정
  • HTML
  • 기간쿼리
  • 코딩앙마
  • 콜라보레이토리
  • 백준
  • CSS
  • 파이썬온라인
  • Javascript
  • googlecolaboratory
  • 이것이자바다
  • java
  • 서버등록

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

[90일차] 카카오페이 결제시스템 적용 / 카카오페이 클릭 후 작업 / 결제승인요청 / 주문하기 기능 안에서 일어나는 작업
🏫 Open API_JAVA

[90일차] 카카오페이 결제시스템 적용 / 카카오페이 클릭 후 작업 / 결제승인요청 / 주문하기 기능 안에서 일어나는 작업

2022. 12. 1. 20:14
728x90

20221130(수)

  • 목차
    - 카카오페이 결제시스템 적용
    - 카카오페이 클릭 후 작업
    - 결제승인 요청
    - 주문하기 기능 안에서 일어나는 작업 

< 카카오페이 결제시스템 적용 >

  • API
    : 요청과 응답의 기능을 제공하는 프로그램.
    : 요청 주소 : 파라미터 제공 ↔ 응답(결과)

  • 신규 프로젝트 - 주요 기능
    (1) 라이브러리 (부품) : 프로젝트에 포함
    라이브러리는 부품의 개념이다. (프로그램 안에 포함되어있다.)
    (2) API 이용 : 프로젝트 외부에 서버를 두고 기능을 제공.
    API는 원격의 개념이다. (외부에 서버를 두고 기능을 끌어다 쓴다.)

  • 결제시스템 
    - PG사 : 전자지급결제대행 서비스 / 우리가 선택하는 개념이 아니다
    - 전자지급결제대행 서비스(Payment Gateway)  : 온라인 상점에서 상품과 서비스 판매 시,
      고객이 신용카드 및 다양한 결제수단을 이용하여 안전하게 결제할 수 있도록 지원하는 서비스
  • https://bit.ly/3gP6Vh1
 

전자지급결제대행서비스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 전자지급결제대행서비스(Payment Gateway)는 온라인 상점에서 상품과 서비스 판매 시, 고객이 신용카드 및 다양한 결제수단을 이용하여 안전하게 결제할 수 있도록

ko.wikipedia.org

 

  • 개발 성격에 따라 키가 다르다.

 

  • 키 값 가져오기
    https://developers.kakao.com/docs/latest/ko/kakaopay/common
 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

  • 위 내용을 우리 환경에 맞게 작업을 해주어야 한다.

 


< 카카오페이 클릭 후 작업 >

 

  • 결제방법을 '카카오페이' 선택 ➡ 아래 카카오페이 이미지 클릭 시 일어나는 작업

 


1. 결제정보 테이블 DB에 추가

-- 결제정보 테이블
CREATE TABLE PAYMENT_TBL (
    PAY_CODE        NUMBER          CONSTRAINT PK_PAYMENT_CODE  PRIMARY KEY, 
    ODR_CODE        NUMBER          NOT NULL, 
    PAY_METHOD      VARCHAR2(30)    NOT NULL, 
    PAY_DATE        DATE            DEFAULT SYSDATE,       
    PAY_TOT_PRICE   NUMBER          NOT NULL, 
    PAY_REST_PRICE  NUMBER          NOT NULL,
    PAY_NOBANK_USER VARCHAR2(20)    NULL,
    PAY_NOBANK      VARCHAR2(20)    NULL
);
CREATE SEQUENCE SEQ_PAYMENT_CODE;
COMMIT;

2. PaymentVO 클래스 생성


+) kakaoPay 관련 클래스 생성

1. com.swimlover.kakaopay 패키지 생성

 

2. Amount.java 생성

package com.docmall.kakaopay;

import lombok.Data;

@Data
public class Amount {

	private int total; // 전체 결제 금액
	private int tax_free; // 비과세 금액
	private int vat; // 부가세 금액
	private int point; // 사용한 포인트 금액
	private int discount; // 할인 금액
}

 

3. ApproveResponse.java 생성

package com.docmall.kakaopay;

import lombok.Data;

// 결제 승인요청에 의하여 응답받는 정보(두번째 요청)
@Data
public class ApproveResponse {

	private String aid; // 요청 고유 번호
	private String tid; // 결제 고유 번호
	private String cid; // 가맹점 코드
	private String sid; // 정기결제용 ID, 정기결제 CID로 단건결제 요청 시 발급
	private String partner_order_id; // 가맹점 주문번호, 최대 100자
	private String partner_user_id; // 가맹점 회원 id, 최대 100자
	private String payment_method_type; // 결제 수단, CARD 또는 MONEY 중 하나
	
	private Amount amount; // 결제 금액 정보
	
	private String item_name; // 상품 이름, 최대 100자
	private String item_code; // 상품 코드, 최대 100자
	private int quantity; // 상품 수량
	private String created_at; // 결제 준비 요청 시각
	private String approved_at; // 결제승인 시각
	private String payload; // 결제 승인 요청에 대해 저장한 값, 요청 시 전달된 내용
	
}

 

4. ReadyResponse.java 생성

package com.docmall.kakaopay;

import javax.annotation.Generated;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

// 결제준비를 위한 정보를 응답받음.(첫번째 요청)

@Getter
@Setter
@ToString
public class ReadyResponse {

	private String tid; // 결제 고유 번호, 20자
	/*
	 요청한 클라이언트가 PC 웹일 경우 카카오톡으로 결제 요청 메시지(TMS)를 보내기 위한 사용자 정보 입력 화면 Redirect URL 
	 */
	private String next_redirect_pc_url; 
	
	private String partner_order_id;
}

 


3. KakaoPayServiceImpl (서비스 파일은 따로 안 만들고 직접 코드)

 

     ✔ 카카오 Pay API에 요청하기 위한 작업
       1) HttpURLConnection을 이용한 HTTP 통신
       2) Rest Template를 이용한 통신(권장)

        - 참고 링크 : https://minkwon4.tistory.com/178

 

[WEB] RestTemplate을 이용하여 API 호출하기

RestTemplate이란? RestTemplate은 Spring 3.0 부터 지원하는 템플릿으로 Spring에서 HTTP 통신을 RESTful 형식에 맞게 손쉬운 사용을 제공해주는 템플릿이다. Rest API 서비스를 요청후 응답 받을 수 있도록 설계

minkwon4.tistory.com


4. KakaoPayServiceImpl에 값 구성하기

    요구하는 파라미터 정보를 다루기 위해 MultiValueMap을 이용해서 값 구성

    https://developers.kakao.com/docs/latest/ko/kakaopay/single-payment

CID 가맹점 코드 임시코드

 


 ✨ 클래스 특징

    HttpEntity<T> : HttpHeader, HttpBody를 포함하는 특징.
    HttpEntity<T> 클래스를 상속받아 구현한 클래스가 있다. RequestEntity, ResponseEntity
    ResponseEntity 클래스 : HttpHeader, HttpBody, HttpStatus 3가지 정보를 관리.
    httpHeaders 클래스 : 헤더 정보를 구성하는 기능.

 

5. KakaoPayServiceImpl 클래스에 HttpHeaders 클래스 추가

     - 카카오 Admin 키 삽입하기


6. KakaoPayServiceImpl 클래스에 외부 API 연결

 

    ✔ postForObject 메서드
     - 첫 번째 파라미터 : 카카오페이 요청 주소

     - 두번째 파라미터 : 요청 시 사용할 파라미터와 헤더 정보 구성

     - 세번째 파라미터 : 리턴 받는 클래스 정보


7. Order 컨트롤러에 주입 및 코드 추가

 


8. orderListInfo.jsp 코드 추가

 

 


< 결제승인 요청 >

 

1. Order 컨트롤러

    - 틀 잡기


2. KakaoPayServiceImpl 클래스


3. orderListInfo.jsp 코드 작업

    - ajax 코드 추가 작업

 

 

 


< 주문하기 기능 안에서 일어나는 작업 >

 

 💫 주문하기 기능 안에서 일어나는 작업

      - 주문내역 정보
         (1) 주문 테이블 삽입
         (2) 주문 상세 테이블 삽입

      - 결제내역 정보
        (3) 결제 테이블 삽입

 

     - 장바구니 비우기
         (4) 장바구니 테이블 삭제

 

      - 결제 : 카카오페이 기본 작업
                  (지금은 기본 작업만 한 상태다. 위에 세 가지 작업이 남았다!)

 

1. Order 매퍼

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.docmall.mapper.OrderMapper">

	<insert id="orderSave" parameterType="com.docmall.domain.OrderVO">
	
		<selectKey keyProperty="odr_code" order="BEFORE" resultType="long">
			SELECT SEQ_ORD_CODE.NEXTVAL FROM DUAL
		</selectKey>
	
		INSERT INTO ORDER_TBL
			(ODR_CODE, MEM_ID, ODR_NAME, ODR_ZIPCODE, ODR_ADDR, ODR_ADDR_D, ODR_PHONE, ODR_TOTAL_PRICE)
		VALUES
			(#{odr_code}, #{mem_id}, #{odr_name}, #{odr_zipcode}, #{odr_addr}, #{odr_addr_d}, #{odr_phone}, #{odr_total_price})
	
	</insert>
	
	<insert id="orderDetailSave">
	
		INSERT INTO ORDER_DETAIL_TBL
			(ODR_CODE, PDT_NUM, ODR_AMOUNT, ODR_PRICE)
		SELECT  
			#{odr_code}, C.PDT_NUM,  C.CART_AMOUNT, P.PDT_PRICE * C.CART_AMOUNT
		FROM 
			CART_TBL C INNER JOIN PRODUCT_TBL P	
		ON 
			C.PDT_NUM = P.PDT_NUM 
		WHERE 
			C.MEM_ID = #{mem_id}

	</insert>
	
	<insert id="paymentSave">
	
		INSERT INTO PAYMENT_TBL
			(PAY_CODE, ODR_CODE, MEM_ID, PAY_METHOD, PAY_TOT_PRICE)
		VALUES
			(SEQ_PAYMENT_CODE.NEXTVAL, #{odr_code}, #{mem_id}, #{pay_method}, #{pay_tot_price})
	
	</insert>

</mapper>

2. Order 서비스


3. Order 컨트롤러

 

 


참고링크
https://jungkeung.tistory.com/149

 

카카오 페이( Kakao pay) 기능구현

이번에 간편결제 기능인 카카오 페이 구현을 진행했으며 작업이 모두 끝나서 이를 정리해두려 한다. 준비하기 관리자 모드 > 환경설정 > 전자결제 설정 > 국내 전자 결제에서 PG를 신청하면서 동

jungkeung.tistory.com

 

728x90
저작자표시 (새창열림)

'🏫 Open API_JAVA' 카테고리의 다른 글

[92일차] 주문하기 코드모음 / 상품 상세페이지 / 상품 후기 작성  (0) 2022.12.05
[91일차] 카카오페이 연결 / 상품 목록에서 바로구매 진행하기  (0) 2022.12.01
[89일차] 주문하기 / 주문자 정보 & 배송지 정보 폼 / 카카오페이 결제  (0) 2022.12.01
[87일차] 장바구니 담기 / 장바구니 목록  (0) 2022.11.27
[86일차 - 2] 삭제 이벤트 처리 / nav에 링크연결 / admin 계정 생성 / 상품 메인페이지 만들기 / 카테고리 목록 만들기  (0) 2022.11.27
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [92일차] 주문하기 코드모음 / 상품 상세페이지 / 상품 후기 작성
    • [91일차] 카카오페이 연결 / 상품 목록에서 바로구매 진행하기
    • [89일차] 주문하기 / 주문자 정보 & 배송지 정보 폼 / 카카오페이 결제
    • [87일차] 장바구니 담기 / 장바구니 목록
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바