@exodus/react-native-payments

中文文档
2.1.1发布于 2025/10/31MITTypeScriptCommonJS近 30 天下载 1.1万
原始使用文档
文档目录25 节
  1. Table of Contents
  2. Demo
  3. Installation
  4. Usage
  5. Setting up Apple Pay/Android Pay
  6. Importing the Library
  7. Initializing the Payment Request
  8. Displaying the Payment Request
  9. Aborting the Payment Request
  10. Requesting Contact Information
  11. Requesting a Shipping Address
  12. Processing Payments
  13. Dismissing the Payment Request
  14. Testing Payments
  15. Apple Pay
  16. Apple Pay Button
  17. API
  18. NativePayments
  19. PaymentRequest
  20. PaymentRequestUpdateEvent
  21. PaymentResponse
  22. Resources
  23. Payment Request
  24. Apple Pay
  25. Android Pay

React Native Payments

react-native version npm npm styled with prettier

Accept Payments with Apple Pay and Android Pay using the Payment Request API.

Features

  • Simple. No more checkout forms.
  • Effective. Faster checkouts that increase conversion.
  • Future-proof. Use a W3C Standards API, supported by companies like Google, Firefox and others.
  • Cross-platform. Share payments code between your iOS, Android, and web apps.
  • Add-ons. Easily enable support for Stripe or Braintree via add-ons.

Table of Contents

Demo

You can run the demo by cloning the project and running:

$ yarn run:demo

In a rush? Check out the browser version of the demo.

Note that you'll need to run it from a browser with Payment Request support.

Installation

First, download the package:

$ yarn add react-native-payments

Second, link the native dependencies:

$ react-native link react-native-payments

Usage

Setting up Apple Pay/Android Pay

Before you can start accepting payments in your App, you'll need to setup Apple Pay and/or Android Pay.

Apple Pay

  1. Register as an Apple Developer
  2. Obtain a merchant ID
  3. Enable Apple Pay in your app

Apple has a documentation on how to do this in their Configuring your Environment guide.

Android Pay

  1. Add Android Pay and Google Play Services to your dependencies
  2. Enable Android Pay in your Manifest

Google has documentation on how to do this in their Setup Android Pay guide.

Importing the Library

Once Apple Pay/Android Pay is enabled in your app, jump into your app's entrypoint and make the PaymentRequest globally available to your app.

// index.ios.js
global.PaymentRequest = require('react-native-payments').PaymentRequest;

Initializing the Payment Request

To initialize a Payment Request, you'll need to provide PaymentMethodData and PaymentDetails.

Payment Method Data

The Payment Method Data is where you defined the forms of payment that you accept. To enable Apple Pay, we'll define a supportedMethod of apple-pay. We're also required to pass a data object to configures Apple Pay. This is where we provide our merchant id, define the supported card types and the currency we'll be operating in.

const METHOD_DATA = [{
  supportedMethods: ['apple-pay'],
  data: {
    merchantIdentifier: 'merchant.com.your-app.namespace',
    supportedNetworks: ['visa', 'mastercard', 'amex'],
    countryCode: 'US',
    currencyCode: 'USD'
  }
}];
See Android Pay Example
const METHOD_DATA = [{
  supportedMethods: ['android-pay'],
  data: {
    supportedNetworks: ['visa', 'mastercard', 'amex'],
    currencyCode: 'USD',
    environment: 'TEST', // defaults to production
    paymentMethodTokenizationParameters: {
      tokenizationType: 'NETWORK_TOKEN',
      parameters: {
        publicKey: 'your-pubic-key'
      }
    }
  }
}];

Payment Details

Payment Details is where define transaction details like display items, a total and optionally shipping options.

Google has excellent documentation for Defining Payment Details.

const DETAILS = {
  id: 'basic-example',
  displayItems: [
    {
      label: 'Movie Ticket',
      amount: { currency: 'USD', value: '15.00' }
    }
  ],
  total: {
    label: 'Merchant Name',
    amount: { currency: 'USD', value: '15.00' }
  }
};

Once you've defined your methodData and details, you're ready to initialize your Payment Request.

const paymentRequest = new PaymentRequest(METHOD_DATA, DETAILS);

