계좌조회api로 쇼핑몰 자동 입금 확인 구현하기

목차

1. 무통장입금의 문제점

소규모 쇼핑몰이나 스타트업에서 가장 많이 사용하는 결제 방식은 무통장입금입니다. 신용카드 결제 수수료(2.5~3.5%)가 부담스러울 때 무통장입금은 좋은 대안입니다. 하지만 큰 문제가 있습니다.

수동 확인의 불편함

  • 관리자가 매번 은행 앱에 접속해서 거래내역을 확인해야 합니다
  • 입금자 이름과 주문자 이름이 다르면 매칭이 어렵습니다
  • 하루에 수십 건의 주문이 들어오면 확인 작업이 매우 번거롭습니다
  • 입금 확인이 늦어지면 고객 불만이 발생합니다

인건비와 시간 낭비

하루 30건의 무통장입금을 수동으로 확인한다면, 1건당 2분씩 총 60분이 소요됩니다. 월 22일 근무 기준으로 매월 22시간을 입금 확인에 사용하게 됩니다. 이는 막대한 인건비 낭비입니다.

해결책: 계좌조회api

계좌조회api자동 입금확인 API를 사용하면 이 모든 문제를 해결할 수 있습니다. 계좌조회api를 통해 거래내역을 자동으로 조회하고, 주문 금액과 매칭하여 입금을 자동으로 확인할 수 있습니다.

2. 자동 입금확인 API로 해결

계좌조회api를 사용한 자동 입금확인 API 시스템의 장점은 다음과 같습니다:

완전 자동화

5분마다 계좌조회api를 호출하여 신규 입금을 자동으로 확인합니다. 관리자는 더 이상 은행 앱에 접속할 필요가 없습니다.

즉시 처리

입금이 확인되면 즉시 주문 상태가 변경되고, 고객에게 입금 확인 알림이 발송됩니다. 배송 준비도 바로 시작할 수 있습니다.

비용 절감

계좌조회api 무료 플랜(월 3,000건)으로 충분합니다. 5분마다 1회 호출하면 월 8,640회이지만, 영업시간(09:00~18:00) 내에만 호출하면 월 2,640회로 무료 한도 내에서 운영 가능합니다.

정확성 향상

계좌조회api는 은행에서 직접 거래내역을 가져오므로 100% 정확합니다. 수동 확인 시 발생하는 실수를 완전히 방지할 수 있습니다.

3. 시스템 아키텍처

자동 입금확인 API 시스템의 구조는 다음과 같습니다:

고객 → 무통장입금 주문 생성
   ↓
[주문 DB]
   ↓
[Cron Job] 5분마다 실행
   ↓
[계좌조회api] 거래내역 조회
   ↓
[입금 매칭 로직]
   ↓
[주문 상태 업데이트]
   ↓
[고객 알림 발송]

필요한 정보

  • 주문 정보: 주문번호, 주문 금액, 주문일시
  • 계좌 정보: 은행 코드, 계좌번호
  • 계좌조회api 인증: API Key, Secret Key

4. 실전 구현 (Node.js)

계좌조회api를 사용하여 Node.js로 자동 입금확인 API를 구현해보겠습니다.

Step 1: 환경 변수 설정

# .env
BANK_API_KEY=pk_live_xxxxx
BANK_API_SECRET=sk_live_xxxxx
BANK_CODE=NH
ACCOUNT_NUMBER=123456789012

Step 2: 계좌조회api 호출 함수

// api/bankApi.js
const fetch = require('node-fetch');

async function getTransactions() {
  const apiKey = process.env.BANK_API_KEY;
  const secretKey = process.env.BANK_API_SECRET;

  const response = await fetch('https://api.bankapi.co.kr/v1/transactions', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}:${secretKey}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      bankCode: process.env.BANK_CODE,
      accountNumber: process.env.ACCOUNT_NUMBER
    })
  });

  if (!response.ok) {
    throw new Error(`계좌조회api 오류: ${response.status}`);
  }

  const data = await response.json();
  return data.data.transactions;
}

