# Pembayaran kartu di Charges API Pelajari cara men-charge, menyimpan, dan mengautentikasi kartu dengan API terdahulu Stripe. > #### API terdahulu > > Isi bagian ini mengacu pada fitur *Terdahulu* (Technology that's no longer recommended). Gunakan [Payment Intents API](https://docs.stripe.com/payments/accept-a-payment.md) sebagai gantinya. > > Charges API tidak mendukung fitur berikut, banyak di antaranya diperlukan untuk kepatuhan kartu kredit: > > - Bisnis di India - [Permintaan bank untuk autentikasi kartu](https://docs.stripe.com/payments/cards/overview.md) - [Autentikasi Pelanggan yang Kuat](https://docs.stripe.com/strong-customer-authentication.md) [Charge](https://docs.stripe.com/api/charges.md) dan [Token](https://docs.stripe.com/api/tokens.md) API adalah API terdahulu yang digunakan dalam integrasi Stripe lama untuk menerima pembayaran kartu debit serta kredit. Gunakan [PaymentIntents](https://docs.stripe.com/payments/accept-a-payment.md) untuk integrasi baru. Charges API membatasi kemampuan Anda untuk memanfaatkan fitur-fitur Stripe. Untuk mendapatkan fitur terbaru, gunakan [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) atau [lakukan migrasi ke Payment Intents API](https://docs.stripe.com/payments/payment-intents/migration.md). ## Alur pembayaran Dalam kebanyakan kasus, PaymentIntents API menawarkan lebih banyak fleksibilitas dan opsi integrasi. | Charges API | Payment Intents API | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Kumpulkan informasi pembayaran pelanggan di browser dengan Elements. 1. Buat token dari informasi pembayaran dengan Stripe.js. 1. Lakukan permintaan untuk mengirim token ke server Anda. 1. Gunakan token untuk membuat charge di server Anda dengan jumlah dan mata uang yang diinginkan. 1. Penuhi pesanan pelanggan jika pembayaran berhasil. | 1. Buat PaymentIntent di server Anda dengan jumlah dan mata uang yang diinginkan. 1. Kirim client secret PaymentIntent ke sisi client. 1. Kumpulkan informasi pembayaran pelanggan di browser dengan Elements. 1. Gunakan Stripe.js atau SDK seluler untuk menangani [3D Secure](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) dan menyelesaikan pembayaran pada client. 1. Gunakan webhook untuk memenuhi pesanan pelanggan jika pembayaran berhasil. | ## Pengembalian dana Untuk mengembalikan dana pembayaran melalui API, buat [Pengembalian Dana](https://docs.stripe.com/api.md#create_refund) dan berikan identifikasi charge yang akan dikembalikan dananya. ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d charge={{CHARGE_ID}} ``` Untuk mengembalikan sebagian dana pembayaran, berikan parameter `amount`, berupa bilangan bulat dalam sen (atau satuan mata uang terkecil dari mata uang charge). ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d charge={{CHARGE_ID}} \ -d amount=1000 ``` ## Apple Pay Bila pelanggan Anda menerima pembayaran, aplikasi Anda akan menerima instance [PKPayment](https://developer.apple.com/documentation/passkit/pkpayment) berisi detail kartu terenkripsi mereka dengan mengimplementasikan berbagai metode [PKPaymentAuthorizationViewControllerDelegate](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationviewcontrollerdelegate). 1. Gunakan metode SDK [createTokenWithPayment](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPAPIClient.html#/c:@CM@StripePayments@StripeCore@objc\(cs\)STPAPIClient\(im\)createTokenWithPayment:completion:) untuk mengubah `PKPayment` menjadi `Token` Stripe 1. Gunakan `Token` ini untuk membuat tagihan. #### Swift ```swift extension CheckoutViewController: PKPaymentAuthorizationViewControllerDelegate { func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler: @escaping (PKPaymentAuthorizationResult) -> Void) { // Convert the PKPayment into a Token STPAPIClient.shared.createToken(withPayment: payment) { token, error in guard let token = token else { // Handle the error return } let tokenID = token.tokenId // Send the token identifier to your server to create a Charge... // If the server responds successfully, set self.paymentSucceeded to YES } } func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) { // Dismiss payment authorization view controller dismiss(animated: true, completion: { if (self.paymentSucceeded) { // Show a receipt page... } else { // Present error to customer... } }) } } ``` ## Keterangan rekening koran dinamis Secara default, [keterangan rekening koran](https://docs.stripe.com/get-started/account/set-up.md#public-business-information) akun Stripe Anda akan muncul di laporan mutasi pelanggan setiap kali Anda melakukan penagihan ke kartu mereka. Selain itu, Anda dapat mengatur keterangan rekening koran secara dinamis pada setiap permintaan penagihan menggunakan argumen `statement_descriptor` pada objek Charge. #### curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -d "amount"=999 \ -d "currency"="usd" \ -d "description"="Example charge" \ -d "source"="tok_visa" \ -d "statement_descriptor"="Custom descriptor" ``` Deskriptor pernyataan dibatasi hingga 22 karakter, tidak dapat menggunakan karakter khusus `<`, `>`, `'`, `"`, atau `*`, dan tidak boleh hanya terdiri dari angka. Saat mengatur keterangan rekening koran secara dinamis pada charge kartu kredit dan debit, bagian dinamis ditambahkan ke keterangan rekening koran penyelesaian merchant (dipisahkan oleh `*` dan spasi kosong). Misalnya, keterangan rekening koran untuk bisnis, bernama FreeCookies, yang menyertakan jenis kukis yang dibeli mungkin terlihat seperti `FREECOOKIES* SUGAR`. `*` dan spasi kosong dihitung terhadap batas 22 karakter dan Stripe secara otomatis mengalokasikan 10 karakter untuk keterangan rekening koran dinamis. Artinya, keterangan penyelesaian merchant mungkin terpotong jika lebih dari 10 karakter (dengan asumsi keterangan rekening koran dinamis juga lebih dari 10 karakter). Jika keterangan rekening koran dinamis juga lebih dari 10 karakter, kedua keterangan akan dipotong menjadi 10 karakter. Jika Anda mengalami masalah dengan batas karakter, Anda dapat mengatur [keterangan singkat](https://dashboard.stripe.com/settings/public) di Dashboard Stripe untuk mempersingkat keterangan penyelesaian merchant. Ini memungkinkan lebih banyak ruang untuk keterangan rekening koran dinamis. Keterangan singkat: - Mengganti keterangan rekening koran penyelesaian merchant saat menggunakan keterangan dinamis. - Bisa antara 2 dan 10 karakter. > Jika deskripsi pernyataan akun Anda lebih dari 10 karakter, setel [deskriptor singkat](https://dashboard.stripe.com/settings/public) di Dashboard atau gunakan `statement_descriptor_prefix`. Ini mencegah deskriptor pernyataan Anda terpotong dengan cara yang tidak terduga. Jika Anda tidak yakin seperti apa keterangan rekening koran itu ketika digabungkan, Anda dapat memeriksanya di [Dashboard Stripe](https://dashboard.stripe.com/settings/public). ## Menyimpan informasi dalam metadata Jika menggunakan [Payment Intents API](https://docs.stripe.com/payments/accept-a-payment.md), ambil serta perbarui saja bidang `metadata` dan `description` pada objek Payment Intent. Jika menggunakan objek Payment Intent maupun Charge, Anda tidak dijamin akan melihat nilai yang konsisten bagi bidang-bidang ini. Stripe mendukung penambahan [metadata](https://docs.stripe.com/api.md#metadata) ke permintaan paling umum yang Anda buat, seperti pemrosesan charge. Metadata tidak diperlihatkan kepada pelanggan atau diperhitungkan apakah charge ditolak atau diblokir oleh sistem pencegahan penipuan kami. Melalui metadata, Anda dapat mengaitkan informasi lain—yang berarti bagi Anda—dengan aktivitas Stripe. Metadata yang Anda sertakan dapat dilihat di Dashboard (misalnya, saat melihat halaman untuk masing-masing charge), juga tersedia dalam laporan umum dan ekspor. Misalnya, identifikasi pesanan toko Anda dapat dilampirkan pada charge yang digunakan untuk membayar pesanan itu. Dengan melakukan hal itu memungkinkan Anda, akuntan, atau tim keuangan Anda merekonsiliasikan charge dengan mudah di Stripe untuk pesanan di sistem. Jika Anda menggunakan Radar**, pertimbangkan untuk meneruskan informasi pelanggan tambahan dan informasi pesanan sebagai metadata. Dengan demikian, Anda dapat menulis [Aturan radar menggunakan atribut metadata](https://docs.stripe.com/radar/rules/reference.md#metadata-attributes) dan memiliki informasi lebih lanjut tentang pembayaran yang tersedia di dalam Dashboard yang dapat mempercepat proses peninjauan Anda. #### curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -d "amount"=999 \ -d "currency"="usd" \ -d "description"="Example charge" \ -d "source"="tok_visa" \ -d "metadata[order_id]"=6735 ``` > Jangan menyimpan informasi sensitif (informasi yang dapat mengenali pribadi, detail kartu, dan lain-lain) sebagai metadata atau dalam parameter `description` charge. ## Penolakan Jika ingin integrasi merespons kegagalan pembayaran secara otomatis, Anda dapat mengakses `outcome` charge dengan dua cara. - [Tangani kesalahan API](https://docs.stripe.com/api.md#error_handling) yang dikembalikan bila pembayaran gagal. Untuk pembayaran yang ditolak oleh penerbit kartu dan diblokir, kesalahannya menyertakan identifikasi charge, yang kemudian dapat Anda gunakan untuk [mengambil](https://docs.stripe.com/api.md#retrieve_charge) charge tersebut. - Gunakan [webhook](https://docs.stripe.com/webhooks.md) untuk memantau pembaruan status. Misalnya, kejadian `charge.failed` terpicu bila pembayaran tidak berhasil.