🚨 Note: On Android, display items are not displayed within the Android Pay view. Instead, the User Flows documentation suggests showing users a confirmation view where you list the display items. When using React Native Payments, show this view after receiving the PaymentResponse.

Displaying the Payment Request

Now that you've setup your Payment Request, displaying it is as simple as calling the show method.

paymentRequest.show();
See Screenshots

Aborting the Payment Request

You can abort the Payment Request at any point by calling the abort method.

paymentRequest.abort();

🚨 Note: Not yet implemented on Android Pay

Requesting Contact Information

Some apps may require contact information from a user. You can do so by providing a PaymentOptions as a third argument when initializing a Payment Request. Using Payment Options, you can request a contact name, phone number and/or email.

Requesting a Contact Name

Set requestPayerName to true to request a contact name.

const OPTIONS = {
  requestPayerName: true
};
See Screenshots

🚨 Note: On Android, requesting a contact name will present the user with a shipping address selector. If you're not shipping anything to the user, consider capturing the contact name outside of Android Pay.

Requesting a Phone Number

Set requestPayerPhone to true to request a phone number.

const OPTIONS = {
  requestPayerPhone: true
};
See Screenshots

🚨 Note: On Android, requesting a phone number will present the user with a shipping address selector. If you're not shipping anything to the user, consider capturing the phone number outside of Android Pay.

Requesting an Email Address

Set requestPayerEmail to true to request an email address.

const OPTIONS = {
  requestPayerEmail: true
};
See Screenshots

You can also request all three by setting them all to true.

const OPTIONS = {
  requestPayerName: true,
  requestPayerPhone: true,
  requestPayerEmail: true
};

Requesting a Shipping Address

Requesting a shipping address is done in three steps.

First, you'll need to set requestShipping to true within PaymentOptions.

const OPTIONS = {
  requestShipping: true
};

Second, you'll need to include shippingOptions in your Payment Details.

const DETAILS = {
  id: 'basic-example',
  displayItems: [
    {
      label: 'Movie Ticket',
      amount: { currency: 'USD', value: '15.00' }
    }
  ],
+ shippingOptions: [{
+   id: 'economy',
+   label: 'Economy Shipping',
+   amount: { currency: 'USD', value: '0.00' },
+   detail: 'Arrives in 3-5 days' // `detail` is specific to React Native Payments
+ }],
  total: {
    label: 'Merchant Name',
    amount: { currency: 'USD', value: '15.00' }
  }
};

Lastly, you'll need to register event listeners for when a user selects a shippingAddress and/or a shippingOption. In the callback each event, you'll need to provide new PaymentDetails that will update your PaymentRequest.