module.exports = { getTransactions };

Step 3: 입금 매칭 로직

// services/depositChecker.js
const { getTransactions } = require('../api/bankApi');
const Order = require('../models/Order');

async function checkNewDeposits() {
  try {
    // 1. 계좌조회api로 거래내역 조회
    const transactions = await getTransactions();

    // 2. 오늘 날짜의 입금만 필터링
    const today = new Date().toISOString().split('T')[0];
    const todayDeposits = transactions.filter(tx =>
      tx.type === '입금' && tx.date === today
    );

    // 3. 대기 중인 무통장입금 주문 조회
    const pendingOrders = await Order.find({
      paymentMethod: 'bank_transfer',
      status: 'pending',
      createdAt: { $gte: new Date(today) }
    });

    // 4. 입금과 주문 매칭
    for (const order of pendingOrders) {
      const matchedDeposit = todayDeposits.find(deposit =>
        deposit.amount === order.totalAmount &&
        !deposit.matched  // 이미 매칭된 입금은 제외
      );

      if (matchedDeposit) {
        // 5. 주문 상태 업데이트
        await Order.updateOne(
          { _id: order._id },
          {
            status: 'paid',
            paidAt: new Date(),
            depositInfo: {
              depositor: matchedDeposit.description,
              depositTime: matchedDeposit.time
            }
          }
        );

        // 6. 고객에게 알림 발송
        await sendPaymentConfirmation(order);

        // 7. 입금을 매칭됨으로 표시
        matchedDeposit.matched = true;

        console.log(`✅ 주문 ${order.orderNumber} 입금 확인 완료`);
      }
    }

    return {
      checked: pendingOrders.length,
      matched: todayDeposits.filter(d => d.matched).length
    };

  } catch (error) {
    console.error('❌ 계좌조회api 호출 실패:', error);
    throw error;
  }
}

module.exports = { checkNewDeposits };

Step 4: Cron Job 설정

// jobs/depositCheckJob.js
const cron = require('node-cron');
const { checkNewDeposits } = require('../services/depositChecker');

// 영업시간(09:00~18:00) 내 5분마다 실행
cron.schedule('*/5 9-18 * * *', async () => {
  console.log('🔍 자동 입금확인 API 실행...');
  try {
    const result = await checkNewDeposits();
    console.log(`✅ ${result.checked}건 확인, ${result.matched}건 매칭`);
  } catch (error) {
    console.error('❌ 자동 입금확인 실패:', error);
  }
});

console.log('✅ 계좌조회api 자동 입금확인 Cron Job 시작');

Step 5: Express 서버에 통합

// server.js
const express = require('express');
require('./jobs/depositCheckJob');  // Cron Job 시작

const app = express();

app.get('/api/deposit-check', async (req, res) => {
  // 수동으로 입금 확인 트리거
  const result = await checkNewDeposits();
  res.json(result);
});

app.listen(3000, () => {
  console.log('✅ 서버 시작 - 계좌조회api 자동 입금확인 활성화');
});

5. Python으로 구현하기

Python으로도 계좌조회api자동 입금확인 API를 쉽게 구현할 수 있습니다.

Python 예제

# deposit_checker.py
import requests
import os
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler

def get_transactions():
    """계좌조회api로 거래내역 조회"""
    api_key = os.getenv('BANK_API_KEY')
    secret_key = os.getenv('BANK_API_SECRET')

    response = requests.post(
        'https://api.bankapi.co.kr/v1/transactions',
        headers={
            'Authorization': f'Bearer {api_key}:{secret_key}',
            'Content-Type': 'application/json'
        },
        json={
            'bankCode': os.getenv('BANK_CODE'),
            'accountNumber': os.getenv('ACCOUNT_NUMBER')
        }
    )

    data = response.json()
    return data['data']['transactions']

