Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

Persyaratan Kualitas Tinjauan Aplikasi

Stripe meninjau setiap aplikasi yang dikirimkan ke marketplace berdasarkan seperangkat persyaratan kualitas yang menyeluruh. Memahami standar ini sebelum pengembangan menghemat waktu dan mengurangi jumlah iterasi tinjauan.

Ikhtisar

Tinjauan Stripe App menilai aplikasi Anda pada enam area utama:

  1. Harga yang transparan, komunikasi biaya yang jelas
  2. Fungsionalitas aplikasi, keandalan dan kelengkapan
  3. Standar pengembang, kualitas kode dan penggunaan API
  4. Kualitas UX, standar antarmuka dan pengalaman pengguna
  5. Keamanan, perlindungan data dan praktik yang aman
  6. Kepatuhan hukum, persyaratan privasi dan regulasi

Harga yang transparan

Aplikasi Anda harus mengomunikasikan seluruh biaya kepada pengguna dengan jelas:

  • Pengungkapan harga: Semua harga harus dinyatakan di awal pada halaman marketplace
  • Tanpa biaya tersembunyi: Pengguna tidak boleh menemui tagihan tak terduga setelah pemasangan
  • Ketentuan uji coba: Jika menawarkan uji coba, nyatakan durasinya dengan jelas dan apa yang terjadi setelah berakhir
  • Alur upgrade: Setiap ajakan upsell atau upgrade harus tidak mengganggu dan jelas bersifat opsional
  • Mata uang: Tampilkan harga dalam mata uang lokal pengguna bila memungkinkan

Caution

Aplikasi yang menyamarkan harga atau menagih pengguna tanpa persetujuan yang jelas akan langsung ditolak.

Format tanggal dan waktu

Semua tanggal dan waktu yang ditampilkan di aplikasi Anda harus mengikuti konvensi Stripe Dashboard:

  • Gunakan locale pengguna untuk format tanggal bila tersedia
  • Tampilkan waktu dalam zona waktu lokal pengguna
  • Gunakan stempel waktu relatif untuk peristiwa terkini (misalnya, “2 hours ago”)
  • Gunakan stempel waktu absolut untuk peristiwa lama, lengkap dengan tanggal dan jam
  • Ikuti ISO 8601 untuk setiap field tanggal yang menghadap API
// Good: Use Stripe's date formatting utilities
import { formatDate, formatRelativeTime } from '@stripe/ui-extension-sdk/utils';
const formattedDate = formatDate(timestamp); // Locale-aware
const relativeTime = formatRelativeTime(timestamp); // "2 hours ago"

Pengaturan aplikasi

Jika aplikasi Anda memerlukan konfigurasi:

  • Sediakan tampilan Settings khusus yang dapat diakses dari viewport aplikasi
  • Isi terlebih dahulu nilai default yang masuk akal bila memungkinkan
  • Validasi seluruh input pengguna disertai pesan kesalahan yang jelas
  • Izinkan pengguna memperbarui pengaturan tanpa memasang ulang aplikasi
  • Simpan pengaturan lintas sesi menggunakan Stripe Secret Store API

Dukungan sandbox

Aplikasi Anda harus berfungsi dengan benar dalam mode sandbox (uji) Stripe:

  • Kompatibilitas mode uji: Semua fitur harus berfungsi dalam mode uji
  • Data uji: Gunakan data uji realistis yang memperlihatkan fungsionalitas aplikasi
  • Tanpa data live di sandbox: Jangan pernah menampilkan data produksi dalam mode uji
  • Penanganan yang baik: Jika suatu fitur tidak tersedia di sandbox, tampilkan pesan jelas yang menjelaskan alasannya
  • Setel sandbox_install_compatible: true pada manifest Anda
{
"sandbox_install_compatible": true
}

Fungsionalitas aplikasi

Keandalan

  • Aplikasi tidak boleh mogok atau membeku selama penggunaan normal
  • Semua fitur yang diiklankan harus bekerja sesuai deskripsi
  • Kesalahan jaringan harus ditangani dengan baik disertai opsi coba ulang
  • Aplikasi harus tetap responsif selama operasi di latar belakang

Kelengkapan

  • Tanpa konten placeholder, fitur “coming soon”, atau tautan rusak
  • Semua elemen UI harus berfungsi, tanpa tombol mati atau kontrol nonaktif
  • Teks bantuan dan tautan dokumentasi harus mengarah ke halaman yang valid
  • Pencopotan pemasangan harus menghapus seluruh data dan Webhook aplikasi secara bersih