paymentRequest.addEventListener('shippingaddresschange', e => {
  const updatedDetails = getUpdatedDetailsForShippingAddress(paymentRequest.shippingAddress;

  e.updateWith(updatedDetails);
});

paymentRequest.addEventListener('shippingoptionchange', e => {
  const updatedDetails = getUpdatedDetailsForShippingOption(paymentRequest.shippingOption);

  e.updateWith(updatedDetails);
});

For a deeper dive on handling shipping in Payment Request, checkout Google's Shipping in Payment Request.

🚨 Note: On Android, there are no shippingaddresschange and shippingoptionchange events. To allow users to update their shipping address, you'll need to trigger a new PaymentRequest. Updating shipping options typically happens after the receiving the PaymentResponse and before calling its getPaymentToken method.

Processing Payments

Now that we know how to initialize, display, and dismiss a Payment Request, let's take a look at how to process payments.

When a user accepts to pay, PaymentRequest.show will resolve to a Payment Response.

paymentRequest.show()
  .then(paymentResponse => {
    // Your payment processing code goes here

    return processPayment(paymentResponse);
  });

There are two ways to process Apple Pay/Android Pay payments -- on your server or using a payment processor.

Processing Payments on Your Server

If you're equipped to process Apple Pay/Android Pay payments on your server, all you have to do is send the Payment Response data to your server.

⚠️ Note: When running Apple Pay on simulator, paymentData equals to null.

import { NativeModules } from 'react-native';

paymentRequest.show()
  .then(paymentResponse => {
    const { transactionIdentifier, paymentData } = paymentResponse.details;

    return fetch('...', {
      method: 'POST',
      body: {
        transactionIdentifier,
        paymentData
      }
    })
    .then(res => res.json())
    .then(successHandler)
    .catch(errorHandler)
  });
See Android Pay Example
paymentRequest.show()
  .then(paymentResponse => {
    const { getPaymentToken } = paymentResponse.details;

    return getPaymentToken()
      .then(paymentToken => {
        const { ephemeralPublicKey, encryptedMessage, tag } = paymentResponse.details;

        return fetch('...', {
          method: 'POST',
          body: {
            ephemeralPublicKey,
            encryptedMessage,
            tag
          }
        })
        .then(res => res.json())
        .then(successHandler)
        .catch(errorHandler)
      });
  });

You can learn more about server-side decrypting of Payment Tokens on Apple's Payment Token Format Reference documentation.

Processing Payments with a Payment Processor

When using a payment processor, you'll receive a paymentToken field within the details of the PaymentResponse. Use this token to charge customers with your payment processor.

paymentRequest.show()
  .then(paymentResponse => {
    const { paymentToken } = paymentResponse.details; // On Android, you need to invoke the `getPaymentToken` method to receive the `paymentToken`.

    return fetch('...', {
      method: 'POST',
      body: {
        paymentToken
      }
    })
    .then(res => res.json())
    .then(successHandler)
    .catch(errorHandler);
  });
See Android Pay Example
paymentRequest.show()
  .then(paymentResponse => {
    const { getPaymentToken } = paymentResponse.details;

    return getPaymentToken()
      .then(paymentToken => fetch('...', {
        method: 'POST',
        body: {
          paymentToken
        }
      })
      .then(res => res.json())
      .then(successHandler)
      .catch(errorHandler);
    });
  });

For a list of supported payment processors and how to enable them, see the Add-ons section.

Dismissing the Payment Request

Dismissing the Payment Request is as simple as calling the complete method on of the PaymentResponse.

paymentResponse.complete('success'); // Alternatively, you can call it with `fail` or `unknown`

🚨 Note: On Android, there is no need to call paymentResponse.complete -- the PaymentRequest dismisses itself.

Testing Payments

Apple Pay

The sandbox environment is a great way to test offline implementation of Apple Pay for apps, websites, and point of sale systems. Apple offers detailed guide for setting up sandbox environment.

⚠️ Note: It is also important to test Apple Pay in your production environment. Real cards must be used in the production environment. Test cards will not work.

⚠️ Note: There are known differences when running Apple Pay on simulator and real device. Make sure you test Apple Pay on real device before going into production.

Apple Pay Button

Provides a button that is used either to trigger payments through Apple Pay or to prompt the user to set up a card. Detailed docs and examples

API

NativePayments

PaymentRequest

PaymentRequestUpdateEvent

PaymentResponse

Resources

Payment Request

Apple Pay

Android Pay

License

Licensed under the MIT License, Copyright © 2017, Naoufal Kadhom.

See LICENSE for more information.

版本与发布记录

@exodus/react-native-payments 共发布 18 个版本,首次发布于 2019/12/27;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.1.1latest2025/10/311 年前
2.1.02025/10/311 年前
2.0.62025/10/291 年前
2.0.52025/10/281 年前
2.0.42025/10/241.1 年前
2.0.32025/10/241.1 年前

关于 @exodus/react-native-payments 的常见问题

@exodus/react-native-payments 是什么?

[](https://www.np

如何安装 @exodus/react-native-payments?

在项目目录运行 npm install @exodus/react-native-payments,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=15)、react-native(>=0.41)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@exodus/react-native-payments 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@exodus/react-native-payments 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@exodus/react-native-payments 可以商用吗?

@exodus/react-native-payments 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@exodus/react-native-payments 的下载量有多少?

根据 npm 官方下载统计,@exodus/react-native-payments 在 2026/10/14 – 2026/11/12 这 30 天内被下载 10,611 次,日均约 354 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@exodus/react-native-payments 还在维护吗?

最新版本 2.1.1 发布于 2025/10/31(1 年前);至今共发布 18 个版本,其中过去 12 个月发布了 0 个;首次发布于 2019/12/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。