| [ Web Proxy ] |
| Viewing: https://stripe.com/en-hk/docs/google-pay | [Back] [Original] |
For information on payment method transaction fees, refer to pricing details.
Google Pay allows customers to make payments in your app or website using any credit or debit card saved to their Google Account, including those from Google Play, YouTube, Chrome, or an Android device. Use the Google Pay API to request any credit or debit card stored in your customers Google account.
Google Pay is fully compatible with Stripes products and features (for example, recurring payments), allowing you to use it in place of a traditional payment form whenever possible. Use it to accept payments for physical goods, donations, subscriptions, and so on.
By integrating Google Pay, you agree to Googles terms of service.
Customer locations
Worldwide except India
Presentment currency
Payment confirmation
Customer-initiated
Payment method family
Wallet
Recurring payments
Yes
Payout timing
Standard payout timing applies
Connect support
Yes
Dispute support
Manual capture support
Yes
Refunds / Partial refunds
This guide explains how to configure your app to accept Google Pay for physical goods, services, and other eligible items. Stripe processes these payments, and you pay only Stripes processing fees.
For digital products, content, and subscriptions sold in the US or the European Economic Area (EEA), your Android app can accept payments directly in-app through a third-party payment processor such as Stripe. You can use these payment UIs:
For more information about which purchases must use the Google Play billing system, see Google Plays developer terms.
GooglePayLauncher, part of the Stripe Android SDK, is the fastest and easiest way to start accepting Google Pay in your Android apps.
To support Google Pay in Android, you need the following:
minSdkVersion of 19 or higher.compileSdkVersion of 28 or higher.Additionally, if you wish to test with your own device, you need to add a payment method to your Google Account.
This guide assumes youre using the latest version of the Stripe Android SDK.
To use Google Pay, first enable the Google Pay API by adding the following to the <application> tag of your AndroidManifest.xml:
<application> ... <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true" /> </application>
For more details, see Google Pays Set up Google Pay API for Android.
Create a PaymentIntent on your server with an amount and currency. Always decide how much to charge on the server side, a trusted environment, as opposed to the client side. This prevents malicious customers from choosing their own prices.
A PaymentIntent includes a client secret. You can use the client secret in your Android app to securely complete the payment process instead of passing the entire PaymentIntent object. In your app, request a PaymentIntent from your server and store its client secret.
class CheckoutActivity : AppCompatActivity() { private lateinit var paymentIntentClientSecret: String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... startCheckout() } private fun startCheckout() { // Request a PaymentIntent from your server and store its client secret in paymentIntentClientSecret // Click View full sample to see a complete implementation } }
Add the Google Pay button to your app by following Googles tutorial. This ensures youre using the correct assets.
Next, create an instance of GooglePayLauncher in your Activity or Fragment. This must be done in Activity#onCreate().
GooglePayLauncher.Config exposes both required and optional properties that configure GooglePayLauncher. See GooglePayLauncher.Config for more details on the configuration options.
import com.google.android.gms.wallet.button.PayButton class CheckoutActivity : AppCompatActivity() { // fetch client_secret from backend private lateinit var clientSecret: String private lateinit var googlePayButton: PayButton override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.checkout_activity) PaymentConfiguration.init(this, PUBLISHABLE_KEY) googlePayButton = /* TODO: Initialize button by following Google's guide. */ val googlePayLauncher = GooglePayLauncher( activity = this, config = GooglePayLauncher.Config( environment = GooglePayEnvironment.Test, merchantCountryCode = "US", merchantName = "Widget Store" ), readyCallback = ::onGooglePayReady, resultCallback = ::onGooglePayResult ) googlePayButton.setOnClickListener { // launch `GooglePayLauncher` to confirm a Payment Intent googlePayLauncher.presentForPaymentIntent(clientSecret) } } private fun onGooglePayReady(isReady: Boolean) { // implemented below } private fun onGooglePayResult(result: GooglePayLauncher.Result) { // implemented below } }
After instantiating GooglePayLauncher, the GooglePayLauncher.ReadyCallback instance is called with a flag indicating whether Google Pay is available and ready to use. This flag can be used to update your UI to indicate to your customer that Google Pay is ready to be used.
After Google Pay is available and your app has obtained a PaymentIntent or SetupIntent client secret, launch GooglePayLauncher using the appropriate method. When confirming a PaymentIntent, use GooglePayLauncher#presentForPaymentIntent(clientSecret). When confirming a SetupIntent, use GooglePayLauncher#presentForSetupIntent(clientSecret).
import com.google.android.gms.wallet.button.PayButton class CheckoutActivity : AppCompatActivity() { // fetch client_secret from backend private lateinit var clientSecret: String private lateinit var googlePayButton: PayButton override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // instantiate `googlePayLauncher` googlePayButton.setOnClickListener { // launch `GooglePayLauncher` to confirm a Payment Intent googlePayLauncher.presentForPaymentIntent(clientSecret) } } }
Finally, implement GooglePayLauncher.ResultCallback to handle the result of the GooglePayLauncher operation.
The result can be GooglePayLauncher.Result.Completed, GooglePayLauncher.Result.Canceled, or GooglePayLauncher.Result.Failed.
class CheckoutActivity : AppCompatActivity() { // continued from above private fun onGooglePayResult(result: GooglePayLauncher.Result) { when (result) { GooglePayLauncher.Result.Completed -> { // Payment succeeded, show a receipt view } GooglePayLauncher.Result.Canceled -> { // User canceled the operation } is GooglePayLauncher.Result.Failed -> { // Operation failed; inspect `result.error` for the exception } } } }
Follow Googles instructions to request production access for your app. Choose the integration type Gateway when prompted, and provide screenshots of your app for review.
After your app has been approved, test your integration in production by setting the environment to GooglePayEnvironment.Production, and launching Google Pay from a signed, release build of your app. Remember to use your live mode API keys. You can use a PaymentIntent with capture_method = manual to process a transaction without capturing the payment.
Google allows you to make test payments through their Test card suite. The test suite supports using Stripe test cards.
You must test Google Pay using a physical Android device instead of a simulated device, in a country where Google Pay is supported. Log in to a Google account on your test device with a real card saved to Google Wallet.
If you confirm your payment on your server, you can use GooglePayPaymentMethodLauncher to only collect a PaymentMethod instead of confirm payment.
import com.google.android.gms.wallet.button.PayButton class CheckoutActivity : AppCompatActivity() { private lateinit var googlePayButton: PayButton override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.checkout_activity) PaymentConfiguration.init(this, PUBLISHABLE_KEY) googlePayButton = /* TODO: Initialize button by following Google's guide. */ val googlePayLauncher = GooglePayPaymentMethodLauncher( activity = this, config = GooglePayPaymentMethodLauncher.Config( environment = GooglePayEnvironment.Test, merchantCountryCode = "FR", merchantName = "Widget Store" ), readyCallback = ::onGooglePayReady, resultCallback = ::onGooglePayResult ) googlePayButton.setOnClickListener { googlePayLauncher.present( currencyCode = "EUR", amount = 2500 ) } } private fun onGooglePayReady(isReady: Boolean) { googlePayButton.isEnabled = isReady } private fun onGooglePayResult( result: GooglePayPaymentMethodLauncher.Result ) { when (result) { is GooglePayPaymentMethodLauncher.Result.Completed -> { // Payment details successfully captured. // Send the paymentMethodId to your server to finalize payment. val paymentMethodId = result.paymentMethod.id } GooglePayPaymentMethodLauncher.Result.Canceled -> { // User canceled the operation } is GooglePayPaymentMethodLauncher.Result.Failed -> { // Operation failed; inspect `result.error` for the exception } } } }
Users must authenticate payments with their Google Pay accounts, which reduces the risk of fraud or unrecognized payments. However, users can still dispute transactions after they complete payment. You can submit evidence to contest a dispute directly. The dispute process is the same as that for card payments. Learn how to manage disputes.
Google Pay supports liability shift globally. This is true automatically for users on Stripe-hosted products and using Stripe.js. For Visa transactions outside of a Stripe-hosted product, you must enable liability shift in the Google Pay & Wallet Console. To do so, go to your Google Pay & Wallet Console, select Google Pay API in the navigation bar on the left, and then enable Fraud Liability Protection for Visa Device Tokens for liability shift protection.
There are three use cases of Google Pay transactions:
For Sigma users, the charges table contains a card_token_type field that indicates the Google Pay transaction type. An FPAN transaction sets the card_token_type to fpan. DPAN and ecommerce token transactions set the card_token_type to dpan_or_ecommerce_token.
You can partially or fully refund any successful Google Pay payment. The refund process is the same as that for card payments. See Refund and cancel payments for instructions on initiating or managing refunds.
| Web Proxy Viewer | New URL | Original Page |