expo-payments-stripe is deprecated in favor of the @stripe/stripe-react-native library, and besides new features and better reliability, this module is supported in the managed workflow! To use it, make sure you download the newest version of Expo Go from the Play Store or App Store.
Install the library by running the following command:
npx expo install @stripe/stripe-react-nativeIf you're using the bare workflow, you'll also need to run
npx pod-install.
In the old module, you were probably calling setOptionsAsync to setup & initialize. With @stripe/stripe-react-native, you'll instead use the StripeProvider component:
import { StripeProvider } from '@stripe/stripe-react-native';
function App() {
return (
<StripeProvider publishableKey="pk_test_e0Q6gnF9VeDke03pyammLdOD">
// Your app code here
</StripeProvider>
);
}
Previously, you had to build your own forms for gathering user billing information. With @stripe/stripe-react-native, UI components are built into the library. Gather billing information with the CardField component:
function PaymentScreen() {
const [card, setCard] = useState(null);
// ...
return (
<View>
<CardField
postalCodeEnabled={true}
placeholder={{
number: '4242 4242 4242 4242',
}}
cardStyle={{
backgroundColor: '#FFFFFF',
textColor: '#000000',
}}
style={{
width: '100%',
height: 50,
marginVertical: 30,
}}
onCardChange={(cardDetails) => {
setCard(cardDetails);
}}
onFocus={(focusedField) => {
console.log('focusField', focusedField);
}}
/>
</View>
);
}
For more details and examples on accepting a payment with @stripe/stripe-react-native, please refer to the documentation.
Apple pay requires some prior setup- to setup your merchant identifier, please refer to the documentation.
Once you have your merchant identifier, add:
{
expo: {
...
"plugins": [
[
"@stripe/stripe-react-native",
{
"merchantIdentifier": string | string [],
"enableGooglePay": boolean
}
]
],
}
}to your app.json file, where merchantIdentifier is the Apple merchant ID obtained here. Otherwise, Apple Pay will not work as expected. If you have multiple merchantIdentifiers, you can provide them all in an array. If you use Continuous Native Generation with prebuild, you'll need to run npx expo prebuild --clean to apply the native project configuration.
Then, in the StripeProvider component, specify the same Apple Merchant ID:
<StripeProvider
publishableKey="pk_test_e0Q6gnF9VeDke03pyammLdOD"
merchantIdentifier="merchant.com.{{YOUR_APP_NAME}}"
// ..
>
<App>
</StripeProvider>
Replace deviceSupportsApplePayAsync with the new useApplePay hook:
const { isApplePaySupported } = useApplePay();
Replace paymentRequestWithApplePayAsync, completeApplePayRequestAsync, and cancelApplePayRequestAsync with:
const {
presentApplePay,
confirmApplePayPayment,
} = useApplePay();
For more details and examples on accepting Apple Pay with @stripe/stripe-react-native, please refer to the documentation.
Configure Google Pay via app.json with:
{
expo: {
...
"plugins": [
[
"@stripe/stripe-react-native",
{
"merchantIdentifier": string | string [],
"enableGooglePay": boolean
}
]
],
}
}