풀스택개발자_대학교 정규과정/프로젝트_throwsgg
쇼핑몰 결제 및 취소 기능
- -
시현 자료 : https://youtu.be/jRb8Iw4CGZ8
paymenySerivce.java
package dao;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
public class paymentService {
public String getToken() throws IOException {
HttpsURLConnection conn = null;
URL url = new URL("https://api.iamport.kr/users/getToken");
// URL 연결 (웹페이지 URL 연결.)
conn = (HttpsURLConnection) url.openConnection();
// 요청 방식 선택 (GET, POST)
conn.setRequestMethod("POST");
// 타입설정(text/html) 형식으로 전송 (Request Body 전달시 application/xml로 서버에 전달.)
conn.setRequestProperty("Content-type", "application/json");
// 서버 Response Data를 json 형식의 타입으로 요청.
conn.setRequestProperty("Accept", "application/json");
// OutputStream으로 POST 데이터를 넘겨주겠다는 옵션.
conn.setDoOutput(true);
JsonObject json = new JsonObject();
json.addProperty("imp_key", "2526475461703220");
json.addProperty("imp_secret",
"2hpv1CyJoSrcsj1ZQWqz4Nsr2F0D5lXO5CmUg19N9KEk747KzQ3gcionK4o9bOU3Luj6fHhcRS9qjtN8");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
// 출력
bw.write(json.toString());
// 버퍼 비움
bw.flush();
bw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
Gson gson = new Gson();
// Json 문자열 -> Map 객체로 변환 후 response 키 값의 value값을 추출
String response = gson.fromJson(br.readLine(), Map.class).get("response").toString();
System.out.println(response);
// Json 문자열 -> Map 객체로 변환 후 access_token 키 값의 value값을 추출
String token = gson.fromJson(response, Map.class).get("access_token").toString();
br.close();
conn.disconnect();
return token;
}
public void paymentInfo(String access_token,String imp_uid) throws IOException {
HttpsURLConnection conn = null;
URL url = new URL("https://api.iamport.kr/payments/" + imp_uid);
conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", access_token);
conn.setDoOutput(true);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
Gson gson = new Gson();
Map<String, Object> response123 = gson.fromJson(br.readLine(), Map.class);
br.close();
conn.disconnect();
// 방법3
for( String key : response123.keySet() ){
System.out.println( String.format("키 : %s, 값 : %s", key, response123.get(key)) );
}
}
public void payMentCancle(String access_token, String imp_uid, int amount, String reason) throws IOException {//결제취소 요청 메서드
System.out.println("결제 취소");
System.out.println(access_token);
System.out.println(imp_uid);
HttpsURLConnection conn = null;
URL url = new URL("https://api.iamport.kr/payments/cancel");
conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-type", "application/json");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", access_token);
conn.setDoOutput(true);
JsonObject json = new JsonObject();
json.addProperty("reason", reason);
json.addProperty("imp_uid", imp_uid);
json.addProperty("amount", amount);
json.addProperty("checksum", amount);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
bw.write(json.toString());
bw.flush();
bw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
br.close();
conn.disconnect();
}
}
getToken메서드는 토큰을 생성하는 부분입니다 url 요청시 아래 사진과 같이 json형태의 데이터로 응답을 받는데 Gson을 사용하여 JSON문자열을 Map객체로 변환 후 추출하는 식으로 구현하였습니다.
이 토큰을 가지고 결제정보를 가져올수 있는데
paymentInfo메서드 부분입니다 토큰으로 결제정보를 요청할 경우
{"code":0,"message":null,"response":{"amount":6000, .... } 형태의
중첩 JSON문을 받아오는데 여기서 amount(금액)부분만 가져오면 됩니다
payMentCancle 메서드는 주문취소 로직을 가지는데 반드시 토큰정보와
imp_uid , 금액등이 필요합니다
결제 관련 view.jsp
function payment() {
var IMP = window.IMP; // 생략가능
IMP.init('가맹점 식별코드'); // 'iamport' 대신 부여받은 "가맹점 식별코드"를 사용
var msg;
var oderName = '${carVoList.get(0).getPname() } 외 ${carVoList.size() - 1}개';
var name = $( 'input#name' ).val();
var recipient = $( 'input#recipient' ).val();
var phone = $( 'input#phone' ).val();
var email = $( 'input#email' ).val();
var totalAmount = document.getElementById("FtotalPrice").innerText;
var sample4_roadAddress = $( 'input#sample4_roadAddress' ).val();
var sample4_detailAddress = $( 'input#sample4_detailAddress' ).val();
if (name != ''&& phone != '' && email != '' && sample4_roadAddress != '' && sample4_detailAddress != '') {
IMP.request_pay({
pg : 'html5_inicis',
pay_method : 'card',
merchant_uid : 'merchant_' + new Date().getTime(),
name : oderName,
amount : totalAmount,
buyer_email : email,
buyer_name : name,
buyer_tel : phone,
buyer_addr : sample4_roadAddress+' '+sample4_detailAddress,
buyer_postcode : '123-456',
}, function(rsp) { // callback
if (rsp.success) {
// 결제 성공 시 로직,
msg = '결제가 완료되었습니다.';
msg += '\n은행 : ' + rsp.card_name;
msg += '\n카드번호 : ' + rsp.card_number;
msg += '\n주문번호 : ' + rsp.imp_uid;
msg += '\nName : ' + oderName;
msg += '\namount : ' + totalAmount;
msg += '\nbuyer_email : ' + email;
msg += '\nbuyer_name : ' + name;
msg += '\nbuyer_tel : ' + phone;
msg += '\nbuyer_addr : ' + sample4_roadAddress+' '+sample4_detailAddress;
alert(msg);
InsertSaleOrder(rsp.imp_uid, rsp.buyer_addr, rsp.buyer_tel, rsp.card_name, rsp.card_number, totalAmount, rsp.receipt_url,recipient);
} else {
// 결제 실패 시 로직,
msg = '결제에 실패하였습니다.';
msg += '에러내용 : ' + rsp.error_msg;
alert(msg);
}
});
} else{
alert('양식이 유효하지 않습니다');
}
}
function InsertSaleOrder(saleID,addr,tel,cardName,cardNo,total,detailLink,recipient) { // 제출 버튼 이벤트 지정
console.log('InsertSaleOrderAjax');
$.ajax({
type: "POST", // HTTP Method
url: "InsertSaleOrder.str", // 목적지
data: {
userid: '${sessionScope.id}', // 전송 데이터
saleID : saleID,
addr: addr,
tel: tel,
cardName: cardName,
cardno: cardNo,
total: total,
detailLink: detailLink,
recipient: recipient,
prodcount: '${carVoList.size()}'
}
}).done(function(data) {
location.replace('userinfo.jsp');
}).fail(function(Response) {
console.log('에러')
});
}
'풀스택개발자_대학교 정규과정 > 프로젝트_throwsgg' 카테고리의 다른 글
open API 파싱하기(JSON) (0) | 2022.09.01 |
---|---|
팀 프로젝트 - 유기동물 입양+쇼핑몰+ 커뮤니티 사이트 (0) | 2022.09.01 |
쇼핑몰 장바구니 기능 (0) | 2022.09.01 |
Contents
소중한 공감 감사합니다