보라코딩
Day113_230608 스프링부트 iamport 이니시스 통합인증(토큰받기) 본문
저번에는 딱 화면 띄우기까지 했고
이제 Token 받기 성공!!!!
(참고_사용하려면 제이쿼리 cnd도 넣어줘야함!)
html
받아오는 정보로 추후 변경해줘야한다!!!
우선 아래와 같이 했을때 받아오는 것 확인 완료
[[${bookingVO.foodName}]]
<button onclick="iamport()" class="iamport">iamport 결제</button>
<script src="https://cdn.iamport.kr/js/iamport.payment-1.1.5.js"></script>
<script>
// 카드결제
function iamport(){
var IMP = window.IMP;
//가맹점 식별코드
IMP.init('imp어쩌고저쩌고 회원가입해서 넣기!!!!!!!!!!!!!!!!!!!!);
IMP.request_pay({
//name과 amout만있어도 결제 진행가능
pg : 'html5_inicis', /*kakaopay*/
pay_method : 'card',
merchant_uid : 'merchant_' + new Date().getTime(),
name : '[[${bookingVO.foodName}]]' , //결제창에서 보여질 이름
amount : 10, //실제 결제되는 가격
buyer_email : 'gaeun1811@naver.com',
buyer_name : '싼쵸보고싶다',
buyer_tel : '010-1234-5678',
buyer_addr : '동탄동탄동탄',
buyer_postcode : '123-456',
}, function(rsp) {
console.log("??"+rsp);
if (rsp.success) {
var msg = '결제가 완료되었습니다.';
var result = {
"imp_uid": rsp.imp_uid,
"merchant_uid": rsp.merchant_uid,
"buyer_email": 'gaeun1811@naver.com',
"pay_date": new Date().getTime(),
"amount": rsp.paid_amount,
"card_no": rsp.apply_num,
"refund": 'payed'
};
console.log("결제성공 " + msg);
$.ajax({
url: '/pay/inicisComplete',
type: 'POST',
data: JSON.stringify(result,
['imp_uid', 'merchant_uid', 'buyer_email',
'pay_date', 'amount', 'card_no', 'refund']),
contentType: 'application/json;charset=utf-8',
dataType: 'json', //서버에서 보내줄 데이터 타입
success: function (res) {
if (res == 1) {
console.log("추가성공");
} else {
console.log("Insert Fail!!!");
}
},
error: function () {
console.log("Insert ajax 통신 실패!!!");
}
})
}
else {
var msg = '결제에 실패하였습니다.';
msg += '에러내용 : ' + rsp.error_msg;
}
console.log(msg);
});
}
<script>
// 카드결제
function iamport(){
var IMP = window.IMP;
//가맹점 식별코드
IMP.init('imp어쩌고저쩌고 회원가입해서 넣기!!!!!!!!!!!!!!!!!!!!);
IMP.request_pay({
//name과 amout만있어도 결제 진행가능
pg : 'html5_inicis', /*kakaopay*/
pay_method : 'card',
merchant_uid : 'merchant_' + new Date().getTime(),
name : '[[${bookingVO.foodName}]]' , //결제창에서 보여질 이름
amount : 10, //실제 결제되는 가격
buyer_email : 'gaeun1811@naver.com',
buyer_name : '싼쵸보고싶다',
buyer_tel : '010-1234-5678',
buyer_addr : '동탄동탄동탄',
buyer_postcode : '123-456',
}, function(rsp) {
console.log("??"+rsp);
if (rsp.success) {
var msg = '결제가 완료되었습니다.';
var result = {
"imp_uid": rsp.imp_uid,
"merchant_uid": rsp.merchant_uid,
"buyer_email": 'gaeun1811@naver.com',
"pay_date": new Date().getTime(),
"amount": rsp.paid_amount,
"card_no": rsp.apply_num,
"refund": 'payed'
};
console.log("결제성공 " + msg);
$.ajax({
url: '/pay/inicisComplete',
type: 'POST',
data: JSON.stringify(result,
['imp_uid', 'merchant_uid', 'buyer_email',
'pay_date', 'amount', 'card_no', 'refund']),
contentType: 'application/json;charset=utf-8',
dataType: 'json', //서버에서 보내줄 데이터 타입
success: function (res) {
if (res == 1) {
console.log("추가성공");
} else {
console.log("Insert Fail!!!");
}
},
error: function () {
console.log("Insert ajax 통신 실패!!!");
}
})
}
else {
var msg = '결제에 실패하였습니다.';
msg += '에러내용 : ' + rsp.error_msg;
}
console.log(msg);
});
}
Controller
@PostMapping("/inicisComplete")
@ResponseBody
public int paymentComplete(@RequestBody InicisVO inicisVO) throws IOException {
log.info("inicisComplete!!!!!!!!!!!!!!! : " + inicisVO);
String token = paymentService.getToken();
log.info("token : " + token);
//결제상태 iamport에 update
String iamportUpdate = paymentService.iamportUpdate(inicisVO, token);
log.info("iamportUpdate : " + iamportUpdate);
//이후 DB 작업해서 insert되면 1되게 하자
return 1;
}
@ResponseBody
public int paymentComplete(@RequestBody InicisVO inicisVO) throws IOException {
log.info("inicisComplete!!!!!!!!!!!!!!! : " + inicisVO);
String token = paymentService.getToken();
log.info("token : " + token);
//결제상태 iamport에 update
String iamportUpdate = paymentService.iamportUpdate(inicisVO, token);
log.info("iamportUpdate : " + iamportUpdate);
//이후 DB 작업해서 insert되면 1되게 하자
return 1;
}
Service
impKey = REST API Key
impSecret = REST API Secret
public String getToken() throws ParseException {
String tokenUrl = "https://api.iamport.kr/users/getToken";
// 토큰 요청 데이터 설정
MultiValueMap<String, String> requestData = new LinkedMultiValueMap<>();
requestData.add("imp_key", impKey);
requestData.add("imp_secret", impSecret);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.postForEntity(tokenUrl, requestData, String.class);
if (responseEntity.getStatusCode() == HttpStatus.OK) {
String accessToken = null;
String tokenResponse = responseEntity.getBody();
ObjectMapper objectMapper = new ObjectMapper();
try {
// JSON 파싱
JsonNode jsonNode = objectMapper.readTree(tokenResponse);
// access_token 필드 추출
accessToken = jsonNode.get("response").get("access_token").asText();
// 추출한 access_token 사용
log.info("access_token: " + accessToken);
} catch (Exception e) {
e.printStackTrace();
}
return accessToken;
} else {
return null;
}
}
String tokenUrl = "https://api.iamport.kr/users/getToken";
// 토큰 요청 데이터 설정
MultiValueMap<String, String> requestData = new LinkedMultiValueMap<>();
requestData.add("imp_key", impKey);
requestData.add("imp_secret", impSecret);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.postForEntity(tokenUrl, requestData, String.class);
if (responseEntity.getStatusCode() == HttpStatus.OK) {
String accessToken = null;
String tokenResponse = responseEntity.getBody();
ObjectMapper objectMapper = new ObjectMapper();
try {
// JSON 파싱
JsonNode jsonNode = objectMapper.readTree(tokenResponse);
// access_token 필드 추출
accessToken = jsonNode.get("response").get("access_token").asText();
// 추출한 access_token 사용
log.info("access_token: " + accessToken);
} catch (Exception e) {
e.printStackTrace();
}
return accessToken;
} else {
return null;
}
}
public String iamportUpdate(InicisVO inicisVO, String token) {
String reqURL = "https://api.iamport.kr/payments/" + inicisVO.getImp_uid();
try {
URL url = new URL(reqURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// GET 요청
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", token);
int responseCode = conn.getResponseCode();
if(responseCode == 200) { // 결과 코드가 200이면 성공
// 요청을 통해 얻은 JSON타입의 Response 메세지 읽어오기
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
String result = "";
while ((line = br.readLine()) != null) {
result += line;
}
// Gson 라이브러리에 포함된 클래스로 JSON파싱 객체 생성
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(result);
JsonObject response = element.getAsJsonObject().get("response").getAsJsonObject();
br.close();
String paymentStatus = response.get("status").getAsString();
return "iamport update 완료";
}
}catch(Exception e) {
e.printStackTrace();
}
return "iamport update 실패";
}
String reqURL = "https://api.iamport.kr/payments/" + inicisVO.getImp_uid();
try {
URL url = new URL(reqURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// GET 요청
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", token);
int responseCode = conn.getResponseCode();
if(responseCode == 200) { // 결과 코드가 200이면 성공
// 요청을 통해 얻은 JSON타입의 Response 메세지 읽어오기
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
String result = "";
while ((line = br.readLine()) != null) {
result += line;
}
// Gson 라이브러리에 포함된 클래스로 JSON파싱 객체 생성
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(result);
JsonObject response = element.getAsJsonObject().get("response").getAsJsonObject();
br.close();
String paymentStatus = response.get("status").getAsString();
return "iamport update 완료";
}
}catch(Exception e) {
e.printStackTrace();
}
return "iamport update 실패";
}
Json으로 받아온 access_token 값 받느라 고생했다!
이러고 있다…
무한 10원 결제..

'코딩 > Spring' 카테고리의 다른 글
깔끔한 댓글창 (부트스트랩) (1) | 2023.06.09 |
---|---|
스프링부트 iamport 이니시스 환불하기!! (0) | 2023.06.08 |
스프링부트 카카오 API 로그인 (0) | 2023.06.06 |
알아서 잘 딱 깔끔하고 센스있게 정리하는 GitHub 핵심 개념 (2) | 2023.06.06 |
Day110_230605 스프링부트 iamport 이니시스 통합인증 (0) | 2023.06.05 |