티스토리 뷰
1. 카페24 API 이해
- API 주요 기능 확인
- 카페24 API는 적립금 조회, 지급, 차감 기능을 제공합니다.
- 주요 API:
- 적립금 조회: GET /v2/admin/customers/{customer_id}/point
- 적립금 지급: POST /v2/admin/customers/{customer_id}/point
- 적립금 차감: 동일한 POST 엔드포인트 사용하며, 음수 값으로 처리.
- API 인증
- 카페24는 OAuth 2.0 인증 방식을 사용합니다.
- 클라이언트 ID, 클라이언트 시크릿, 토큰 관리 프로세스를 구현해야 합니다.
2. Express.js 기본 구조 설계
- 폴더 구조
-
/project-root
├── app.js
├── /routes
│ └── points.js (적립금 관련 API 라우트)
├── /controllers
│ └── pointsController.js (비즈니스 로직)
├── /services
│ └── cafe24Service.js (카페24 API 호출)
├── /middleware
│ └── auth.js (OAuth 인증 처리)
├── /config
│ └── config.js (환경 설정)
└── /utils
└── apiHelper.js (HTTP 요청 헬퍼) - 기능 구성
- /routes: API 라우팅 설정
- /controllers: 요청에 대한 로직 처리
- /services: 카페24 API 호출
- /middleware: 인증 처리
- /utils: 헬퍼 유틸리티 함수
3. 구현 단계
1) 환경 설정
config/config.js에서 카페24 API 키와 인증 정보를 관리합니다.
module.exports = {
cafe24: {
clientId: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
baseUrl: 'https://YOUR_SHOP_DOMAIN.cafe24api.com',
redirectUri: 'YOUR_REDIRECT_URI'
}
};
2) OAuth 인증 처리
middleware/auth.js에서 Access Token 발급 및 갱신 로직 구현.
const axios = require('axios');
const { cafe24 } = require('../config/config');
let accessToken = null;
async function getAccessToken(req, res, next) {
if (!accessToken) {
try {
const response = await axios.post(`${cafe24.baseUrl}/oauth/token`, {
grant_type: 'client_credentials',
client_id: cafe24.clientId,
client_secret: cafe24.clientSecret,
});
accessToken = response.data.access_token;
} catch (error) {
return res.status(500).json({ error: 'Failed to get access token' });
}
}
req.accessToken = accessToken;
next();
}
module.exports = { getAccessToken };
3) 카페24 API 호출 서비스
services/cafe24Service.js에서 적립금 관련 API 호출 로직 작성.
const axios = require('axios');
const { cafe24 } = require('../config/config');
async function getPoints(customerId, token) {
const url = `${cafe24.baseUrl}/v2/admin/customers/${customerId}/point`;
const headers = { Authorization: `Bearer ${token}` };
const response = await axios.get(url, { headers });
return response.data;
}
async function updatePoints(customerId, points, token) {
const url = `${cafe24.baseUrl}/v2/admin/customers/${customerId}/point`;
const headers = { Authorization: `Bearer ${token}` };
const response = await axios.post(url, {
headers,
data: { amount: points }
});
return response.data;
}
module.exports = { getPoints, updatePoints };
4) 라우트와 컨트롤러
- 라우트 설정 (routes/points.js)
const express = require('express');
const { getAccessToken } = require('../middleware/auth');
const { getCustomerPoints, updateCustomerPoints } = require('../controllers/pointsController');
const router = express.Router();
router.get('/:customerId', getAccessToken, getCustomerPoints);
router.post('/:customerId', getAccessToken, updateCustomerPoints);
module.exports = router;
- 컨트롤러 구현 (controllers/pointsController.js)
const { getPoints, updatePoints } = require('../services/cafe24Service');
async function getCustomerPoints(req, res) {
try {
const customerId = req.params.customerId;
const points = await getPoints(customerId, req.accessToken);
res.status(200).json(points);
} catch (error) {
res.status(500).json({ error: 'Failed to get customer points' });
}
}
async function updateCustomerPoints(req, res) {
try {
const customerId = req.params.customerId;
const { amount } = req.body; // 지급/차감할 금액
const result = await updatePoints(customerId, amount, req.accessToken);
res.status(200).json(result);
} catch (error) {
res.status(500).json({ error: 'Failed to update customer points' });
}
}
module.exports = { getCustomerPoints, updateCustomerPoints };
5) Express.js 앱 설정
app.js에 모든 설정을 통합합니다.
const express = require('express');
const pointsRoutes = require('./routes/points');
const app = express();
app.use(express.json());
app.use('/points', pointsRoutes);
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
4. 테스트
- Postman 또는 cURL을 사용해 /points/:customerId로 적립금 조회 및 업데이트 테스트.
- 적립금 지급(양수) 및 차감(음수) 동작 확인.
5. 배포 및 모니터링
- 배포: AWS, GCP, Heroku 등 클라우드 서비스에 배포.
- 모니터링: 로그(예: Winston), API 호출 실패 처리(예: Retry Logic) 구현.
이 흐름을 기반으로 개발하면 카페24 API를 활용한 적립금 조회, 지급, 차감 기능을 효과적으로 구현할 수 있습니다.
'IT 이야기 > Node.js' 카테고리의 다른 글
[express.js] 카페24API로 고객ID 가져오기 (0) | 2025.01.21 |
---|---|
Express.js와 EJS를 사용하여 다국어 지원 관리자 페이지를 작성하려면 (0) | 2025.01.14 |
express.js와 mariaDB 연결 문제 (0) | 2025.01.10 |
express.js 로그인 시스템 구현 시 보안 (0) | 2025.01.05 |
[SERVER] ubuntu, nginx, node.js mariaDB로 서버 세팅하기 (1) | 2024.09.26 |
[express.js] express.js와 mariaDB를 이용하는 기본 설정 (0) | 2024.09.24 |
Hostinger 사용기1 - 설치 (0) | 2024.06.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- W3Schools Online Web Tutorials
- 구차니의 잡동사니 모음
- [IT]블로거팁닷컴
- 비앤아이님의 블로그
- Blog Suspect
- 즐거운하루 blog
- zinicap의 검색엔진 마케팅(SEM)
- 머니야머니야님의 블로그
- [Friend] AtinStory
- [기타배우기]해브원 박스
- [웹표준] SINDB.com
- 해커 C 이야기
- [애드센스] 길라잡이
- 정순봉의 IT SCHOOL
- 씨디맨의 컴퓨터이야기
- 2proo Life Story
- 못된준코의 세상리뷰
- [IT강좌] 정보문화사
- IN 대전
- 에우르트는 나쁜남자 -_-
- 씬의 싱크탱크
- 엔돌슨의 IT이야기
- 진이늘이
- 'Cooltime'의 블로그
- 후이의 Tistory
- Soulstorage
- 앤드&엔드의 블로그
- June Blog
- 노지의 소박한 이야기
- gbWorld
- 인터넷 속 나의 생각
- HarshNix
- ART of WEB
- 녹두장군 - 상상을 현실로
TAG
- 프로그래밍
- 인터넷
- 성공
- 안드로이드 어플
- 소스코드
- 안드로이드
- 예제 소스
- C
- 모토로이
- 강좌
- JavaScript
- 안드로이드 어플 추천
- MBTI 검사
- 리뷰
- 소스
- 인터넷 익스플로러
- C언어
- C언어 소스
- php
- It
- MBTI 자료
- MBTI
- 스마트폰
- MBTI 강좌
- MBTI 테스트
- C언어 문제
- 강의
- HTML
- 효과음
- 프로그래밍 문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함