GithubHelp home page GithubHelp logo

bejarano-tech / stripe-react-native Goto Github PK

View Code? Open in Web Editor NEW

This project forked from stripe/stripe-react-native

0.0 0.0 0.0 959 KB

React Native library for Stripe.

Home Page: https://stripe.dev/stripe-react-native

License: MIT License

C 0.05% Kotlin 20.88% JavaScript 1.60% Shell 0.87% Java 1.66% Swift 21.74% Ruby 0.34% Objective-C 2.28% TypeScript 50.58%

stripe-react-native's Introduction

Stripe React Native SDK

npm version License

The Stripe React Native SDK allows you to build delightful payment experiences in your native Android and iOS apps using React Native. We provide powerful and customizable UI screens and elements that can be used out-of-the-box to collect your users' payment details.

Getting started

Get started with our ๐Ÿ“š integration guides and example project, or ๐Ÿ“˜ browse the SDK reference.

Updating to a newer version of the SDK? See our changelog.

Features

Simplified Security: We make it simple for you to collect sensitive data such as credit card numbers and remain PCI compliant. This means the sensitive data is sent directly to Stripe instead of passing through your server. For more information, see our Integration Security Guide.

Apple Pay: We provide a seamless integration with Apple Pay.

Payment methods: Accepting more payment methods helps your business expand its global reach and improve checkout conversion.

SCA-Ready: The SDK automatically performs native 3D Secure authentication if needed to comply with Strong Customer Authentication regulation in Europe.

Native UI: We provide native screens and elements to securely collect payment details on Android and iOS.

Pre-built payments UI (beta): Learn how to integrate Payment Sheet, our new pre-built payments UI for mobile apps. Our pre-built UI lets you accept cards, Apple Pay, and Google Pay out of the box, and includes support for saving & reusing cards. We'll be adding support for many more payment method during the beta.

Installation

yarn add @stripe/stripe-react-native
or
npm install @stripe/stripe-react-native

Expo

If you're using Expo, 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 set them in an array.

Requirements

Android

Android 5.0 (API level 21) and above

iOS

Compatible with apps targeting iOS 11 or above.

You'll need to run pod install in your ios directory to install the native dependencies.

Usage example

// App.ts
import { StripeProvider } from '@stripe/stripe-react-native';

function App() {
  return (
    <StripeProvider
      publishableKey={publishableKey}
      merchantIdentifier="merchant.identifier"
    >
      <PaymentScreen />
    </StripeProvider>
  );
}

// PaymentScreen.ts
import {
  CardField,
  CardFieldInput,
  useStripe,
} from '@stripe/stripe-react-native';

export default function PaymentScreen() {
  const [card, setCard] = useState<CardFieldInput.Details | null>(null);
  const { confirmPayment, handleCardAction } = useStripe();

  return (
    <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);
      }}
    />
  );
}

Stripe initialization

To initialize Stripe in your React Native app, use the StripeProvider component in the root component of your application, or use the initStripe method.

StripeProvider can accept urlScheme, publishableKey, stripeAccountId, threeDSecureParams and merchantIdentifier as props. Only publishableKey is required.

import { StripeProvider } from '@stripe/stripe-react-native';

function App() {
  const [publishableKey, setPublishableKey] = useState('');

  const fetchPublishableKey = async () => {
    const key = await fetchKey(); // fetch key from your server here
    setPublishableKey(key);
  };

  useEffect(() => {
    fetchPublishableKey();
  }, []);

  return (
    <StripeProvider
      publishableKey={publishableKey}
      merchantIdentifier="merchant.identifier"
    >
      // Your app code here
    </StripeProvider>
  );
}

or

import { initStripe } from '@stripe/stripe-react-native';

function App() {
  // ...

  useEffect(() => {
    initStripe({
      publishableKey: publishableKey
      merchantIdentifier: 'merchant.identifier',
    });
  }, []);
}

You can find more details about the StripeProvider component in the API reference.

Run the example app

  • Install the dependencies
    • yarn bootstrap
  • Set up env vars
    • cp example/.env.example example/.env and set the variable values in your newly created .env file.
  • Start the example
    • Terminal 1: yarn example start:server
    • Terminal 2: yarn example start
    • Terminal 3: depending on what platform you want to build for run either
      • yarn example ios
      • or
      • yarn example android
Additional steps for webhook forwarding

Certain payment methods require a webhook listener to notify you of changes in the status. When developing locally, you can use the Stripe CLI to forward webhook events to your local dev server.

  • Install the stripe-cli
  • Run stripe listen --forward-to localhost:4242/webhook
  • The CLI will print a webhook secret (such as, whsec_***) to the console. Set STRIPE_WEBHOOK_SECRET to this value in your example/.env file.

Troubleshooting

While building your iOS project, you may see a Undefined symbols for architecture x86_64 error. This is caused by a react-native init template configuration that is not fully compatible with Swift 5.1.

Undefined symbols for architecture x86_64:
  "(extension in Foundation):__C.NSScanner.scanUpToString(Swift.String) -> Swift.String?", referenced from:
      static Stripe.STPPhoneNumberValidator.formattedRedactedPhoneNumber(for: Swift.String, forCountryCode: Swift.String?) -> Swift.String in libStripe.a(STPPhoneNumberValidator.o)
  "__swift_FORCE_LOAD_$_swiftUniformTypeIdentifiers", referenced from:
      __swift_FORCE_LOAD_$_swiftUniformTypeIdentifiers_$_Stripe in libStripe.a(PKPaymentAuthorizationViewController+Stripe_Blocks.o)

Follow these steps to resolve this:

  • Remove all entries from LIBRARY_SEARCH_PATHS in the Project configuration $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) and $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
  • Open Xcode and create a new Swift file to the project (File > New > File > Swift), give it any name (e.g. Fix.swift) and create a bridging header when prompted by Xcode.

If you're still having troubles, please open an issue or jump in our developer chat.

Contributing

See the contributor guidelines to learn how to contribute to the repository.

stripe-react-native's People

Contributors

arekkubaczkowski avatar cruzach avatar dependabot[bot] avatar thorsten-stripe avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.