# 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:

## 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:
# React Native iOS
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.

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).
## 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.
## 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)