커스텀 PHP 웹사이트에 Stripe Checkout 추가하는 방법 (플러그인 없이)
Stripe는 이용 가능한 결제 API 중 가장 깔끔하며, 이를 PHP에 직접 연결하면 월 SaaS 요금도, WooCommerce의 군더더기도, Shopify의 거래 수수료도 없습니다. 다음은 BuiltToWinWeb의 실제 고객 스토어에서 돌아가고 있는 바로 그 구현입니다. 순수 PHP, 공식 Stripe SDK, 안전한 웹훅, 그리고 자동화된 이메일 확인입니다. 결제 세션, 리디렉션, 웹훅 검증, 주문 처리 같은 조각들이 어떻게 맞물리는지 보게 되어, 어떤 플랫폼에도 몫을 떼주지 않고 실제 결제를 받을 수 있습니다. 여기 있는 것은 모두 실제 운영 코드이지, 일회용 데모가 아닙니다.
네이티브 PHP + Stripe가 모든 페이지 빌더를 능가하는 이유
Shopify는 Stripe 자체 수수료 외에 거래당 0.5~2%를 추가로 청구합니다. WooCommerce는 14개 이상의 플러그인 의존성을 추가하여 체크아웃 페이지 LCP를 3.8초로 늘립니다.
- 플랫폼 거래 수수료 없음 – Stripe의 2.9% + 30¢만
- 체크아웃 페이지 Lighthouse 점수: 98 대 Shopify의 일반적인 61
- 완전한 웹훅 제어 – 커스텀 이행, 재고, 이메일
- 전자상거래 플랫폼 월 구독 비용 없음
- 코드 소유, 어디서나 호스팅, 자유롭게 마이그레이션
1단계 — Stripe PHP SDK 설치
Composer가 가장 깔끔한 방법입니다.
composer require stripe/stripe-php
체크아웃 스크립트 상단에 로드합니다:
require_once __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));
2단계 — Checkout 세션 생성 (서버 측)
비밀 키를 브라우저에 절대 노출하지 마세요. 프론트엔드가 POST할 서버 측 엔드포인트를 만드세요.
<?php
$session = \Stripe\Checkout\Session::create(['payment_method_types'=>['card'],'line_items'=>[['price_data'=>['currency'=>'usd','unit_amount'=>300000,'product_data'=>['name'=>'Business Pro Website']],'quantity'=>1]],'mode'=>'payment','success_url'=>'https://yoursite.com/success','cancel_url'=>'https://yoursite.com/pricing']);
echo json_encode(['url'=>$session->url]);
3단계 — 프론트엔드에서 사용자 리다이렉트
가격 페이지 버튼에서 간단한 fetch 호출:
document.getElementById('buy-btn').addEventListener('click', async () => {
const res = await fetch('/create-checkout-session.php', {method:'POST'});
const data = await res.json();
window.location.href = data.url;
});
4단계 — 웹훅 처리 (주문 이행)
결제 성공 시 Stripe가 웹훅 엔드포인트로 POST를 보냅니다.
<?php
$event = \Stripe\Webhook::constructEvent(file_get_contents('php://input'), $_SERVER['HTTP_STRIPE_SIGNATURE'], getenv('STRIPE_WEBHOOK_SECRET'));
if ($event->type === 'checkout.session.completed') { fulfill_order($event->data->object); }
http_response_code(200);
Stripe 대시보드에서 웹훅 URL을 등록하세요: 개발자 → 웹훅.
5단계 — PHPMailer로 확인 이메일 발송
`fulfill_order()` 함수 내에서 세션에서 고객 이메일을 가져옵니다:
function fulfill_order($session) {
$email = $session->customer_details->email;
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->setFrom('[email protected]', '귀사');
$mail->addAddress($email);
$mail->Subject = '결제 완료 – 감사합니다!';
$mail->Body = '주문이 확인되었습니다.';
$mail->send();
}
플랫폼 비교 — 맞춤형 PHP vs Shopify vs WooCommerce
실제 비즈니스 영향
월 $50,000 매출 스토어에서 Stripe의 2.9% + 30¢는 불가피합니다. 하지만 Shopify의 추가 플랫폼 수수료 0.5~2%는 월 $250~$1,000 추가 비용입니다.
- Shopify Advanced ($399/월) + $50k의 0.5% = 월 $649 플랫폼 비용
- 커스텀 PHP + Stripe = 월 $0 플랫폼 비용
- $8,000 커스텀 빌드 손익분기점: 9개월 이내
- 체크아웃 페이지 3배 빠른 로딩 = 장바구니 이탈률 감소
계산은 단순합니다: 월 $15,000 이상 처리하면 커스텀 PHP 스토어는 1년 이내에 본전을 뽑습니다.
보안 체크리스트
- 환경 변수에 키 저장 – PHP 파일에 하드코딩 금지
- 항상 `constructEvent()`로 Stripe 웹훅 서명 검증
- 어디서나 HTTPS 사용 – Stripe 필수 요구사항
- 멱등성: 처리 전 주문이 이미 존재하는지 확인
- `/create-checkout-session.php`에 속도 제한 적용 (IP당 10 req/시)
자주 묻는 질문
PHP에서 Stripe를 사용하려면 Composer가 필요한가요?
Composer가 권장되지만 필수는 아닙니다. ZIP 파일로 다운로드하여 require_once로 수동 포함할 수 있습니다.
Shopify 같은 플랫폼 없이 결제를 처리하는 것이 안전한가요?
네. Stripe는 PCI-DSS 레벨 1 인증을 받았습니다. 서버는 원시 카드 번호를 처리하지 않습니다.
실제 카드 청구 없이 Stripe를 테스트하는 방법은?
sk_test_ 접두사로 Stripe 테스트 모드를 사용하세요. 테스트 카드 4242 4242 4242 4242를 사용하세요.
이 방법으로 구독을 추가할 수 있나요?
네. Checkout 세션 모드를 "payment"에서 "subscription"으로 변경하고 반복 가격 ID를 전달합니다.
커스텀 Stripe 스토어를 구축해 드릴까요?
BuiltToWinWeb은 네이티브 Stripe 통합, Lighthouse 98+ 점수, 월 플랫폼 수수료 없는 커스텀 PHP 이커머스 스토어를 구축합니다.
스토어는 보통 3~4주 내에 납품됩니다. 24시간 이내 답변 보장.
동일한 Hostinger VPS 호스팅에서 통제된 테스트의 벤치마크 데이터.