티스토리 뷰

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를 활용한 적립금 조회, 지급, 차감 기능을 효과적으로 구현할 수 있습니다.

댓글