Performa

  • UI harus tampil dalam waktu 3 detik pada koneksi standar
  • Operasi sinkronisasi latar belakang tidak boleh memblokir UI
  • Kumpulan data besar harus menggunakan paginasi atau lazy loading
  • Minimalkan panggilan API untuk menghindari pembatasan laju

Standar pengembang

Penggunaan API

  • Gunakan versi stabil terbaru dari Stripe API
  • Ikuti praktik terbaik Stripe API untuk paginasi, penanganan kesalahan, dan idempotensi
  • Jangan melampaui batas laju, terapkan exponential backoff untuk percobaan ulang
  • Gunakan Webhook untuk pembaruan berbasis event alih-alih polling

Kualitas kode

  • Tanpa kesalahan atau peringatan console pada build produksi
  • Hapus seluruh logging debug sebelum pengiriman
  • Tangani semua kasus tepi (empty state, data hilang, kegagalan jaringan)
  • Ikuti pola pustaka komponen Stripe demi UI yang konsisten

Versioning

  • Gunakan semantic versioning (MAJOR.MINOR.PATCH)
  • Dokumentasikan perubahan yang merusak kompatibilitas pada pembaruan versi
  • Pertahankan kompatibilitas mundur bila memungkinkan

Kualitas UX

Iklan

  • Tanpa iklan: Aplikasi Anda tidak boleh menampilkan iklan dalam bentuk apa pun
  • Tanpa promosi silang: Jangan mempromosikan produk atau layanan lain di dalam UI aplikasi
  • Konten bermerek: Tampilkan hanya identitas merek Anda sendiri, bukan merek pihak ketiga (kecuali mitra integrasi seperti Brevo)

Bahasa dan konten

  • Bahasa yang konsisten: Gunakan terminologi yang konsisten di seluruh aplikasi
  • Nada profesional: Selaraskan dengan gaya komunikasi Stripe Dashboard yang profesional dan ringkas
  • Tanpa jargon: Hindari jargon teknis yang mungkin tidak dipahami merchant
  • Periksa ejaan: Pastikan seluruh teks bebas dari kesalahan ejaan dan tata bahasa
  • Hanya bahasa Inggris: Semua teks yang dilihat pengguna harus dalam bahasa Inggris untuk aplikasi marketplace

Dialog konfirmasi

Minta konfirmasi pengguna untuk tindakan yang merusak atau signifikan:

// Good: Confirm before destructive actions
const handleDisconnect = async () => {
const confirmed = await showConfirmation({
title: 'Disconnect Brevo Integration',
message: 'This will stop syncing customer data to Brevo. You can reconnect at any time.',
confirmLabel: 'Disconnect',
cancelLabel: 'Cancel',
destructive: true,
});
if (confirmed) {
await disconnectIntegration();
}
};

Tindakan yang memerlukan konfirmasi:

  • Memutuskan integrasi
  • Menghapus data yang tersinkronisasi
  • Mengubah pengaturan yang memengaruhi aliran data
  • Mengembalikan konfigurasi ke nilai default

Status pemuatan

Selalu tampilkan indikator pemuatan untuk operasi asinkron:

// Good: Show loading state during data fetch
const CustomerSyncStatus = () => {
const { data, isLoading, error } = useSyncStatus();
if (isLoading) {
return <Spinner label="Loading sync status..." />;
}
if (error) {
return <Banner type="critical" title="Failed to load sync status">
{error.message}
</Banner>;
}
return <SyncStatusDisplay data={data} />;
};

Persyaratan:

  • Tampilkan spinner atau skeleton screen selama pemuatan data
  • Nonaktifkan tombol selama pengiriman formulir
  • Tampilkan indikator progres untuk operasi yang berjalan lama
  • Jangan pernah menampilkan layar kosong saat memuat

Pesan kesalahan

Sediakan pesan kesalahan yang jelas dan dapat ditindaklanjuti:

// Bad: Generic error
"Something went wrong"
// Good: Specific and actionable
"Unable to sync customer data to Brevo. Please verify your Brevo API key
in Settings and try again."

Panduan pesan kesalahan:

  • Jelaskan apa yang terjadi dengan bahasa yang sederhana
  • Sarankan tindakan spesifik yang dapat dilakukan pengguna untuk menyelesaikannya
  • Sediakan cara untuk mencoba ulang operasi yang gagal
  • Catat informasi kesalahan yang rinci untuk debugging (tidak ditampilkan kepada pengguna)
  • Sertakan kode kesalahan sebagai rujukan dukungan bila relevan

