# Panduan migrasi harga Checkout Pelajari cara memperbarui integrasi Anda untuk menggunakan harga dengan Stripe Checkout. [Prices API](https://docs.stripe.com/api/prices.md) menambahkan fleksibilitas dan fitur baru pada cara Anda men-charge pelanggan. Integrasi baru ini menawarkan: - Pemodelan yang lebih terpadu untuk item Checkout—bukan paket, *SKU* (SKUs (Stock Keeping Units) represent a specific Product variation, taking into account any combination of attributes and cost (for instance, size, color, currency, cost)), dan item baris dalam baris, setiap item sekarang menjadi *harga*. - Kemampuan untuk menampilkan gambar produk untuk item rutin. - Buat katalog harga dan produk yang dapat digunakan kembali, bukan mata anggaran satu kali. - Buat skema biaya dalam baris untuk *langganan* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis). - Terapkan tarif pajak dinamis pada [langganan](https://docs.stripe.com/billing/taxes/collect-taxes.md?tax-calculation=tax-rates#adding-tax-rates-to-checkout) dan [pembayaran satu kali](https://docs.stripe.com/payments/checkout/taxes.md). Tidak ingin melakukan migrasi? Anda dapat terus menggunakan integrasi saat ini, tetapi fitur yang baru tidak didukung. Anda dapat menggunakan paket baru atau harga rutin yang Anda buat di parameter `plan` panggilan API yang ada. ## Gambaran umum produk dan harga *Harga* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) adalah entitas inti baru dalam Stripe yang berfungsi dengan langganan, *invoice* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice), dan Checkout. Setiap harga dikaitkan dengan satu *Produk* (Products represent what your business sells—whether that's a good or a service), dan setiap produk dapat memiliki beberapa harga. Barang fisik atau tingkat layanan yang berbeda harus diwakili oleh produk. Skema biaya produk itu harus diwakili oleh harga. Harga menentukan harga dasar, mata uang, dan—untuk produk rutin—siklus tagihan. Hal ini memungkinkan Anda mengubah dan menambahkan harga tanpa perlu mengubah detail dari yang Anda tawarkan. Misalnya, Anda mungkin memiliki satu produk “emas” yang memiliki harga 10 USD/bulan, 100 USD/tahun, 9 EUR/bulan, dan 90 EUR/tahun. Atau Anda mungkin memiliki kaus biru dengan harga 20 USD dan 15 EUR. ## Pembayaran satu kali Integrasi untuk pembayaran satu kali memiliki beberapa perubahan sebagai berikut: - Sebagai ganti item baris ad-hoc (yaitu, mengatur nama, jumlah, dan mata uang), pembuatan Sesi Checkout memerlukan pembuatan *produk* (Products represent what your business sells—whether that's a good or a service) dan, biasanya, *harga* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions). - [mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) sekarang diperlukan. Kode sisi client tetap sama. ### Tabel pemetaan Sebagai ganti penentuan setiap bidang pada `line_items`, Checkout menggunakan objek harga dan produk pokok untuk menentukan nama, keterangan, jumlah, mata uang, dan gambar. Anda dapat [membuat produk dan harga](https://docs.stripe.com/payments/accept-a-payment.md) dengan API atau Dashboard. | Tanpa harga | Dengan harga | | ------------------------ | ---------------------------------------------------------------------------------------------- | | `line_items.name` | `product.name` | | `line_items.description` | `product.description` | | `line_items.amount` | - `price.unit_amount` - `price_data.unit_amount` (jika ditentukan bila Sesi Checkout dibuat) | | `line_items.currency` | - `price.currency` - `price_data.currency` (jika ditentukan bila Sesi Checkout dibuat) | | `line_items.images` | `product.images` (menampilkan gambar pertama yang diberikan) | ### Kode sisi server untuk item dalam baris Sebelumnya, Anda hanya dapat membuat item satu kali dalam baris. Dengan harga, Anda dapat terus mengonfigurasi item dalam baris, tetapi juga dapat menentukan harga secara dinamis dengan [price_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data) ketika Anda membuat Sesi Checkout. Bila Anda membuat Sesi Checkout dengan `price_data`, referensikan identifikasi produk yang ada dengan [price_data.product](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product), atau tentukan detail produk Anda secara dinamis menggunakan [price_data.product_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product_data). Contoh berikut menunjukkan alur untuk membuat item satu kali. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "line_items[0][quantity]"=1 \-d "line_items[0][price_data][unit_amount]"=2000 \ -d "line_items[0][price_data][product_data][name]"=T-shirt \ -d "line_items[0][price_data][product_data][description]"="Comfortable cotton t-shirt" \ -d "line_items[0][price_data][product_data][images][]"="https://example.com/t-shirt.png" \ -d "line_items[0][price_data][currency]"=usd \ -d mode=payment \ -d success_url="https://example.com/success" \ ``` ### Kode sisi server untuk harga satu kali Dengan integrasi baru ini, Anda dapat [membuat katalog produk dan harga](https://docs.stripe.com/payments/accept-a-payment.md) di awal bukannya perlu menentukan jumlah, mata uang, dan nama setiap kali Anda membuat Sesi Checkout. Anda dapat membuat produk dan harga dengan [Harga API](https://docs.stripe.com/api/prices.md) atau melalui [Dashboard](https://dashboard.stripe.com/products). Anda memerlukan ID harga untuk membuat Sesi Checkout. Contoh berikut menunjukkan cara membuat produk dan harga melalui API: #### curl ```bash curl https://api.stripe.com/v1/products \ -u<>: \ -d name=T-shirt \ -d description="Comfortable cotton t-shirt" \ -d "images[]"="https://example.com/t-shirt.png" curl https://api.stripe.com/v1/prices \ -u<>: \ -d product="{{PRODUCT_ID}}" \ -d unit_amount=2000 \ -d currency=usd curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "line_items[0][quantity]"=1 \-d "line_items[0][price]"="{{PRICE_ID}}" \ -d mode=payment \ -d success_url="https://example.com/success" \ ``` ## Subscriptions Integrasi untuk pembayaran rutin memiliki beberapa perubahan sebagai berikut: - Semua item diteruskan ke satu bidang [line_items](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items), bukan `subscription_data.items`. - [mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) sekarang diperlukan. Atur `mode=subscription` jika sesi menyertakan item rutin. Kode sisi client tetap sama. Paket yang ada dapat digunakan di mana pun harga rutin disetujui. ### Kode sisi server dengan paket Berikut adalah contoh sebelum dan sesudah membuat Sesi Pembayaran dengan uji coba dan menggunakan paket yang ada, yang dapat digunakan secara bergantian dengan harga. Paket sekarang diteruskan ke `line_items` bukan `subscription_data.items`. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \-d "line_items[0][price]"="{{PRICE_OR_PLAN_ID}}" \ -d "line_items[0][quantity]"=1 \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` ### Kode sisi server untuk harga rutin dengan biaya penyiapan Jika Anda memiliki paket rutin dengan biaya penyiapan satu kali, buat produk dan harga yang mewakili biaya satu kali tersebut sebelum membuat Sesi Checkout. Lihat [tabel pemetaan](https://docs.stripe.com/payments/checkout/migrating-prices.md#mapping-table-server-one-time) untuk mengetahui cara bidang `line_items` yang lama memetakan ke integrasi baru. Anda dapat membuat produk dan harga melalui [Prices API](https://docs.stripe.com/api/prices.md) atau melalui [Dashboard Stripe](https://dashboard.stripe.com/products). Anda juga dapat [membuat item satu kali dalam baris](https://docs.stripe.com/payments/checkout/migrating-prices.md#server-side-code-for-inline-items). Contoh berikut menggunakan identifikasi harga yang ada: #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \-d "line_items[0][price]"="{{PRICE_OR_PLAN_ID}}" \ -d "line_items[0][quantity]"=1 \ -d "line_items[1][price]"="{{ONE_TIME_PRICE_ID}}" \ -d "line_items[1][quantity]"=1 \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` ## Perubahan objek respons Daripada mencantumkan item dengan `display_items`, objek Checkout Session menggunakan `line_items`. Kolom `line_items` tidak ditampilkan secara default seperti `display_items`, tetapi Anda dapat menyertakannya dengan menggunakan [expand](https://docs.stripe.com/api/expanding_objects.md) ketika membuat sebuah Checkout Session: #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="card" \ -d "mode"="payment" \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d "success_url"="https://example.com/success" \ -d "expand[]"="line_items" ``` ## Perubahan webhook Karena `line_items` dapat termasuk, respons *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) `checkout.session.completed` tidak lagi mencantumkan item secara default. Objek respons yang lebih kecil memungkinkan Anda menerima webhook Checkout lebih cepat. Anda dapat mengambil item dengan endpoint `line_items` yang baru: #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items \ -u <>: ``` Untuk detail selengkapnya, lihat [pemenuhan pesanan dengan Checkout](https://docs.stripe.com/checkout/fulfillment.md).