보라코딩

Day113_230608 스프링부트 iamport 이니시스 통합인증(토큰받기) 본문

코딩/Spring

Day113_230608 스프링부트 iamport 이니시스 통합인증(토큰받기)

new 보라 2023. 6. 8. 10:33

저번에는 딱 화면 띄우기까지 했고
이제 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);
});
}



 
 
 
 
 
 

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;
}


 
 
 
 

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;
}
}

 
 

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 실패";


}

 
Json으로 받아온 access_token 값 받느라 고생했다!
 
 



 


 



이러고 있다…
무한 10원 결제..