ainote.kiam.kr 의 토스 결제 시스템 재활용
<!-- /payment/checkout.html --> <script src="https://js.tosspayments.com/v1/payment"></script> <script> const tossPayments = TossPayments('클라이언트키'); async function requestPayment(plan){ const orderRes = await fetch('/api/v1/payment/create-order', { method:'POST', headers:authHeader(), body: JSON.stringify({plan}) }); const {orderId, amount, orderName} = await orderRes.json(); tossPayments.requestPayment('카드', { amount, orderId, orderName, customerName: userName, successUrl: location.origin + '/payment/success.html', failUrl: location.origin + '/payment/fail.html' }); } </script>
// /api/payment/confirm.php $payload = json_decode(file_get_contents('php://input'), true); $paymentKey = $payload['paymentKey']; $orderId = $payload['orderId']; $amount = $payload['amount']; // 토스 API 호출 $ch = curl_init('https://api.tosspayments.com/v1/payments/confirm'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Basic '.base64_encode(TOSS_SECRET_KEY.':'), 'Content-Type: application/json' ], CURLOPT_POSTFIELDS => json_encode([ 'paymentKey'=>$paymentKey, 'orderId'=>$orderId, 'amount'=>$amount ]) ]); $res = json_decode(curl_exec($ch), true); if($res['status'] === 'DONE'){ // DB 업데이트 → 구독 활성화 activateSubscription($userId, $plan, $res); echo json_encode(['success'=>true]); }
| 14일 이내 무사용 | 전액 환불 |
| 14일 이내 일부 사용 | 일할 계산 환불 |
| 1개월 이후 | 잔여일 환불 (자동결제 정지) |
| 오결제 | 고객센터 → 1영업일 처리 |