# Apple Pay Izinkan pelanggan melakukan pembayaran dengan aman menggunakan Apple Pay di iPhone, iPad, atau Apple Watch mereka. Lihat [dokumentasi kompatibilitas](https://support.apple.com/en-us/HT208531) Apple untuk mempelajari perangkat mana saja yang mendukung Apple Pay. Apple Pay kompatibel dengan sebagian besar Stripe produk dan fitur. Pengguna Stripe dapat menerima [Apple Pay](https://stripe.com/apple-pay) di aplikasi iOS dalam versi iOS 9 ke atas, serta pada web di Safari mulai dari iOS 10 atau macOS Sierra. Tidak ada biaya tambahan untuk memproses pembayaran Apple Pay, dan [skema biaya](https://stripe.com/pricing/local-payment-methods#apple-pay) sama dengan transaksi kartu lainnya. Apple Pay tersedia untuk pemegang kartu pada bank peserta di negara yang didukung. Untuk informasi selengkapnya, lihat dokumentasi [bank peserta](https://support.apple.com/en-us/ht204916) dari Apple. #### Properti metode pembayaran - **Lokasi pelanggan** Di seluruh dunia, kecuali India - **Mata uang transaksi** Lihat [mata uang transaksi yang didukung](https://docs.stripe.com/currencies.md#presentment-currencies) - **Konfirmasi pembayaran** Diprakarsai pelanggan - **Kelompok metode pembayaran** Dompet digital - **Pembayaran rutin** [Ya.](https://docs.stripe.com/apple-pay.md#recurring-payments) - **Pengaturan waktu payout** Berlaku pengaturan waktu payout standar - **Dukungan Connect** Ya - **Dukungan sengketa** [Ya](https://docs.stripe.com/apple-pay/disputes-refunds.md#disputed-payments) - **Dukungan penarikan manual** Ya - **Pengembalian dana/Pengembalian dana sebagian** [Ya / Ya](https://docs.stripe.com/apple-pay/disputes-refunds.md#refunds) #### Lokasi bisnis Akun Stripe di seluruh dunia, kecuali India, dapat menerima pembayaran Apple Pay dengan penyelesaian mata uang lokal. #### Dukungan produk - Connect - Checkout1 - Payment Links - Elements - Subscriptions - Invoicing 1Saat [ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) Checkout adalah `embedded_page`, fitur ini hanya mendukung Safari dan iOS versi 17 atau yang lebih baru. ## Alur pembayaran Berikut adalah demonstrasi alur pembayaran Apple Pay dari halaman checkout Anda: ![Animasi alur pembayaran Apple Pay menunjukkan halaman checkout Stripe, tombol Apple Pay, dan dialog konfirmasi saat melakukan percobaan.](https://b.stripecdn.com/docs-statics-srv/assets/apple-pay.3447ce2deeaab40d6d231eed4dc34644.gif) ## Kelayakan pembelian dalam aplikasi untuk Apple Pay Panduan ini menjelaskan cara mengonfigurasi aplikasi Anda untuk menerima Apple Pay secara langsung untuk barang fisik, layanan, dan item yang memenuhi syarat lainnya. Stripe memproses pembayaran ini, dan Anda hanya membayar [biaya pemrosesan](https://stripe.com/pricing) Stripe. Untuk produk digital, konten, dan langganan yang dijual di Amerika Serikat atau Wilayah Ekonomi Eropa (EEA), aplikasi Anda dapat menerima Apple Pay dengan mengalihkan ke halaman pembayaran eksternal. Anda dapat menggunakan UI pembayaran berikut: - [Stripe Checkout](https://docs.stripe.com/mobile/digital-goods/checkout.md) - [Web Elements](https://docs.stripe.com/mobile/digital-goods/custom-checkout.md) - [Payment Links](https://docs.stripe.com/mobile/digital-goods/payment-links.md) (lebih baik untuk jumlah terbatas produk dan harga) Di wilayah lain, aplikasi Anda tidak dapat menerima Apple Pay untuk produk digital, konten, atau langganan. ## Terima Apple Pay Stripe menawarkan berbagai metode untuk menambahkan Apply Pay sebagai metode pembayaran. Untuk detail integrasi, pilih metode yang Anda sukai: # Native iOS > This is a Native iOS for when platform is ios. View the full page at https://docs.stripe.com/apple-pay?platform=ios. > Jika Anda menggunakan [UI siap-rakit](https://docs.stripe.com/payments/mobile.md) Stripe, ikuti langkah-langkah dalam [panduan ini](https://docs.stripe.com/payments/mobile/accept-payment.md?platform=ios&type=payment#apple-pay). Dengan [Stripe iOS SDK](https://github.com/stripe/stripe-ios), Anda dapat menerima pembayaran Apple Pay maupun kartu kredit yang umum. Sebelum memulai, Anda perlu terdaftar dalam [Apple Developer Program](https://developer.apple.com/programs/). Berikutnya, ikuti langkah-langkah ini: 1. [Siapkan Stripe](https://docs.stripe.com/apple-pay.md#setup) 1. [Daftar Apple Merchant ID](https://docs.stripe.com/apple-pay.md#merchantid) 1. [Buat sertifikat Apple Pay yang baru](https://docs.stripe.com/apple-pay.md#csr) 1. [Integrasikan dengan Xcode](https://docs.stripe.com/apple-pay.md#xcode-pay) 1. [Periksa apakah Apple Pay didukung](https://docs.stripe.com/apple-pay.md#check-if-apple-pay-supported) 1. [Buat permintaan pembayaran](https://docs.stripe.com/apple-pay.md#create-payment-request) 1. [Tampilkan lembar pembayaran](https://docs.stripe.com/apple-pay.md#present-payment-sheet) 1. [Serahkan pembayaran ke Stripe](https://docs.stripe.com/apple-pay.md#handle-payment) ## Siapkan Stripe [Sisi server] [Sisi klien] Pertama, Anda membutuhkan akun Stripe. [Daftar sekarang](https://dashboard.stripe.com/register). ### Sisi server Integrasi ini memerlukan endpoint di server Anda yang berinteraksi dengan Stripe API. Gunakan pustaka resmi untuk akses ke Stripe API dari server Anda: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Sisi client [Stripe iOS SDK](https://github.com/stripe/stripe-ios) adalah sumber terbuka, yang [didokumentasikan lengkap](https://stripe.dev/stripe-ios/index.html), dan kompatibel dengan aplikasi yang mendukung iOS 13 ke atas. #### Swift Package Manager Untuk menginstal SDK, ikuti langkah-langkah ini: 1. Di Xcode, pilih **File** > **Tambahkan Dependensi Paket…** dan masukkan `https://github.com/stripe/stripe-ios-spm` sebagai URL repositori. 1. Pilih nomor versi terbaru dari [halaman rilis](https://github.com/stripe/stripe-ios/releases) kami. 1. Tambahkan produk **StripeApplePay** ke [target aplikasi Anda](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). #### CocoaPods 1. Jika Anda belum melakukannya, instal versi terbaru [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Jika Anda tidak memiliki [Podfile](https://guides.cocoapods.org/syntax/podfile.html), jalankan perintah berikut untuk membuatnya: ```bash pod init ``` 1. Tambahkan baris ini ke `Podfile` Anda: ```podfile pod 'StripeApplePay' ``` 1. Jalankan perintah berikut: ```bash pod install ``` 1. Jangan lupa menggunakan file `.xcworkspace` untuk membuka proyek Anda di Xcode, sebagai ganti file `.xcodeproj`, mulai sekarang. 1. Di masa mendatang, untuk memperbarui ke versi terbaru SDK, jalankan: ```bash pod update StripeApplePay ``` #### Carthage 1. Jika Anda belum melakukannya, instal versi terbaru [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Tambahkan baris ini ke `Cartfile` Anda: ```cartfile github "stripe/stripe-ios" ``` 1. Ikuti [instruksi instalasi Carthage](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Pastikan untuk menyematkan semua framework yang diwajibkan yang tercantum [di sini](https://github.com/stripe/stripe-ios/tree/master/StripeApplePay/README.md#manual-linking). 1. Di masa mendatang, untuk memperbarui ke versi terbaru SDK, jalankan perintah berikut: ```bash carthage update stripe-ios --platform ios ``` #### Kerangka Kerja Manual 1. Masuklah ke [halaman rilis GitHub](https://github.com/stripe/stripe-ios/releases/latest) kami lalu unduh dan unzip **Stripe.xcframework.zip**. 1. Seret **StripeApplePay.xcframework** ke bagian **Embedded Binaries** pengaturan **General** di proyek Xcode Anda. Pastikan memilih **Copy items if needed**. 1. Ulangi langkah 2 untuk semua framework yang diwajibkan yang tercantum [di sini](https://github.com/stripe/stripe-ios/tree/master/StripeApplePay/README.md#manual-linking). 1. Di masa mendatang, untuk memperbarui ke versi terbaru SDK kami, ulangi langkah 1–3. > Untuk detail mengenai rilis SDK terbaru dan versi sebelumnya, lihat halaman [Rilis](https://github.com/stripe/stripe-ios/releases) di GitHub. Untuk menerima notifikasi bila rilis baru diterbitkan, [lihat rilis](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) untuk repositori. Konfigurasikan SDK dengan [kunci yang dapat dipublikasikan](https://dashboard.stripe.com/test/apikeys) saat aplikasi dimulai. Hal ini memungkinkan aplikasi Anda membuat permintaan ke Stripe API. #### Swift ```swift import UIKitimportStripeApplePay @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<>" // do any other necessary launch configuration return true } } ``` > Gunakan [kunci percobaan](https://docs.stripe.com/keys.md#obtain-api-keys) Anda saat mencoba serta mengembangkan, dan kunci [mode live](https://docs.stripe.com/keys.md#test-live-modes) bila Anda memublikasikan aplikasi. ## Mendaftar Apple Merchant ID Dapatkan Apple Merchant ID dengan [mendaftar identifier baru](https://developer.apple.com/account/resources/identifiers/add/merchant) di situs web Apple Developer. Isi formulir dengan keterangan dan identifier. Keterangan adalah untuk catatan Anda sendiri dan nanti dapat diubah. Stripe merekomendasikan penggunaan nama aplikasi Anda sebagai identifier (misalnya, `merchant.com.{{YOUR_APP_NAME}}`). ## Buat sertifikat Apple Pay yang baru Buat sertifikat untuk aplikasi Anda guna mengenkripsi data pembayaran. Buka [Pengaturan Sertifikat iOS](https://dashboard.stripe.com/settings/ios_certificates) di Dashboard, klik **Tambahkan aplikasi baru**, dan ikuti panduannya. Unduh file Permintaan Penandatanganan Sertifikat (CSR) untuk mendapatkan sertifikat aman dari Apple yang memungkinkan Anda menggunakan Apple Pay. Satu file CSR harus digunakan untuk menerbitkan tepat satu sertifikat. Jika Anda mengganti Apple Merchant ID, Anda harus membuka [Pengaturan Sertifikat iOS](https://dashboard.stripe.com/settings/ios_certificates) di Dashboard untuk mendapatkan CSR dan sertifikat baru. ## Integrasikan dengan Xcode Tambahkan kemampuan Apple Pay ke aplikasi Anda. Di Xcode, buka pengaturan proyek, klik tab **Signing & Capabilities**, dan tambahkan kemampuan **Apple Pay**. Pada saat ini Anda mungkin diminta untuk masuk ke akun pengembang. Pilih identifikasi merchant yang Anda buat sebelumnya, dan aplikasi Anda siap menyetujui Apple Pay. ![](https://b.stripecdn.com/docs-statics-srv/assets/xcode.a701d4c1922d19985e9c614a6f105bf1.png) Aktifkan kemampuan Apple Pay di Xcode ## Periksa apakah Apple Pay didukung Sebelum menampilkan Apple Pay sebagai opsi pembayaran di aplikasi Anda, tentukan apakah perangkat pengguna mendukung Apple Pay dan memiliki kartu yang ditambahkan ke dompetnya: #### Swift ```swift import StripeApplePay import PassKit class CheckoutViewController: UIViewController, ApplePayContextDelegate { let applePayButton: PKPaymentButton = PKPaymentButton(paymentButtonType: .plain, paymentButtonStyle: .black) override func viewDidLoad() { super.viewDidLoad() // Only offer Apple Pay if the customer can pay with it applePayButton.isHidden = !StripeAPI.deviceSupportsApplePay() applePayButton.addTarget(self, action: #selector(handleApplePayButtonTapped), for: .touchUpInside) } // ...continued in next step } ``` ## Buat permintaan pembayaran Saat pengguna mengetuk tombol **Apple Pay**, panggil [StripeAPI paymentRequestWithMerchantIdentifier:country:currency:](https://stripe.dev/stripe-ios/stripe-payments/Classes/StripeAPI.html#/c:@M@StripeCore@objc\(cs\)StripeAPI\(cm\)paymentRequestWithMerchantIdentifier:country:currency:) untuk membuat [PKPaymentRequest](https://developer.apple.com/documentation/passkit/pkpaymentrequest). Kemudian, konfigurasikan `PKPaymentRequest` untuk menampilkan nama bisnis Anda dan totalnya. Anda juga dapat mengumpulkan informasi seperti detail tagihan atau informasi pengiriman. Lihat [dokumentasi Apple](https://developer.apple.com/design/human-interface-guidelines/apple-pay/overview/checkout-and-payment/#customize-the-payment-sheet) untuk panduan lengkap tentang cara menyesuaikan permintaan pembayaran. #### Swift ```swift func handleApplePayButtonTapped() { let merchantIdentifier = "merchant.com.your_app_name" let paymentRequest = StripeAPI.paymentRequest(withMerchantIdentifier: merchantIdentifier, country: "US", currency: "USD") // Configure the line items on the payment request paymentRequest.paymentSummaryItems = [ // The final line should represent your company; // it'll be prepended with the word "Pay" (that is, "Pay iHats, Inc $50") PKPaymentSummaryItem(label: "iHats, Inc", amount: 50.00), ] // ...continued in next step } ``` ## Tampilkan lembar pembayaran Buat instance [STPApplePayContext](https://stripe.dev/stripe-ios/stripe-applepay/Classes/STPApplePayContext.html) dengan `PKPaymentRequest` dan gunakan untuk menyajikan lembar Apple Pay: #### Swift ```swift func handleApplePayButtonTapped() { // ...continued from previous step // Initialize an STPApplePayContext instance if let applePayContext = STPApplePayContext(paymentRequest: paymentRequest, delegate: self) { // Present Apple Pay payment sheet applePayContext.presentApplePay(on: self) } else { // There is a problem with your Apple Pay configuration } } ``` Apple mengharuskan isyarat pengguna untuk memicu modal Apple Pay (misalnya, mengklik tombol atau berinteraksi dengan formulir). Pastikan kode Anda mematuhi hal berikut: - Aktifkan lembar pembayaran secara langsung dengan kejadian aktivasi pengguna. - Tambahkan kode untuk lembar pembayaran pada atau di dekat bagian atas handler kejadian isyarat pengguna Anda, sebelum kode asinkron atau yang berjalan lama. - Tetapkan batas waktu yang wajar untuk memanggil `confirmPayment` setelah isyarat pengguna. ## Serahkan pembayaran ke Stripe ### Sisi server Buat endpoint yang menciptakan PaymentIntent dengan [jumlah](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) dan [mata uang](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-currency). Selalu putuskan berapa banyak yang akan di-charge pada sisi server, lingkungan tepercaya, bukan ke sisi client. Hal ini mencegah pelanggan jahat memilih harga mereka sendiri. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d "amount"=1099 \ -d "currency"="usd" ``` ### Sisi klien #### Payment Intents API Terapkan `applePayContext(_:didCreatePaymentMethod:paymentInformation:)` untuk mengembalikan client secret PaymentIntent yang diambil dari endpoint di atas, atau menampilkan kesalahan jika permintaan gagal. Setelah Anda mengembalikan client secret, `STPApplePayContext` menyelesaikan pembayaran, menutup lembar Apple Pay, dan memanggil `applePayContext(_:didCompleteWithStatus:error:)` dengan status pembayaran, terapkan metode ini bersama pembayaran untuk menunjukkan resi kepada pelanggan Anda. #### Swift ```swift extension CheckoutViewController { func applePayContext(_ context: STPApplePayContext, didCreatePaymentMethod paymentMethod: StripeAPI.PaymentMethod, paymentInformation: PKPayment) async throws -> String { let clientSecret = try await ... // Retrieve the PaymentIntent client secret from your backend (see Server-side step above) // Return the client secret or throw an error return clientSecret } func applePayContext(_ context: STPApplePayContext, didCompleteWith status: STPApplePayContext.PaymentStatus, error: Error?) { switch status { case .success: // Payment succeeded, show a receipt view break case .error: // Payment failed, show the error break case .userCancellation: // User canceled the payment break @unknown default: fatalError() } } } ``` Terakhir, [tangani kejadian pascapembayaran](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios#ios-post-payment) untuk melakukan hal-hal seperti mengirim email konfirmasi pesanan kepada pelanggan Anda, masukkan penjualan di database, atau memulai alur kerja pengiriman. #### Payment Intents API (Konfirmasi sisi server) Terapkan `applePayContext(_:didCreatePaymentMethod:paymentInformation:)` untuk mengirim `paymentMethod.id` ke server serta membuat dan mengonfirmasi PaymentIntent. Kembalikan client secret PaymentIntent yang dikembalikan dari server Anda, atau tampilkan kesalahan jika permintaan gagal. Setelah Anda mengembalikan client secret, `STPApplePayContext` menyelesaikan pembayaran, menutup lembar Apple Pay, dan memanggil `applePayContext(_:didCompleteWithStatus:error:)` dengan status pembayaran, terapkan metode ini bersama pembayaran untuk menunjukkan resi kepada pelanggan Anda. #### Swift ```swift extension CheckoutViewController { func applePayContext(_ context: STPApplePayContext, didCreatePaymentMethod paymentMethod: StripeAPI.PaymentMethod, paymentInformation: PKPayment) async throws -> String { let clientSecret = try await ... // Call your backend to create and confirm a PaymentIntent and get its client secret // Return the client secret or throw an error return clientSecret } func applePayContext(_ context: STPApplePayContext, didCompleteWith status: STPApplePayContext.PaymentStatus, error: Error?) { switch status { case .success: // Payment succeeded, show a receipt view break case .error: // Payment failed, show the error break case .userCancellation: // User canceled the payment break @unknown default: fatalError() } } } ``` ### Pemecahan Masalah Jika Anda melihat kesalahan dari Stripe API saat mencoba membuat token, kemungkinan besar Anda mengalami masalah dengan Apple Pay Certificate. Anda harus membuat sertifikat baru dan mengunggahnya ke Stripe, seperti yang dijelaskan di halaman ini. Pastikan Anda menggunakan CSR yang diperoleh dari Dashboard dan bukan yang Anda buat sendiri. Xcode sering salah menyimpan sertifikat lama dalam cache, jadi selain membuat sertifikat baru, Stripe juga merekomendasikan untuk membuat Apple Merchant ID baru. Jika Anda menerima kesalahan: > Anda belum menambahkan akun merchant Apple ke Stripe kemungkinan aplikasi Anda mengirimkan data yang dienkripsi dengan CSR/Sertifikat (non-Stripe) sebelumnya. Pastikan semua sertifikat yang dihasilkan oleh CSR non-Stripe dicabut dengan Apple Merchant ID Anda. Jika hal ini tidak memecahkan masalah, hapus identifikasi merchant di akun Apple Anda dan buat kembali. Kemudian, buat sertifikat baru berdasarkan CSR (disediakan Stripe) yang sama dengan yang digunakan sebelumnya. Anda tidak perlu mengunggah sertifikat baru ini ke Stripe. Setelah selesai, nonaktifkan dan aktifkan Apple Pay Credentials di aplikasi Anda untuk memastikannya dimuat kembali dengan benar. ## App Clips Modul `StripeApplePay` adalah SDK Stripe ringan yang dioptimalkan untuk penggunaan di [App Clip](https://developer.apple.com/app-clips/). Ikuti [langkah di atas](https://docs.stripe.com/apple-pay.md?platform=ios#accept) untuk menambahkan modul `StripeApplePay` ke target App Clip Anda. > Modul `StripeApplePay` hanya didukung di Swift. Pengguna Objective-C harus mengimpor `STPApplePayContext` dari modul `Stripe`. ### Bermigrasi dari STPApplePayContext Jika Anda adalah pengguna `STPApplePayContext` dan ingin beralih ke SDK Apple Pay ringan, ikuti langkah-langkah berikut: 1. Di dependensi target App Clip Anda, ganti modul `Stripe` dengan modul `StripeApplePay`. 1. Di kode Anda, ganti `import Stripe` dengan `import StripeApplePay`. 1. Ganti penggunaan `STPApplePayContextDelegate` Anda dengan protokol `ApplePayContextDelegate` baru. 1. Ubah penerapan `applePayContext(_:didCreatePaymentMethod:)` Anda untuk menyetujui `StripeAPI.PaymentMethod`. 1. Ubah penerapan `applePayContext(_:didCompleteWith:error:)` Anda untuk menerima `STPApplePayContext.PaymentStatus`. ### Before ```swift func applePayContext(_ context: STPApplePayContext, paymentInformation: PKPayment, // ... } func applePayContext(_ context: STPApplePayContext, error: Error?) { // ... } } ``` ### After ```swift import StripeApplePay class CheckoutViewController: UIViewController, ApplePayContextDelegate { func applePayContext(_ context: STPApplePayContext,didCreatePaymentMethod paymentMethod: StripeAPI.PaymentMethod, paymentInformation: PKPayment // ...} async throws -> String { func applePayContext(_ context: STPApplePayContext,didCompleteWith status: STPApplePayContext.PaymentStatus, error: Error?) { // ... } } ``` ## Pembayaran rutin Di iOS 16 atau lebih baru, Anda dapat mengadopsi [token merchant](https://developer.apple.com/apple-pay/merchant-tokens/) dengan menyetel properti `recurringPaymentRequest` atau `automaticReloadPaymentRequest` di `PKPaymentRequest`. Pembayaran rutin dapat menggunakan metode pembayaran yang disimpan untuk [transaksi di luar sesi](https://docs.stripe.com/apple-pay/apple-pay-recurring.md#set-up-off-session-payments) saja. #### Swift ```swift extension CheckoutViewController { func handleApplePayButtonTapped() { let request = StripeAPI.paymentRequest(withMerchantIdentifier: merchantIdentifier, country: "US", currency: "USD") let billing = PKRecurringPaymentSummaryItem(label: "My Subscription", amount: NSDecimalNumber(string: "59.99")) billing.startDate = Date() billing.endDate = Date().addingTimeInterval(60 * 60 * 24 * 365) billing.intervalUnit = .month request.recurringPaymentRequest = PKRecurringPaymentRequest(paymentDescription: "Recurring", regularBilling: billing, managementURL: URL(string: "https://my-backend.example.com/customer-portal")!) request.recurringPaymentRequest?.billingAgreement = "You'll be billed $59.99 every month for the next 12 months. To cancel at any time, go to Account and click 'Cancel Membership.'" request.paymentSummaryItems = [billing] } } ``` Untuk mempelajari lebih lanjut cara menggunakan pembayaran rutin dengan Apple Pay, lihat [dokumentasi Apple PassKit](https://developer.apple.com/documentation/passkit/pkpaymentrequest). ## Pelacakan pesanan Untuk memakai [pelacakan pesanan](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) di iOS 16 atau yang lebih baru, implementasikan fungsi [applePayContext(context:willCompleteWithResult:handler:)](https://github.com/stripe/stripe-ios/blob/22.8.0/StripeApplePay/StripeApplePay/Source/ApplePayContext/STPApplePayContext.swift#L38) di `ApplePayContextDelegate` Anda. Stripe memanggil implementasi Anda setelah pembayaran selesai, tetapi sebelum iOS menutup lembar Apple Pay. Dalam implementasi Anda: 1. Ambil detail pesanan dari server Anda untuk pesanan yang sudah selesai. 1. Tambahkan detail ini ke [PKPaymentAuthorizationResult](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationresult) yang diberikan. 1. Panggil penangan penyelesaian yang disediakan di antrean utama. Untuk mempelajari pelacakan pesanan lebih lanjut, lihat [dokumentasi Apple’s Wallet Orders](https://developer.apple.com/documentation/walletorders). #### Swift ```swift extension CheckoutViewController { func applePayContext(_ context: STPApplePayContext, willCompleteWithResult authorizationResult: PKPaymentAuthorizationResult) async -> PKPaymentAuthorizationResult { // Fetch the order details from your service do { let myOrderDetails = try await MyAPIClient.shared.fetchOrderDetails(orderID: myOrderID) authorizationResult.orderDetails = PKPaymentOrderDetails( orderTypeIdentifier: myOrderDetails.orderTypeIdentifier, // "com.myapp.order" orderIdentifier: myOrderDetails.orderIdentifier, // "ABC123-AAAA-1111" webServiceURL: myOrderDetails.webServiceURL, // "https://my-backend.example.com/apple-order-tracking-backend" authenticationToken: myOrderDetails.authenticationToken // "abc123" ) // Return your modified PKPaymentAuthorizationResult return authorizationResult } catch { return PKPaymentAuthorizationResult(status: .failure, errors: [error]) } } } ``` # React Native iOS > This is a React Native iOS for when platform is react-native. View the full page at https://docs.stripe.com/apple-pay?platform=react-native. Anda dapat menggunakan [React Native SDK](https://github.com/stripe/stripe-react-native) Stripe, untuk menerima pembayaran kartu kredit tradisional dan Apple Pay. Sebelum memulai, Anda harus mendaftar di [Apple Developer Program](https://developer.apple.com/programs/) dan [menyiapkan Stripe di server dan di aplikasi Anda](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=react-native#react-native-setup). Berikutnya, ikuti langkah-langkah ini: 1. [Daftar Apple Merchant ID](https://docs.stripe.com/apple-pay.md#merchantid) 1. [Buat sertifikat Apple Pay yang baru](https://docs.stripe.com/apple-pay.md#csr) 1. [Integrasikan dengan Xcode](https://docs.stripe.com/apple-pay.md#xcode-pay) 1. [Atur Apple Merchant ID Anda di StripeProvider](https://docs.stripe.com/apple-pay.md#set-merchantid) 1. [Periksa apakah Apple Pay didukung](https://docs.stripe.com/apple-pay.md#check-if-apple-pay-supported) 1. [Tampilkan lembar pembayaran](https://docs.stripe.com/apple-pay.md#present-payment-sheet) 1. [Serahkan pembayaran ke Stripe](https://docs.stripe.com/apple-pay.md#handle-payment) > Jika Anda menggunakan React Native dan Expo, Expo Go tidak mendukung Apple Pay. Untuk menggunakan Apple Pay dengan Expo, Anda harus membuat [build pengembangan](https://docs.expo.dev/get-started/set-up-your-environment/?mode=development-build&platform=ios). Jika Anda sudah memiliki proyek Expo Go, Anda dapat [memigrasikannya ke build pengembangan](https://docs.expo.dev/develop/development-builds/expo-go-to-dev-build/). ## Mendaftar Apple Merchant ID Dapatkan Apple Merchant ID dengan [mendaftar identifier baru](https://developer.apple.com/account/resources/identifiers/add/merchant) di situs web Apple Developer. Isi formulir dengan keterangan dan identifier. Keterangan adalah untuk catatan Anda sendiri dan nanti dapat diubah. Stripe merekomendasikan penggunaan nama aplikasi Anda sebagai identifier (misalnya, `merchant.com.{{YOUR_APP_NAME}}`). ## Buat sertifikat Apple Pay yang baru Buat sertifikat untuk aplikasi Anda guna mengenkripsi data pembayaran. Buka [Pengaturan Sertifikat iOS](https://dashboard.stripe.com/settings/ios_certificates) di Dashboard, klik **Tambahkan aplikasi baru**, dan ikuti panduannya. Unduh file Permintaan Penandatanganan Sertifikat (CSR) untuk mendapatkan sertifikat aman dari Apple yang memungkinkan Anda menggunakan Apple Pay. Satu file CSR harus digunakan untuk menerbitkan tepat satu sertifikat. Jika Anda mengganti Apple Merchant ID, Anda harus membuka [Pengaturan Sertifikat iOS](https://dashboard.stripe.com/settings/ios_certificates) di Dashboard untuk mendapatkan CSR dan sertifikat baru. ## Integrasikan dengan Xcode Tambahkan kemampuan Apple Pay ke aplikasi Anda. Di Xcode, buka pengaturan proyek, klik tab **Signing & Capabilities**, dan tambahkan kemampuan **Apple Pay**. Pada saat ini Anda mungkin diminta untuk masuk ke akun pengembang. Pilih identifikasi merchant yang Anda buat sebelumnya, dan aplikasi Anda siap menyetujui Apple Pay. ![](https://b.stripecdn.com/docs-statics-srv/assets/xcode.a701d4c1922d19985e9c614a6f105bf1.png) Aktifkan kemampuan Apple Pay di Xcode ## Atur Apple Merchant ID Anda di StripeProvider Di komponen `StripeProvider`, tentukan Apple Merchant ID yang berhasil Anda daftarkan: ```jsx import { StripeProvider } from '@stripe/stripe-react-native'; function App() { return ( {/* Your app code here */} ); } ``` ## Periksa apakah Apple Pay didukung Sebelum menampilkan Apple Pay sebagai opsi pembayaran di aplikasi Anda, tentukan apakah perangkat pengguna mendukung Apple Pay dan memiliki kartu yang ditambahkan ke dompetnya: ```jsx import { PlatformPayButton, isPlatformPaySupported } from '@stripe/stripe-react-native'; function PaymentScreen() { const [isApplePaySupported, setIsApplePaySupported] = useState(false); useEffect(() => { (async function () { setIsApplePaySupported(await isPlatformPaySupported()); })(); }, [isPlatformPaySupported]); // ... const pay = async () => { // ... }; // ... return ( {isApplePaySupported && ( )} ); } ``` ## Buat Tujuan Pembayaran ### Sisi server Buat endpoint yang menciptakan PaymentIntent dengan [jumlah](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) dan [mata uang](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-currency). Selalu putuskan berapa banyak yang akan di-charge pada sisi server, lingkungan tepercaya, bukan ke sisi client. Hal ini mencegah pelanggan jahat memilih harga mereka sendiri. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d "amount"=1099 \ -d "currency"="usd" ``` ### Sisi klien Buat metode yang meminta PaymentIntent dari server Anda: ```jsx function PaymentScreen() { // ... const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ some: 'value', }), }); const { clientSecret } = await response.json(); return clientSecret; }; // ... } ``` ### Pemecahan Masalah Jika Anda melihat kesalahan dari Stripe API saat mencoba membuat token, kemungkinan besar Anda mengalami masalah dengan Apple Pay Certificate. Anda harus membuat sertifikat baru dan mengunggahnya ke Stripe, seperti yang dijelaskan di halaman ini. Pastikan Anda menggunakan CSR yang diperoleh dari Dashboard dan bukan yang Anda buat sendiri. Xcode sering salah menyimpan sertifikat lama dalam cache, jadi selain membuat sertifikat baru, Stripe juga merekomendasikan untuk membuat Apple Merchant ID baru. Jika Anda menerima kesalahan: > Anda belum menambahkan akun merchant Apple ke Stripe kemungkinan aplikasi Anda mengirimkan data yang dienkripsi dengan CSR/Sertifikat (non-Stripe) sebelumnya. Pastikan semua sertifikat yang dihasilkan oleh CSR non-Stripe dicabut dengan Apple Merchant ID Anda. Jika hal ini tidak memecahkan masalah, hapus identifikasi merchant di akun Apple Anda dan buat kembali. Kemudian, buat sertifikat baru berdasarkan CSR (disediakan Stripe) yang sama dengan yang digunakan sebelumnya. Anda tidak perlu mengunggah sertifikat baru ini ke Stripe. Setelah selesai, nonaktifkan dan aktifkan Apple Pay Credentials di aplikasi Anda untuk memastikannya dimuat kembali dengan benar. ## Tampilkan lembar pembayaran Di prop [`PlatformPayButton` ](https://stripe.dev/stripe-react-native/api-reference/index.html#PlatformPayButton) `onPress`, panggil `confirmPlatformPayPayment` untuk membuka lembar Apple Pay. Untuk menampilkan item keranjang pelanggan pada lembar pembayaran, berikan item sebagai argumen. Item terakhir harus mewakili perusahaan Anda dan total; item tersebut muncul di lembar dengan kata “Bayar” yang sudah diawali dengan kata “Bayar” (misalnya, “Bayar iHats, Inc. $50”). > Di kode Anda yang menangani tindakan pelanggan, jangan sertakan tindakan kompleks atau asinkron sebelum menampilkan lembar pembayaran. Jika tindakan pengguna tidak secara langsung meminta lembar pembayaran, Apple Pay akan mengembalikan kesalahan. ```jsx import { confirmPlatformPayPayment } from '@stripe/stripe-react-native'; function PaymentScreen() { // ... see above const pay = async () => { const clientSecret = await fetchPaymentIntentClientSecret() const { error, paymentIntent } = await confirmPlatformPayPayment( clientSecret, { applePay: { cartItems: [ { label: 'Example item name', amount: '14.00', paymentType: PlatformPay.PaymentType.Immediate, }, { label: 'Tax', amount: '1.60', paymentType: PlatformPay.PaymentType.Immediate, }, { label: 'iHats, Inc.', amount: '15.60', paymentType: PlatformPay.PaymentType.Immediate, }, ], merchantCountryCode: 'US', currencyCode: 'USD', requiredShippingAddressFields: [ PlatformPay.ContactField.PostalAddress, ], requiredBillingContactFields: [PlatformPay.ContactField.PhoneNumber], }, } ); if (error) { // handle error } else { Alert.alert('Success', 'Check the logs for payment intent details.'); console.log(JSON.stringify(paymentIntent, null, 2)); } }; // ... see above } ``` ## Optional: Buat Metode Pembayaran [Sisi klien] Saat mengonfirmasi pembayaran pada server, Anda dapat menggunakan Apple Pay hanya untuk mengumpulkan `PaymentMethod`, bukan mengonfirmasi pembayaran. Untuk melakukannya, panggil metode `createPlatformPayPaymentMethod`: ```javascript import {PlatformPayButton, isPlatformPaySupported, createPlatformPayPaymentMethod} from '@stripe/stripe-react-native'; function PaymentScreen() { const [isApplePaySupported, setIsApplePaySupported] = useState(false); useEffect(() => { (async function () { setIsApplePaySupported(await isPlatformPaySupported()); })(); }, [isPlatformPaySupported]); const createPaymentMethod = async () => { const { error, paymentMethod } = await createPlatformPayPaymentMethod({ applePay: { cartItems: [ { label: 'Example item name', amount: '14.00', paymentType: PlatformPay.PaymentType.Immediate, }, { label: 'Total', amount: '12.75', paymentType: PlatformPay.PaymentType.Immediate, }, ], merchantCountryCode: 'US', currencyCode: 'USD', }, }); if (error) { Alert.alert(error.code, error.message); return; } else if (paymentMethod) { Alert.alert( 'Success', `The payment method was created successfully. paymentMethodId: ${paymentMethod.id}` ); } }; return ( {isApplePaySupported && ( )} ); } ``` ## Optional: Pembayaran rutin [Sisi klien] Di iOS 16 atau lebih baru, Anda dapat mengadopsi [token merchant](https://developer.apple.com/apple-pay/merchant-tokens/) dengan menyetel bidang `request` di `confirmPlatformPayPayment()` dan objek parameter `applePay` `confirmPlatformPaySetupIntent`. ```js await confirmPlatformPayPayment( clientSecret, { applePay: { // Make sure to include the rest of the necessary fields request: { type: PlatformPay.PaymentRequestType.Recurring, description: 'String describing my payment', managementUrl: 'www..com', billing: { paymentType: PlatformPay.PaymentType.Recurring, intervalUnit: PlatformPay.IntervalUnit.Month, intervalCount: 3, label: 'My label', amount: '39.00', }, }, }, } ); ``` Untuk mempelajari lebih lanjut cara menggunakan pembayaran rutin dengan Apple Pay, lihat [dokumentasi Apple PassKit](https://developer.apple.com/documentation/passkit/pkpaymentrequest). ## Optional: Pelacakan pesanan [Sisi klien] Untuk menerapkan [pelacakan pesanan](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) di iOS 16 atau lebih baru, gunakan callback `setOrderTracking` untuk komponen `PlatformPayButton`. Dalam implementasi Anda: 1. Ambil detail pesanan dari server Anda untuk pesanan yang sudah selesai. 1. Panggil penangan penyelesaian yang disediakan di `setOrderTracking` dengan hasil dari server Anda. ```jsx { const { orderIdentifier, orderType, authToken, webServiceUrl } = fetchOrderDetailsFromMyBackend(); completion(orderIdentifier, orderType, authToken, webServiceUrl); }} /> ``` Untuk mempelajari pelacakan pesanan lebih lanjut, lihat [dokumentasi Apple’s Wallet Orders](https://developer.apple.com/documentation/walletorders). # Web > This is a Web for when platform is web. View the full page at https://docs.stripe.com/apple-pay?platform=web. Anda dapat menerima pembayaran Apple Pay di Web menggunakan [Checkout](https://docs.stripe.com/payments/checkout.md) atau [Elements](https://docs.stripe.com/payments/elements.md). Tidak perlu konfigurasi tambahan untuk menggunakan Apple Pay di Checkout. Untuk Elements, lihat panduan [Express Checkout Element](https://docs.stripe.com/elements/express-checkout-element.md) atau [Menerima pembayaran](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=elements&api-integration=checkout) untuk mempelajari cara menambahkan Apple Pay ke situs Anda. ### Pertimbangan integrasi web - **Menggunakan iframe dengan [Elements](https://docs.stripe.com/payments/elements.md)**: Ketika menggunakan iframe, asalnya harus sesuai dengan asal level atas (kecuali untuk Safari 17+ ketika menentukan atribut `allow="payment"`). Dua halaman memiliki asal yang sama jika protokol, host (nama domain lengkap), dan port (jika ditentukan) sama untuk kedua halaman. - **Domain tingkat atas dan domain iframe**: Jika domain tingkat atas berbeda dengan domain iframe, domain tingkat atas serta domain sumber iframe, keduanya harus berupa [domain metode pembayaran terdaftar](https://docs.stripe.com/payments/payment-methods/pmd-registration.md) di akun terkait. - **Integrasi Stripe.js v2 yang sudah ada**: Upgrade ke Checkout atau Elements sesegera mungkin. - **Menggunakan [Checkout](https://docs.stripe.com/payments/checkout.md) dengan [ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) yang diatur ke `embedded_page`**: Hanya mendukung Safari versi 17 atau yang lebih baru dan iOS versi 17 atau yang lebih baru. Penggunaan Apple Pay on the Web tunduk pada [ketentuan layanan Apple Pay on the Web](https://stripe.com/apple-pay/legal). ### Daftarkan domain Anda dengan Apple Pay Untuk menggunakan Apple Pay, Anda harus mendaftarkan semua domain web yang menampilkan tombol Apple Pay di Apple. Ini termasuk domain tingkat atas (misalnya, **stripe.com**) dan subdomain (misalnya, **shop.stripe.com**), dalam produksi dan percobaan. > #### Subdomain > > `www` adalah subdomain (misalnya, **www.stripe.com**) yang juga harus anda daftarkan. Stripe menangani validasi merchant Apple untuk Anda, termasuk membuat Apple Merchant ID dan Permintaan Penandatanganan Sertifikat. Jangan ikuti proses validasi merchant di dokumentasi Apple Pay. Sebagai gantinya, ikuti langkah ini: 1. Beri tahu Stripe untuk mendaftarkan domain Anda dengan Apple. Anda dapat melakukan ini di [halaman domain metode pembayaran](https://dashboard.stripe.com/settings/payment_method_domains) di Dashboard, *atau* menggunakan API dengan kunci rahasia live, seperti yang ditunjukkan di bawah. Jangan daftarkan domain Anda lebih dari sekali per akun. ```curl curl https://api.stripe.com/v1/payment_method_domains \ -u "<>:" \ -d "domain_name=example.com" ``` Ketika menggunakan [direct charges](https://docs.stripe.com/connect/direct-charges.md) dengan *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients), Anda perlu mengonfigurasi domain untuk setiap akun terhubung menggunakan API. Ini bukan merupakan persyaratan untuk akun terhubung yang menggunakan jenis biaya lainnya. Setelah mendaftarkan domain, Anda dapat melakukan pembayaran di situs Anda dengan kunci API live. ## Pembayaran rutin We recommend implementing Apple Pay merchant tokens to enable merchant-initiated transactions (MIT) such as recurring and deferred payments and automatic reloads. Merchant tokens (MPANs) connect your business with your customer’s Apple Wallet payment method, so they work across multiple devices and keep payment information active in a new device even when its removed from a lost or stolen device. See [ApplePay merchant tokens](https://docs.stripe.com/apple-pay/merchant-tokens.md?pay-element=ece) for integration details. ## Apple Pay percobaan Untuk mencoba Apple Pay, Anda harus menggunakan nomor kartu kredit dan [kunci API percobaan](https://docs.stripe.com/keys.md) Anda. Stripe mengenali bahwa Anda sedang mencoba dan mengembalikan token kartu percobaan yang berhasil untuk Anda gunakan, sehingga Anda dapat melakukan pembayaran percobaan pada kartu live tanpa men-charge-nya. Anda tidak dapat menyimpan [kartu percobaan Stripe](https://docs.stripe.com/testing.md#use-test-cards) atau [kartu percobaan Apple Pay](https://developer.apple.com/apple-pay/sandbox-testing/) ke dompet Apple Pay untuk mencoba Apple Pay. # Web > This is a Web for when platform is web. View the full page at https://docs.stripe.com/apple-pay?platform=web. Jika Anda tidak memenuhi persyaratan integrasi dan perangkat, Stripe tidak menampilkan Apple Pay sebagai opsi pembayaran. Gunakan [halaman pengujian](https://docs.stripe.com/testing/wallets.md) kami untuk membantu Anda memecahkan masalah. ## See also - [Integrasi iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) - [Apple Pay on the Web](https://docs.stripe.com/elements/express-checkout-element.md) - [Praktik Terbaik Apple Pay](https://docs.stripe.com/apple-pay/best-practices.md)