Keamanan

Secret Store API

Gunakan Secret Store API dari Stripe untuk seluruh penyimpanan data sensitif:

import { createHttpClient, STRIPE_API_KEY } from '@stripe/ui-extension-sdk/http_client';
// Good: Store secrets using the Secret Store API
const storeBrevoApiKey = async (apiKey: string) => {
const stripe = createHttpClient(STRIPE_API_KEY);
await stripe.apps.secrets.create({
name: 'brevo_api_key',
payload: apiKey,
scope: { type: 'account' },
});
};
// Good: Retrieve secrets from the Secret Store
const getBrevoApiKey = async () => {
const stripe = createHttpClient(STRIPE_API_KEY);
const secret = await stripe.apps.secrets.find({
name: 'brevo_api_key',
scope: { type: 'account' },
});
return secret.payload;
};

Jangan pernah menyimpan data sensitif di:

  • Local storage atau session storage
  • Cookie
  • Parameter URL
  • Nilai yang di-hardcode dalam kode sumber
  • File konfigurasi teks biasa

Kriptografi

  • Tanpa kriptografi buatan sendiri: Jangan menerapkan algoritma enkripsi Anda sendiri
  • Gunakan primitif keamanan bawaan Stripe (Secret Store, signing secret)
  • Gunakan HTTPS untuk semua panggilan API eksternal
  • Validasi semua tanda tangan Webhook sebelum diproses

Penanganan data

  • Minta hanya izin yang benar-benar dibutuhkan aplikasi Anda
  • Jangan menyimpan data Stripe di luar yang diperlukan untuk fungsionalitas
  • Terapkan kebijakan retensi data yang selaras dengan kebijakan privasi Anda
  • Sediakan mekanisme bagi pengguna untuk meminta penghapusan data

Kepatuhan hukum

Kebijakan privasi

Aplikasi Anda harus memiliki kebijakan privasi yang dapat diakses publik dan mencakup:

  • Data apa yang dikumpulkan aplikasi Anda dari Stripe
  • Bagaimana data disimpan, diproses, dan dibagikan
  • Kebijakan retensi dan penghapusan data
  • Hak pengguna atas data mereka
  • Informasi kontak untuk pertanyaan seputar privasi
  • Kepatuhan terhadap regulasi yang berlaku (GDPR, CCPA, dan lainnya)

Ketentuan layanan

  • Sediakan ketentuan layanan yang jelas untuk aplikasi Anda
  • Jangan menyertakan ketentuan yang bertentangan dengan Ketentuan Layanan Stripe
  • Nyatakan dengan jelas setiap batasan atau pembatasan penggunaan

Kepatuhan regulasi

  • Patuhi seluruh regulasi perlindungan data yang berlaku
  • Terapkan perjanjian pemrosesan data yang sesuai
  • Dukung permintaan portabilitas dan penghapusan data
  • Pelihara log audit untuk akses dan pemrosesan data

Linimasa proses tinjauan

TahapDurasi
Pengiriman awal5-10 hari kerja
Tinjauan revisi3-7 hari kerja
Persetujuan akhir1-2 hari kerja
PublikasiSegera setelah disetujui

Tip

Tangani seluruh masukan tinjauan dalam satu revisi agar tidak terjadi banyak siklus tinjauan. Tim Stripe memberikan masukan yang spesifik dan dapat ditindaklanjuti untuk setiap masalah yang ditemukan.

Alasan penolakan yang umum

  1. Penanganan kesalahan yang hilang, aplikasi mogok saat terjadi kesalahan jaringan atau data tak terduga
  2. Status pemuatan yang kurang, layar kosong saat pengambilan data
  3. Harga yang tidak jelas, harga tidak diungkapkan sepenuhnya di halaman marketplace
  4. Izin berlebihan, meminta izin yang tidak dibutuhkan aplikasi
  5. Mode sandbox rusak, aplikasi tidak berfungsi dalam mode uji
  6. Masalah keamanan, menyimpan secret di luar Secret Store API
  7. Kebijakan privasi tidak ada, tidak ada URL kebijakan privasi yang dapat diakses
  8. Fungsionalitas tidak lengkap, fitur “coming soon” atau konten placeholder

Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

deteksi otomatis
Asisten AI

Halo! Tanyakan apa saja tentang dokumentasi.