PAYMENT DOCS
STRIPE-SETUP
Name
Description
Example
Output
Install StripeDescription: Instal library Stripe untuk Node.js.
Example:
pnpm add stripe
Output: Package terinstal
Install StripeInstal library Stripe untuk Node.js.
pnpm add stripe
Package terinstal
Initialize StripeDescription: Buat instance Stripe dengan secret key dari environment.
Example:
import Stripe from 'stripe'
export const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
apiVersion: '2025-03-31',
typescript: true,
})Output: Stripe client siap
Initialize StripeBuat instance Stripe dengan secret key dari environment.
import Stripe from 'stripe'
export const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
apiVersion: '2025-03-31',
typescript: true,
})Stripe client siap
Stripe API VersionDescription: Tentukan versi API Stripe yang digunakan (wajib).
Example:
apiVersion: '2025-03-31'
Output: Versi API dikunci
Stripe API VersionTentukan versi API Stripe yang digunakan (wajib).
apiVersion: '2025-03-31'
Versi API dikunci
Environment VariablesDescription: Simpan secret key dan webhook secret di .env.
Example:
STRIPE_SECRET_KEY=sk_live_xxx NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_xxx STRIPE_WEBHOOK_SECRET=whsec_xxx
Output: Variable aman
Environment VariablesSimpan secret key dan webhook secret di .env.
STRIPE_SECRET_KEY=sk_live_xxx NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_xxx STRIPE_WEBHOOK_SECRET=whsec_xxx
Variable aman
STRIPE-CHECKOUT
Name
Description
Example
Output
Create Checkout SessionDescription: Membuat session Stripe Checkout untuk pembayaran sekali jalan.
Example:
const session = await stripe.checkout.sessions.create({
mode: 'payment',
line_items: [{ price_data: { currency: 'usd', product_data: { name: 'Kaos' }, unit_amount: 2000 }, quantity: 1 }],
success_url: `${origin}/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${origin}/cancel`,
})Output: URL checkout Stripe
Create Checkout SessionMembuat session Stripe Checkout untuk pembayaran sekali jalan.
const session = await stripe.checkout.sessions.create({
mode: 'payment',
line_items: [{ price_data: { currency: 'usd', product_data: { name: 'Kaos' }, unit_amount: 2000 }, quantity: 1 }],
success_url: `${origin}/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${origin}/cancel`,
})URL checkout Stripe
Redirect to CheckoutDescription: Arahkan pengguna ke URL Stripe Checkout.
Example:
return NextResponse.redirect(session.url!, 303)
Output: Pengguna diarahkan
Redirect to CheckoutArahkan pengguna ke URL Stripe Checkout.
return NextResponse.redirect(session.url!, 303)
Pengguna diarahkan
Checkout Session ModeDescription: Mode checkout: payment, subscription, setup.
Example:
mode: 'subscription', // untuk langganan
Output: Sesuai kebutuhan
Checkout Session ModeMode checkout: payment, subscription, setup.
mode: 'subscription', // untuk langganan
Sesuai kebutuhan
Customer EmailDescription: Otomatis mengisi email pelanggan di Stripe Checkout.
Example:
customer_email: user.email,
Output: Email terisi
Customer EmailOtomatis mengisi email pelanggan di Stripe Checkout.
customer_email: user.email,
Email terisi
Metadata CheckoutDescription: Menyematkan data tambahan di sesi checkout.
Example:
metadata: { orderId: '123' },Output: Data orderId tercatat
Metadata CheckoutMenyematkan data tambahan di sesi checkout.
metadata: { orderId: '123' },Data orderId tercatat
STRIPE-PAYMENT-INTENTS
Name
Description
Example
Output
Create PaymentIntentDescription: Membuat PaymentIntent untuk pembayaran terprogram (custom UI).
Example:
const paymentIntent = await stripe.paymentIntents.create({
amount: 2000,
currency: 'usd',
payment_method_types: ['card'],
})Output: Client secret
Create PaymentIntentMembuat PaymentIntent untuk pembayaran terprogram (custom UI).
const paymentIntent = await stripe.paymentIntents.create({
amount: 2000,
currency: 'usd',
payment_method_types: ['card'],
})Client secret
Client SecretDescription: Client secret digunakan di frontend untuk konfirmasi pembayaran.
Example:
const clientSecret = paymentIntent.client_secret
Output: pi_xxx_secret_xxx
Client SecretClient secret digunakan di frontend untuk konfirmasi pembayaran.
const clientSecret = paymentIntent.client_secret
pi_xxx_secret_xxx
Update PaymentIntentDescription: Mengubah amount atau metadata sebelum konfirmasi.
Example:
await stripe.paymentIntents.update('pi_xxx', { amount: 3000 })Output: PaymentIntent terupdate
Update PaymentIntentMengubah amount atau metadata sebelum konfirmasi.
await stripe.paymentIntents.update('pi_xxx', { amount: 3000 })PaymentIntent terupdate
Confirm PaymentIntentDescription: Konfirmasi PaymentIntent (biasanya dari frontend dengan Stripe Elements).
Example:
await stripe.confirmCardPayment(clientSecret, { payment_method: { card } })Output: Pembayaran terkonfirmasi
Confirm PaymentIntentKonfirmasi PaymentIntent (biasanya dari frontend dengan Stripe Elements).
await stripe.confirmCardPayment(clientSecret, { payment_method: { card } })Pembayaran terkonfirmasi
STRIPE-WEBHOOK
Name
Description
Example
Output
Webhook EndpointDescription: Route handler untuk menerima event dari Stripe.
Example:
export async function POST(req: Request) { ... }Output: /api/stripe/webhook
Webhook EndpointRoute handler untuk menerima event dari Stripe.
export async function POST(req: Request) { ... }/api/stripe/webhook
Verify SignatureDescription: Memverifikasi bahwa request berasal dari Stripe.
Example:
const sig = req.headers.get('stripe-signature')!
const event = stripe.webhooks.constructEvent(body, sig, process.env.STRIPE_WEBHOOK_SECRET!)Output: Event terverifikasi
Verify SignatureMemverifikasi bahwa request berasal dari Stripe.
const sig = req.headers.get('stripe-signature')!
const event = stripe.webhooks.constructEvent(body, sig, process.env.STRIPE_WEBHOOK_SECRET!)Event terverifikasi
Handle EventsDescription: Menangani event seperti checkout.session.completed, payment_intent.succeeded.
Example:
switch (event.type) {
case 'checkout.session.completed':
const session = event.data.object
// fulfill order
break
// ...
}Output: Aksi terpicu
Handle EventsMenangani event seperti checkout.session.completed, payment_intent.succeeded.
switch (event.type) {
case 'checkout.session.completed':
const session = event.data.object
// fulfill order
break
// ...
}Aksi terpicu
Return 200 QuicklyDescription: Webhook harus merespons 200 dengan cepat, pekerjaan berat bisa async.
Example:
return new Response(null, { status: 200 })Output: Stripe terima respons
Return 200 QuicklyWebhook harus merespons 200 dengan cepat, pekerjaan berat bisa async.
return new Response(null, { status: 200 })Stripe terima respons
STRIPE-SUBSCRIPTION
Name
Description
Example
Output
Create SubscriptionDescription: Membuat langganan periodik untuk pelanggan.
Example:
const subscription = await stripe.subscriptions.create({
customer: 'cus_xxx',
items: [{ price: 'price_xxx' }],
payment_behavior: 'default_incomplete',
expand: ['latest_invoice.payment_intent'],
})Output: Status langganan
Create SubscriptionMembuat langganan periodik untuk pelanggan.
const subscription = await stripe.subscriptions.create({
customer: 'cus_xxx',
items: [{ price: 'price_xxx' }],
payment_behavior: 'default_incomplete',
expand: ['latest_invoice.payment_intent'],
})Status langganan
Price ObjectDescription: Objek harga (price) untuk produk/langganan.
Example:
const price = await stripe.prices.create({
unit_amount: 2000,
currency: 'usd',
recurring: { interval: 'month' },
product: 'prod_xxx',
})Output: price_xxx
Price ObjectObjek harga (price) untuk produk/langganan.
const price = await stripe.prices.create({
unit_amount: 2000,
currency: 'usd',
recurring: { interval: 'month' },
product: 'prod_xxx',
})price_xxx
Trial PeriodDescription: Menawarkan masa percobaan sebelum penagihan.
Example:
trial_period_days: 14
Output: 14 hari gratis
Trial PeriodMenawarkan masa percobaan sebelum penagihan.
trial_period_days: 14
14 hari gratis
Cancel SubscriptionDescription: Membatalkan langganan (bisa langsung atau di akhir periode).
Example:
await stripe.subscriptions.cancel('sub_xxx')Output: Status canceled
Cancel SubscriptionMembatalkan langganan (bisa langsung atau di akhir periode).
await stripe.subscriptions.cancel('sub_xxx')Status canceled
Customer PortalDescription: Mengarahkan pelanggan ke Stripe Customer Portal untuk kelola langganan.
Example:
const portalSession = await stripe.billingPortal.sessions.create({
customer: 'cus_xxx',
return_url: origin,
})
return NextResponse.redirect(portalSession.url, 303)Output: URL portal
Customer PortalMengarahkan pelanggan ke Stripe Customer Portal untuk kelola langganan.
const portalSession = await stripe.billingPortal.sessions.create({
customer: 'cus_xxx',
return_url: origin,
})
return NextResponse.redirect(portalSession.url, 303)URL portal
MIDTRANS
Name
Description
Example
Output
Install MidtransDescription: Install library Midtrans untuk Node.js.
Example:
pnpm add midtrans-client
Output: Package terinstal
Install MidtransInstall library Midtrans untuk Node.js.
pnpm add midtrans-client
Package terinstal
Initialize MidtransDescription: Buat instance Midtrans Snap dan Core API.
Example:
import midtransClient from 'midtrans-client'
const snap = new midtransClient.Snap({
isProduction: false,
serverKey: process.env.MIDTRANS_SERVER_KEY,
clientKey: process.env.MIDTRANS_CLIENT_KEY,
})Output: Snap instance siap
Initialize MidtransBuat instance Midtrans Snap dan Core API.
import midtransClient from 'midtrans-client'
const snap = new midtransClient.Snap({
isProduction: false,
serverKey: process.env.MIDTRANS_SERVER_KEY,
clientKey: process.env.MIDTRANS_CLIENT_KEY,
})Snap instance siap
Snap TransactionDescription: Membuat transaksi Snap untuk mendapatkan token pembayaran.
Example:
const transaction = await snap.createTransaction({
transaction_details: { order_id: 'ORDER-123', gross_amount: 200000 },
customer_details: { first_name: 'Ridho', email: 'ridho@mail.com' },
})Output: Token snap
Snap TransactionMembuat transaksi Snap untuk mendapatkan token pembayaran.
const transaction = await snap.createTransaction({
transaction_details: { order_id: 'ORDER-123', gross_amount: 200000 },
customer_details: { first_name: 'Ridho', email: 'ridho@mail.com' },
})Token snap
Snap Redirect URLDescription: URL pembayaran Midtrans yang bisa di-redirect atau di-embed.
Example:
const redirectUrl = transaction.redirect_url
Output: https://app.sandbox.midtrans.com/snap/...
Snap Redirect URLURL pembayaran Midtrans yang bisa di-redirect atau di-embed.
const redirectUrl = transaction.redirect_url
https://app.sandbox.midtrans.com/snap/...
Midtrans WebhookDescription: Terima notifikasi pembayaran dari Midtrans.
Example:
export async function POST(req: Request) {
const body = await req.json()
// verifikasi signature key
}Output: Status transaksi
Midtrans WebhookTerima notifikasi pembayaran dari Midtrans.
export async function POST(req: Request) {
const body = await req.json()
// verifikasi signature key
}Status transaksi
XENDIT
Name
Description
Example
Output
Install XenditDescription: Install library Xendit untuk Node.js.
Example:
pnpm add xendit-node
Output: Package terinstal
Install XenditInstall library Xendit untuk Node.js.
pnpm add xendit-node
Package terinstal
Initialize XenditDescription: Buat instance Xendit API.
Example:
import { Xendit } from 'xendit-node'
const xendit = new Xendit({ secretKey: process.env.XENDIT_SECRET_KEY })Output: Xendit instance
Initialize XenditBuat instance Xendit API.
import { Xendit } from 'xendit-node'
const xendit = new Xendit({ secretKey: process.env.XENDIT_SECRET_KEY })Xendit instance
Create InvoiceDescription: Membuat invoice pembayaran yang bisa dibayar via berbagai metode.
Example:
const invoice = await xendit.Invoice.createInvoice({
externalId: 'INV-123',
amount: 200000,
currency: 'IDR',
customer: { givenNames: 'Ridho', email: 'ridho@mail.com' },
successRedirectUrl: 'https://example.com/success',
})Output: Invoice URL & ID
Create InvoiceMembuat invoice pembayaran yang bisa dibayar via berbagai metode.
const invoice = await xendit.Invoice.createInvoice({
externalId: 'INV-123',
amount: 200000,
currency: 'IDR',
customer: { givenNames: 'Ridho', email: 'ridho@mail.com' },
successRedirectUrl: 'https://example.com/success',
})Invoice URL & ID
Invoice WebhookDescription: Menerima notifikasi status invoice.
Example:
export async function POST(req: Request) {
const body = await req.json()
// verifikasi callback token
}Output: Status invoice
Invoice WebhookMenerima notifikasi status invoice.
export async function POST(req: Request) {
const body = await req.json()
// verifikasi callback token
}Status invoice
PAYPAL
Name
Description
Example
Output
PayPal JavaScript SDKDescription: Muat PayPal SDK di frontend untuk menampilkan tombol.
Example:
import { PayPalScriptProvider, PayPalButtons } from '@paypal/react-paypal-js'
<PayPalScriptProvider options={{ clientId: process.env.NEXT_PUBLIC_PAYPAL_CLIENT_ID, currency: 'USD' }}>
<PayPalButtons createOrder={(data, actions) => { return actions.order.create({ purchase_units: [{ amount: { value: '10.00' } }] }) }} />
</PayPalScriptProvider>Output: Tombol PayPal
PayPal JavaScript SDKMuat PayPal SDK di frontend untuk menampilkan tombol.
import { PayPalScriptProvider, PayPalButtons } from '@paypal/react-paypal-js'
<PayPalScriptProvider options={{ clientId: process.env.NEXT_PUBLIC_PAYPAL_CLIENT_ID, currency: 'USD' }}>
<PayPalButtons createOrder={(data, actions) => { return actions.order.create({ purchase_units: [{ amount: { value: '10.00' } }] }) }} />
</PayPalScriptProvider>Tombol PayPal
Capture Order (Server)Description: Tangkap pembayaran setelah disetujui di frontend.
Example:
const response = await fetch(`https://api-m.sandbox.paypal.com/v2/checkout/orders/${orderID}/capture`, {
method: 'POST',
headers: { Authorization: `Bearer ${accessToken}` },
})Output: Status completed
Capture Order (Server)Tangkap pembayaran setelah disetujui di frontend.
const response = await fetch(`https://api-m.sandbox.paypal.com/v2/checkout/orders/${orderID}/capture`, {
method: 'POST',
headers: { Authorization: `Bearer ${accessToken}` },
})Status completed