def check_new_deposits():
    """자동 입금확인"""
    try:
        # 계좌조회api 호출
        transactions = get_transactions()

        # 오늘 날짜의 입금만 필터링
        today = datetime.now().strftime('%Y-%m-%d')
        deposits = [tx for tx in transactions
                   if tx['type'] == '입금' and tx['date'] == today]

        # 대기 중인 주문 조회
        pending_orders = get_pending_orders()

        matched = 0
        for order in pending_orders:
            # 금액이 일치하는 입금 찾기
            matching_deposit = next(
                (d for d in deposits if d['amount'] == order['amount']),
                None
            )

            if matching_deposit:
                # 주문 상태 업데이트
                update_order_status(order['id'], 'paid')
                send_notification(order)
                matched += 1
                print(f"✅ 주문 {order['number']} 입금 확인 완료")

        print(f"🔍 {len(pending_orders)}건 확인, {matched}건 매칭")

    except Exception as e:
        print(f"❌ 계좌조회api 호출 실패: {e}")

# 5분마다 실행
scheduler = BlockingScheduler()
scheduler.add_job(check_new_deposits, 'interval', minutes=5)

print("✅ 계좌조회api 자동 입금확인 시작")
scheduler.start()

6. 고급 기능

1. 중복 처리 방지

같은 입금을 여러 번 처리하지 않도록 Redis에 처리된 거래 ID를 캐싱하세요.

const redis = require('redis');
const client = redis.createClient();

async function isAlreadyProcessed(transactionId) {
  return await client.exists(`tx:${transactionId}`);
}

async function markAsProcessed(transactionId) {
  await client.setex(`tx:${transactionId}`, 86400, '1');  // 24시간
}

2. 입금자 이름 매칭

주문자 이름과 입금자 이름이 다를 수 있습니다. 주문 시 입금자 이름을 받아서 매칭 정확도를 높이세요.

const matchedDeposit = deposits.find(d =>
  d.amount === order.amount &&
  d.description.includes(order.depositorName)
);

3. Webhook 알림

입금이 확인되면 즉시 Webhook을 발송하여 다른 시스템과 연동하세요.

async function notifyWebhook(order) {
  await fetch(order.webhookUrl, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      event: 'payment.confirmed',
      orderId: order.id,
      amount: order.amount
    })
  });
}

7. 프로덕션 체크리스트

보안

  • ✅ API Key와 Secret Key를 환경 변수로 관리
  • ✅ GitHub에 .env 파일 커밋 금지
  • ✅ HTTPS 필수 사용

에러 처리

  • ✅ 계좌조회api 호출 실패 시 재시도 로직
  • ✅ 관리자에게 에러 알림 (Slack, Email)
  • ✅ 로그 기록 및 모니터링

성능

  • ✅ Rate Limit 준수 (무료: 분당 60회)
  • ✅ 데이터베이스 인덱스 최적화
  • ✅ Redis 캐싱 활용

테스트

  • API 테스트 페이지에서 미리 테스트
  • ✅ 소액 테스트 입금으로 검증
  • ✅ 다양한 시나리오 테스트 (동일 금액 중복 입금 등)

마치며

계좌조회api자동 입금확인 API를 사용하면 쇼핑몰 무통장입금 처리를 완전히 자동화할 수 있습니다. 수동 확인에 소요되던 시간과 인건비를 절감하고, 고객에게는 더 빠른 서비스를 제공할 수 있습니다.

계좌조회api는 월 3,000건까지 무료로 제공되므로, 소규모 쇼핑몰에서 부담 없이 시작할 수 있습니다. 계좌 거래내역 조회 API를 활용하여 비즈니스를 한 단계 업그레이드하세요.

🚀 지금 바로 시작하기
계좌조회api 무료 회원가입 · API 문서 · API 테스트