2탄에서는 vue.js 에서 axios를 이용하여 데이터들을 param을 담아 보냈다.
self.$axios.get("http://localhost:8181/members/certifications/redirect", { params: data })
이제 back에서는 파라미터로 넘어온 것들을 이용하여 어떻게 처리해 주는지 코드를 적어보았다.
controller로 params 을 받아 Service로 넘긴다. 그 후 포트원 api 가 요구하는 것처럼 토큰값을 얻어 본인인증 한 사람의 정보를 조회하여 현재 가지고 있는 DB의 내용과 맞춰 그 뒤의 프로세스들을 진행 할 것이다.
[Java]
Controller
// 본인인증완료 후 빼내 온 정보 중 핸드폰 번호와 입력한 핸드폰 번호가 일치한지 확인하고
// 일치하면 true 아니면 false 를 반환해서 완벽하게 이루어 졌나 확인 한다.
@GetMapping("/certifications/redirect")
public Map handleRedirect(@RequestParam("imp_uid") String impUid, @RequestParam("email") String email) {
boolean flag = false;
Map map = new HashMap<>();
System.out.println("Received imp_uid: " + impUid);
map = checkinfoservice.getAccessToken(impUid);
MemberDto dto = service.getMember(email);
String phone = (String) map.get("phone");
String name = (String) map.get("name");
if (dto != null) {
if (dto.getPhone().equals(phone)) {
flag = true;
}
}
map.put("flag", flag);
map.put("name", name);
return map;
}
Service
package com.example.demo.member;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import org.json.simple.JSONObject;
import org.springframework.stereotype.Service;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@Service
public class CheckinfoService {
// 인증코드로 token요청하고 사용자 phone과 이름 빼내기
public HashMap getAccessToken(String impUid) {
HashMap map = new HashMap<>();
System.out.println("impUid");
String impKey = "본인키";
String impSecret = "본인키";
String strUrl = "https://api.iamport.kr/users/getToken"; // 토큰 요청 보낼 주소
String access_token = " ";
String phone = "";
String name = "";
try {
URL url = new URL(strUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // url Http 연결 생성
// POST 요청
conn.setRequestMethod("POST");
conn.setDoOutput(true);// outputStreamm으로 post 데이터를 넘김
conn.setRequestProperty("content-Type", "application/json");
conn.setRequestProperty("Accept", "application/json");
// 파라미터 세팅
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
JSONObject requestData = new JSONObject();
requestData.put("imp_key", impKey);
requestData.put("imp_secret", impSecret);
bw.write(requestData.toString());
bw.flush();
bw.close();
int resposeCode = conn.getResponseCode();
System.out.println("응답코드 =============" + resposeCode);
if (resposeCode == 200) {// 성공
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
// 토큰 값 빼기
String response = sb.toString();
JsonParser parser = new JsonParser();
JsonObject responseJson = parser.parse(response).getAsJsonObject();
access_token = responseJson.getAsJsonObject("response").get("access_token").getAsString();
System.out.println("Access Token: " + access_token);
// 본인인증한 사람 정보 뺴오기
String getPaymentUrl = "https://api.iamport.kr/certifications/" + impUid;
HttpURLConnection getConn = (HttpURLConnection) new URL(getPaymentUrl).openConnection();
getConn.setRequestMethod("GET");
getConn.setRequestProperty("Content-Type", "application/json");
getConn.setRequestProperty("Authorization", "Bearer " + access_token);
int getResponseCode = getConn.getResponseCode();
System.out.println("GET 응답코드 =============" + getResponseCode);
if (getResponseCode == 200) { // 성공
BufferedReader getBr = new BufferedReader(new InputStreamReader(getConn.getInputStream()));
StringBuilder getResponseSb = new StringBuilder();
String getLine;
while ((getLine = getBr.readLine()) != null) {
getResponseSb.append(getLine).append("\n");
}
getBr.close();
String getResponse = getResponseSb.toString();
System.out.println("GET 응답 결과: " + getResponse);
JsonParser parser1 = new JsonParser();
JsonObject phoneJson1 = parser1.parse(getResponse).getAsJsonObject();
// 전화번호 값 빼기
phone = phoneJson1.getAsJsonObject("response").get("phone").getAsString();
System.out.println("phone: " + phone);
map.put("phone", phone);
//이름 값 빼기
name = phoneJson1.getAsJsonObject("response").get("name").getAsString();
System.out.println("이름>>>>>" + name);
map.put("name", name);
} else {
System.out.println("GET 에러 응답 메시지: " + getConn.getResponseMessage());
}
} else {
System.out.println(conn.getResponseMessage());
}
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
}
'프로젝트 > Plan + tiful (플랜티플)' 카테고리의 다른 글
[REST API] 네이버 로그인 구현하기 (2) - vue.js (0) | 2023.07.26 |
---|---|
[Rest Api] 네이버 로그인 구현하기 (1) - vue.js (0) | 2023.07.23 |
[Rest Api] 포트원 API를 이용한 본인인증 구현 (feat. vue.js) - (2) (0) | 2023.07.21 |
[Rest Api] 포트원 API를 이용한 본인인증 구현 (feat. vue.js) - (1) (0) | 2023.07.20 |
[Rest Api] 아임포트를 이용한 KG이니시스 결제 구현하기 (feat. vue.js) - (2) (0) | 2023.07.16 |