Sigue los pasos de este tutorial para añadir Google Pay a tu aplicación Android y configurarlo para aceptar tarjetas de pago.
- Paso 1: Define tu configuración de pago
- Paso 2: Crea una instancia de PaymentsClient
- Paso 3: Determina si se puede pagar con la API de Google Pay
- Paso 4: Añade un botón de pago de Google Pay
- Paso 5: Crea un objeto PaymentDataRequest
- Paso 6: Inicia el proceso de pago con Google Pay
- Ponerlo todo en práctica
Paso 1: Define tu configuración de pagos
Configurar la versión de la API de Google Pay
Declara la versión de la API de Google Pay que usa tu aplicación. Las versiones principales y secundarias afectan a los campos esperados en cada objeto transferido y se incluyen en la respuesta.
Crea un objeto de solicitud base que contenga propiedades presentes en todos los demás objetos de solicitud.
Kotlin
private val baseRequest = JSONObject() .put("apiVersion", 2) .put("apiVersionMinor", 0)
Java
private static JSONObject getBaseRequest() throws JSONException { return new JSONObject() .put("apiVersion", 2) .put("apiVersionMinor", 0); }
Solicitar un token de pago a tu proveedor de pagos
Google cifra la información sobre la tarjeta seleccionada por el pagador para que un proveedor de pagos la procese de forma segura.
Kotlin
private fun gatewayTokenizationSpecification(): JSONObject { return JSONObject().apply { put("type", "PAYMENT_GATEWAY") put("parameters", JSONObject(mapOf( "gateway" to "example", "gatewayMerchantId" to "exampleGatewayMerchantId"))) } }
Java
private static JSONObject getGatewayTokenizationSpecification() throws JSONException { return new JSONObject() .put("type", "PAYMENT_GATEWAY") .put("parameters", new JSONObject() .put("gateway", "example") .put("gatewayMerchantId", "exampleGatewayMerchantId") ); }
Sustituye example y exampleGatewayMerchantId por los valores adecuados de tu proveedor de pagos. Consulta la siguiente tabla para encontrar los valores específicos de gateway y gatewayMerchantId de tu proveedor de pagos:
| Pasarela | Parámetros y documentos |
|---|---|
| 9Pay |
"gateway": "ninepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ABA PayWay |
"gateway": "ababank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| accept.blue |
"gateway": "acceptblue" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ACI |
"gateway": "aciworldwide" "gatewayMerchantId": "YOUR_ENTITY_ID" |
| ACpay |
"gateway": "acpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Acquired.com |
"gateway": "acquired" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Adyen |
"gateway": "adyen" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| IA para fintech |
"gateway": "aifintech" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| Airba Pay |
"gateway": "airbapay"" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| Airvend |
"gateway": "airvend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Airwallex |
"gateway": "airwallex" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| Akurateco |
"gateway": "akuratecolab" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Alfa-Bank |
"gateway": "alfabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Algoritma |
"gateway": "algoritma" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Allinpay |
"gateway": "allinpayintl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| AllPayments |
"gateway": "allpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| alticepay |
"gateway": "alticepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| AMO FINTECH LLC |
"gateway": "amofintech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Amwal Pay |
"gateway": "amwalalraqamia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Anedot |
"gateway": "anedot" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ApcoPay |
"gateway": "apcopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| APPEX |
"gateway": "epos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| AsiaBill |
"gateway": "asiabill" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Assist |
"gateway": "assist" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Assist Belarus |
"gateway": "belassist" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Assist Kazakhstan |
"gateway": "assistkz" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Aurus |
"gateway": "auruspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Authorize.net |
"gateway": "authorizenet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Axerve |
"gateway": "gestpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| azericardgpay |
"gateway": "azericardgpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| B2B Soft Pay |
"gateway": "b2bsoftpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bank 131 |
"gateway": "bank131" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BANK RBK |
"gateway": "bankrbkkzpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bank Vostok |
"gateway": "bankvostok" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Barclaycard |
"gateway": "barclayssmartpayadvance" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Barion |
"gateway": "barion" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Basis Theory |
"gateway": "basistheory" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BCC.KZ |
"gateway": "bccpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| bePaid |
"gateway": "ecomcharge" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bereke Bank |
"gateway": "berekepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Sistemas de facturación |
"gateway": "billingsystems" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bindo Labs Limited |
"gateway": "bindo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| bisys.kz |
"gateway": "bisysgpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bizzon |
"gateway": "bizzon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bloques |
"gateway": "blocks" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bluefin |
"gateway": "bluefin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Bluefin Europe |
"gateway": "bluefineurope" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Blue Media |
"gateway": "bluemedia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BlueSnap |
"gateway": "bluesnap" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BORICA |
"gateway": "borica" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BPC |
"gateway": "bpcpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BR-DGE |
"gateway": "comcarde" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Braintree |
"gateway": "braintree" "braintree:apiVersion": "v1" "braintree:sdkVersion": "braintree.client.VERSION" "braintree:merchantId": "YOUR_BRAINTREE_MERCHANT_ID" "braintree:clientKey": "YOUR_BRAINTREE_TOKENIZATION_KEY" |
| Braspag |
"gateway": "cielo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BridgerPay |
"gateway": "bridgerpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BT Pay |
"gateway": "btpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Buckaroo |
"gateway": "buckaroo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Buya |
"gateway": "buya" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CardCom |
"gateway": "cardcom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CardConnect |
"gateway": "cardconnect" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Cardknox |
"gateway": "cardknox" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| cardlink |
"gateway": "cardlink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Cardstream |
"gateway": "crst" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Flujos de efectivo |
"gateway": "cashflowsgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Cathay United Bank |
"gateway": "cathaybk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CCavenue (EAU) |
"gateway": "ccavenueuae" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CCV |
"gateway": "ccv" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Cecabank |
"gateway": "cecabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Celerispay |
"gateway": "celerispay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CentralPay |
"gateway": "centralpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Chargehive |
"gateway": "chargehive" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CharityEngine |
"gateway": "charityengine" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Chase Merchant Services |
"gateway": "chase" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Checkout.com |
"gateway": "checkoutltd" "gatewayMerchantId": "YOUR_PUBLIC_KEY" |
| CityPay |
"gateway": "citypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pasarela de pagos de Cloud9 (C9PG) |
"gateway": "c9pg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CloudPayments |
"gateway": "cloudpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CloudWalk |
"gateway": "cloudwalk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Coinflow |
"gateway": "coinflow" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Computop |
"gateway": "computop" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ConcordPay |
"gateway": "concordpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Connectum |
"gateway": "connectum" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ConnexPay |
"gateway": "connexpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CoralPay |
"gateway": "coralpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Corefy |
"gateway": "paycoreio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Corvus Pay |
"gateway": "corvuspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Credorax |
"gateway": "credorax" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CrossPay |
"gateway": "crosspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Cross Switch |
"gateway": "crossswitch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CSG Forte |
"gateway": "csgforte" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CTBC Bank |
"gateway": "ctbcbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CURO Payments |
"gateway": "curopayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CYBERBIZ |
"gateway": "cyberbizpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Cybersource |
"gateway": "cybersource" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| danube.pay |
"gateway": "danubepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Datacap Systems, Inc. |
"gateway": "datatrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Datatrans |
"gateway": "datatrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| DECTA |
"gateway": "decta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores |
| Dejavoo |
"gateway": "denovosystempay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| DEUNA |
"gateway": "deuna" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Deutsche Bank AG |
"gateway": "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores |
| Deutsche Bank – Merchant Solutions |
"gateway": "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| DG Financial Technology, Inc. |
"gateway": "veritrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Finanzas digitales |
"gateway": "digitalfinance" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Dintero |
"gateway": "dintero" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| dLocal |
"gateway": "dlocal" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| DNA Payments |
"gateway": "dnapayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Dojo |
"gateway": "dojo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Dotpay |
"gateway": "dotpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| e-SiTef - Software Express |
"gateway": "softwareexpress" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| easycard |
"gateway": "easycard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| EasyPay |
"gateway": "easypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Easypay EU |
"gateway": "easypaypt" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| EBANX |
"gateway": "ebanx" "gatewayMerchantId": "YOUR_PUBLIC_INTEGRATION_KEY" |
| Tarjeta electrónica |
"gateway": "ecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ECOMMPAY |
"gateway": "ecommpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Ecopaynet |
"gateway": "ecopaynet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ECPay |
"gateway": "ecpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| eftcorporation |
"gateway": "eftcorporation" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| eGHL |
"gateway": "eghl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Elavon (Converge) |
"gateway": "convergepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Emerchantpay |
"gateway": "emerchantpay" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| emspay |
"gateway": "emsonline" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| Codificado |
"gateway": "encoded" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| epay |
"gateway": "epay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| EPAYJSC |
"gateway": "epayjsc" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| EpicPay |
"gateway": "epicpay" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| Espago |
"gateway": "espago" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Etisalat |
"gateway": "etisalatpaymentgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| EveryPay S.A. |
"gateway": "EveryPay S.A." "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Evervault |
"gateway": "evervault" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| EVONET |
"gateway": "cardinfolink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| EVOPAY |
"gateway": "EVOPAY" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pasarela de pagos de Evo |
"gateway": "evopaymentgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| exactly.com |
"gateway": "exactly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pagos exactos |
"gateway": "exactpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fat Zebra |
"gateway": "fatzebra" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fenige |
"gateway": "fenige" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fexco payUnite |
"gateway": "fexco" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fibonatix |
"gateway": "fibonatixparagon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Financial Line |
"gateway": "finline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Finanso UA |
"gateway": "finansoua" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| fincode byGMO |
"gateway": "fincode" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| FINEXUS |
"gateway": "finexus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Finix |
"gateway": "finix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| First American de Deluxe |
"gateway": "firstpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fiuu (antes Razer Merchant Services y MOLPay) |
"gateway": "molpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| FIS Biller Solutions |
"gateway": "fisglobalbsp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fiserv |
"gateway": "fiserv" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fiserv |
"gateway": "fiservipg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Flitt |
"gateway": "flitt" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fluid Pay |
"gateway": "fluidpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| FM Finance LTD |
"gateway": "fmfinanceltd" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ForteBank |
"gateway": "fortebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fractal |
"gateway": "fractal" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Freedom Finance Bank |
"gateway": "axayscom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| FreedomPay |
"gateway": "freedompay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| FreedomPay.Money |
"gateway": "payboxmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Freepay |
"gateway": "freepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Frontstream |
"gateway": "frontstreampayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Fung Payments |
"gateway": "fungpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| GBPayments |
"gateway": "gbpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| geidea |
"gateway": "geidea" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| GETTRX |
"gateway": "globalelectronictechnology" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Global One Pay |
"gateway": "globalonepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Pagos internacionales |
"gateway": "globalpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| globalpaymentsinc |
"gateway": "globalpaymentsinc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| GMO Payment Gateway |
"gateway": "gmopg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| GoDaddy Payments |
"gateway": "godaddypayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Good Idea Technologies |
"gateway": "git" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| GoPay |
"gateway": "gopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| GP Webpay |
"gateway": "gpwebpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Gravity Payments |
"gateway": "gravitypayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Gr4vy |
"gateway": "gr4vy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Halyk Bank |
"gateway": "halykbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Helcim |
"gateway": "helcim" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| HIPS |
"gateway": "hips" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| HiTrust |
"gateway": "hitrustpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| hutko |
"gateway": "hutko" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Hyp |
"gateway": "hyp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| icard |
"gateway": "icardwallet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| iCount |
"gateway": "iCount" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| IDid Tecnologia Ltda |
"gateway": "idid" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| iKhokha |
"gateway": "ikhokha" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| IMOJE |
"gateway": "imoje" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Impaya |
"gateway": "impayarus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Inovio Payments |
"gateway": "inoviopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| InPlat |
"gateway": "inplat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| InstaMed |
"gateway": "instamed" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| IntaSend Solutions Limited |
"gateway": "intasend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| IntellectMoney |
"gateway": "intellectmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Interactive Transaction Solutions |
"gateway": "interactivets" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Galería de pagos de Interswitch |
"gateway": "interswitch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Intervale |
"gateway": "intervale" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ioka fintech |
"gateway": "ioka" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| iPay88 |
"gateway": "ipay88" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| IPSI |
"gateway": "ipsi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| iQmetrix |
"gateway": "iqmetrixpaymentservicesgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| IXOPAY |
"gateway": "ixopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| JetPay |
"gateway": "jetpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| JudoPay |
"gateway": "judopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| KapitalBank |
"gateway": "eCommerceKapitalBank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Kassa |
"gateway": "kassacom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| kassa24pay |
"gateway": "kassa24pay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Kineox |
"gateway": "kineox" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Klix de Citadele |
"gateway": "klix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Koin |
"gateway": "koin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| KPay Group |
"gateway": "kpaygroup" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Lapsa Payments |
"gateway": "lapsapayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| LHV Pank |
"gateway": "lhvpank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Liberty |
"gateway": "liberty" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Life Pay |
"gateway": "lifepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Limepay |
"gateway": "limepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Linkly |
"gateway": "linkly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| LiqPay |
"gateway": "liqpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| LITIQON OÜ |
"gateway": "nuvex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Littlepay |
"gateway": "littlepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| LogPay |
"gateway": "logpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Loyale |
"gateway": "loyale" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| lynck |
"gateway": "lynck" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Lyra |
"gateway": "lyra" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Magnetiq Bank |
"gateway": "magnetiq" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| maib |
"gateway": "maibecomm" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MakeCommerce (Maksekeskus) |
"gateway": "maksekeskus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Maksu GMBH |
"gateway": "maksupayeu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Mandarín |
"gateway": "mandarin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Market Pay |
"gateway": "marketpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Mastercard Payment Gateway Services |
"gateway": "mpgs" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MerchantE |
"gateway": "merchante" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Midtrans |
"gateway": "midtrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Mercader guerrero |
"gateway": "merchantwarrior" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Minsait Payments Systems |
"gateway": "minsaitpaymentsgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MITEC |
"gateway": "mitecmx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MIXPLAT |
"gateway": "mixplat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MOBI.Money |
"gateway": "mobimoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Modulbank |
"gateway": "modulbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Mollie |
"gateway": "mollie" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Mondido |
"gateway": "mondido" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Monei |
"gateway": "monei" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| monek |
"gateway": "monek" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Moneris |
"gateway": "moneris" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Moneta |
"gateway": "moneta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Monext |
"gateway": "monext" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MoneyHash |
"gateway": "moneyhash" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Money.Mail.Ru |
"gateway": "moneymailru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| monripayments |
"gateway": "monripayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Moov |
"gateway": "moov" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MPay |
"gateway": "managepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| mstartipg |
"gateway": "mstartipg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Multicarta |
"gateway": "mulitcarta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MultiSafepay |
"gateway": "multisafepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Mundipagg |
"gateway": "mundipagg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MyCheck |
"gateway": "mycheck" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MyChoice2Pay |
"gateway": "mychoice2pay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MyFatoorah |
"gateway": "myfatoorah"
"gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| MyPay |
"gateway": "mypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| myPOS |
"gateway": "mypos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| N&TS Group |
"gateway": "netsgroup" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| NCCC |
"gateway": "nccc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Neolink |
"gateway": "neolinkprocessing" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Neon Pay |
"gateway": "neonpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Netopia |
"gateway": "netopia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Netvalve |
"gateway": "netvalve" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Network International |
"gateway": "networkintl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Newebpay (antes STPath, Pay2Go) |
"gateway": "newebpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Newtech |
"gateway": "newtechmobile" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Nexi |
"gateway": "nexi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Nexi Easy |
"gateway": "easy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| NMI |
"gateway": "gatewayservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pagos de noon |
"gateway": "noonpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Noqoody Pay |
"gateway": "noqoodypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Novalnet |
"gateway": "novalnet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Nexi Relay |
"gateway": "nexirelay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| NTT DATA |
"gateway": "nttdatahk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Nuvei |
"gateway": "nuvei" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Oceanpayment |
"gateway": "oceanpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Omise |
"gateway": "omise" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Omno |
"gateway": "omno" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| One Inc |
"gateway": "oneinc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Onelya |
"gateway": "onelya" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" |
| Onerway |
"gateway": "ronghan" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" |
| OneVision Limited |
"gateway": "onevision" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" |
| OnPay |
"gateway": "onpayio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Opayo de Elavon |
"gateway": "opayoelavon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| OrkestaPay |
"gateway": "orkestapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Oschadbank |
"gateway": "oschadbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| pagarme |
"gateway": "pagarme" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PagBank |
"gateway": "pagbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PagBrasil |
"gateway": "pagbrasil" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PagSeguro |
"gateway": "pagsegurointernational" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PAY2M |
"gateway": "pay2m" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payarc |
"gateway": "payarc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pay.com |
"gateway": "paycom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PAYCOMET |
"gateway": "paycomet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paycross Ltd |
"gateway": "paycross" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paydock |
"gateway": "paydock" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayEase |
"gateway": "payeasenet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayEngine |
"gateway": "payengine" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayerMax |
"gateway": "payermax" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayFabric |
"gateway": "payfabric" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayFacto |
"gateway": "payfacto" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayFast |
"gateway": "gopayfastuat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| paygent |
"gateway": "paygent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payhub |
"gateway": "payhub" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayKKa |
"gateway": "paykkaeu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayLane |
"gateway": "paylane" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payler |
"gateway": "payler" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayLink® |
"gateway": "paylink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Carga útil |
"gateway": "payload" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paymark |
"gateway": "paymark" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayMaster |
"gateway": "paymaster" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payment Fusion |
"gateway": "paymentfusion" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paymentvision |
"gateway": "paymentvision" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paymentwall |
"gateway": "paymentwall" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paymo |
"gateway": "paymo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paymob |
"gateway": "gpaymob" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayMongo |
"gateway": "paymongo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paymtech |
"gateway": "paymtech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayNearMe |
"gateway": "paynearme" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payneteasy |
"gateway": "payneteasy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pay.nl |
"gateway": "paynl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paynopain |
"gateway": "paynopain" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayOne |
"gateway": "payone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayOnline |
"gateway": "payonline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payoo |
"gateway": "payoo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pay Theory |
"gateway": "paytheory" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayPlus |
"gateway": "payplus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayPro Pvt Ltd |
"gateway": "paypro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Payrails |
"gateway": "payrails" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payrexx |
"gateway": "payrexx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayRiff |
"gateway": "payriff" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payrix |
"gateway": "payrix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paysafe |
"gateway": "paysafe" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payscout |
"gateway": "payscout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paysend Business |
"gateway": "paysend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paysoft |
"gateway": "paysoft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pay360 |
"gateway": "pay360" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| paytech |
"gateway": "paytechsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayTech Ukraine |
"gateway": "paytech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pasarela de pagos de Payten |
"gateway": "paytentr" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paythru |
"gateway": "paythru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payture |
"gateway": "payture" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayU |
"gateway": "payu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayU LATAM |
"gateway": "payulatam" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PAYUNi |
"gateway": "payuni" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayU Romania |
"gateway": "payuro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PayU Rusia |
"gateway": "payuru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payway |
"gateway": "payway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Paywiser |
"gateway": "paywiser" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Payzone Ireland |
"gateway": "payzoneireland" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PBT Gateway Services Ltd |
"gateway": "pbtgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pelecard |
"gateway": "pelecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pensopay |
"gateway": "pensopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pikassa |
"gateway": "pikassa" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PingPong |
"gateway": "pingpongx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pin Payments |
"gateway": "pinpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Planeta |
"gateway": "cccpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PlanetPay |
"gateway": "itcardpaymentservice" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Plategka.com |
"gateway": "plategkacom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Platón |
"gateway": "platon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pomelo |
"gateway": "pomelopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Portmone |
"gateway": "portmonecom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Preczn |
"gateway": "preczn" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PrimePay |
"gateway": "primepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Primer |
"gateway": "primer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Procard |
"gateway": "procard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ProcessOut |
"gateway": "processout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Przelewy24 |
"gateway": "przelewy24" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PSCB |
"gateway": "pscbru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PSiGate Inc. |
"gateway": "psigate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| PXP Financial |
"gateway": "pxpfinancial" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Qenta Payment CEE |
"gateway": "qenta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| QIWI |
"gateway": "qiwi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Qualpay |
"gateway": "qualpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| QuickPay |
"gateway": "quickpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Qvalent |
"gateway": "qvalent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Radial |
"gateway": "radial" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Raiffeisen Processing Centre |
"gateway": "raiffeisenprocessingcentre" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Rapyd |
"gateway": "rapyd" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| RBK.money |
"gateway": "rbkmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Rebail Capital |
"gateway": "rebailcapital" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Rebilly |
"gateway": "Rebilly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Recurly |
"gateway": "recurly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Reddot |
"gateway": "reddotpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Rede |
"gateway": "rede" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Redsys |
"gateway": "redsys" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Reepay |
"gateway": "reepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| RocketGate |
"gateway": "rocketgate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Rootline |
"gateway": "rootline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Russian Standard Bank |
"gateway": "rsb" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Ryft |
"gateway": "ryft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Safepay |
"gateway": "safepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Saferpay |
"gateway": "worldlinesaferpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Safexpay |
"gateway": "safexpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Sberbank |
"gateway": "sberbank" "gatewayMerchantId": "YOUR_ORGANIZATION_NAME" |
| SEB Baltic |
"gateway": "sebbaltic" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SEBES Technology |
"gateway": "sebes" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SecurePay |
"gateway": "securepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Sense Bank |
"gateway": "sensebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SensePass |
"gateway": "sensepass" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Servicios Digitales Popular S.A. |
"gateway": "pagosazul" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Shift4 |
"gateway": "shift4payments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Shiji Group |
"gateway": "shijipaymentsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SH Start High |
"gateway": "shstartpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| shvarenapay |
"gateway": "shvarenapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| simbasoft |
"gateway": "simbasoft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Sipay |
"gateway": "sipay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SmartPay |
"gateway": "smartpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Softbank Payment Service |
"gateway": "sbps" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Softtouch POS and Payments |
"gateway": "softtouch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Liso |
"gateway": "solid" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Sony Payment Services |
"gateway": "sonypaymentservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Splitit |
"gateway": "splitit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Spreedly |
"gateway": "spreedly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Cuadrado |
"gateway": "square" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SredaPay |
"gateway": "sredapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SSLCOMMERZ |
"gateway": "sslcommerz" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Stancer |
"gateway": "stancer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Stripe |
"gateway": "stripe" "stripe:version": "2018-10-31" "stripe:publishableKey": "YOUR_PUBLIC_STRIPE_KEY" |
| SUMIT |
"gateway": "sumit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Suntech |
"gateway": "esafe" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Pagos con Surfboard |
"gateway": "surfboard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Svea Bank |
"gateway": "svea" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Swedbank Baltic |
"gateway": "swedbankbaltic" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Swedbank Pay |
"gateway": "payexswedbankpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| TabaPay |
"gateway": "tabapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| TapPay (Cherri Tech) |
"gateway": "tappay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| TapPayments |
"gateway": "tappayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| tarlanpayments |
"gateway": "tarlanpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Enlace de TAS |
"gateway": "taslink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Tatra banka (CardPay) |
"gateway": "tatrabanka" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| TEKO |
"gateway": "teko" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| theMAP |
"gateway": "themap" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Till Payments |
"gateway": "tillpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Time Project LLC |
"gateway": "timeproject" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Tinkoff |
"gateway": "tinkoff" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| TIPTOP PAY |
"gateway": "tiptoppay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| TPay |
"gateway": "tpaycom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| TPay.com |
"gateway": "tpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Transact Campus |
"gateway": "transactcampus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Transact Pro |
"gateway": "transactpro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Red de servicios de transacciones |
"gateway": "tns" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Transpayrent |
"gateway": "transpayrent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Tranzila |
"gateway": "tranzila" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Tranzzo |
"gateway": "tranzzo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Tribe Payments |
"gateway": "tribepayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Truevo |
"gateway": "truevo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| TrustPay |
"gateway": "trustpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Trust Payments |
"gateway": "trustpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Atún |
"gateway": "tuna" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| 2can&ibox |
"gateway": "twocan" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| UAPAY |
"gateway": "uapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| UBRR |
"gateway": "ubrrpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Ukrcardpay |
"gateway": "ukrcardpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| UkrGasBank Pay |
"gateway": "ukrgasbankpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Unibank OJSC |
"gateway": "unibankcheckout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| unitedfinancialcorporation |
"gateway": "unitedfinancialcorporation" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Uniteller |
"gateway": "uniteller" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Unitpay |
"gateway": "unitpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Unlimint |
"gateway": "unlimint" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Unzer |
"gateway": "unzer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Unzer Austria |
"gateway": "unzeraustria" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| UPC |
"gateway": "upc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Upgate |
"gateway": "upgate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| USAePay |
"gateway": "usaepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| UseePay |
"gateway": "useepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| USIO, Inc. |
"gateway": "usio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Valitor |
"gateway": "valitor" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| value.io |
"gateway": "inspirecommerce" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Vanco |
"gateway": "vanco" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| VantagePay |
"gateway": "vantagepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Vantiv |
"gateway": "vantiv" "vantiv:merchantPayPageId": "YOUR_PAY_PAGE_ID" "vantiv:merchantOrderId": "YOUR_ORDER_ID" "vantiv:merchantTransactionId": "YOUR_TRANSACTION_ID" "vantiv:merchantReportGroup": "*web" |
| Vayapay |
"gateway": "vayapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| Vendo |
"gateway": "vendoservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Verestro |
"gateway": "verestro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Seguridad muy buena |
"gateway": "verygoodsecurity" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Victoriabank |
"gateway": "victoriabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Vindicia |
"gateway": "vindicia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Viva Wallet |
"gateway": "vivawallet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| VTEX |
"gateway": "vtex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Waffo |
"gateway": "waffo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Wallee |
"gateway": "wallee" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Walletdoc |
"gateway": "walletdoc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Walletto |
"gateway": "walletto" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| WayForPay |
"gateway": "wayforpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| WEAT |
"gateway": "weatpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| WhenThen |
"gateway": "whenthen" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Windcave |
"gateway": "windcave" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Wirebank |
"gateway": "wirebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Wirecard |
"gateway": "wirecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| WOOPPAY |
"gateway": "wooppay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| WooshPay |
"gateway": "swooshtransfer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Worldline (GlobalCollect) |
"gateway": "globalcollect" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Worldline - Ingenico (WL Online Checkout) |
"gateway": "worldlineingenicoogone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Worldline Nordics (Worldline Online Checkout) |
"gateway": "worldlineonlinecheckout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Worldline Sips |
"gateway": "wlsips" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Worldnet |
"gateway": "worldnet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Worldpay |
"gateway": "worldpay" "gatewayMerchantId": "YOUR_WORLDPAY_MERCHANT_ID" |
| Wpay |
"gateway": "wpayaus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| WSPay |
"gateway": "wspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| xMoney |
"gateway": "xmoneypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| XPATE |
"gateway": "xpate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| xpay |
"gateway": "xpaycomua" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| XPay by PostEx |
"gateway": "xpaybypostex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| YabandPay B.V. |
"gateway": "yabandpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Sistema de pago YIĞIM |
"gateway": "yigim" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" No hay documentación para desarrolladores disponible |
| ЮKassa (YooKassa) |
"gateway": "yoomoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Yuno |
"gateway": "yuno" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Crédito Z |
"gateway": "zcredit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Zalopay |
"gateway": "zalopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ZEN.com |
"gateway": "zen" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Zest |
"gateway": "zestpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Zuora |
"gateway": "zuora" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
El tipo de tokenización PAYMENT_GATEWAY es la implementación más habitual del método de pago con tarjeta en la API de Google Pay. Si tu proveedor de pagos no es compatible, es posible que puedas aceptar Google Pay mediante una integración DIRECT. Para obtener más información, consulta la
documentación sobre la tokenización directa.
Definir las redes de tarjetas de pago admitidas
Define las redes de tarjetas que acepta tu aplicación.
Kotlin
private val allowedCardNetworks = JSONArray(listOf( "AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"))
Java
private static JSONArray getAllowedCardNetworks() { return new JSONArray() .put("AMEX") .put("DISCOVER") .put("INTERAC") .put("JCB") .put("MASTERCARD") .put("VISA"); }
La API de Google Pay puede devolver tarjetas registradas en tu cuenta (PAN_ONLY) o un token de dispositivo en un dispositivo Android autenticado con un criptograma 3-D Secure (CRYPTOGRAM_3DS). Puedes configurar la API para que devuelva los métodos que admite tu aplicación.
Antes de configurar allowedCardAuthMethods, confirma con tu procesador de pagos y tu adquirente si se admiten tokens de dispositivo (CRYPTOGRAM_3DS) en tu región.
Kotlin
private val allowedCardAuthMethods = JSONArray(listOf( "PAN_ONLY", "CRYPTOGRAM_3DS"))
Java
private static JSONArray getAllowedCardAuthMethods() { return new JSONArray() .put("PAN_ONLY") .put("CRYPTOGRAM_3DS"); }
Para obtener más información, consulta la
documentación de referencia del
objeto CardParameters. Para obtener información sobre la compatibilidad con tokens de dispositivos Android, ponte en contacto con tu pasarela o procesador para saber qué redes de tarjetas se admiten.
Describe los métodos de pago que permites
Para describir la compatibilidad de tu aplicación con el método de pago CARD, combina los métodos de autenticación y las redes de tarjetas admitidos.
Kotlin
private fun baseCardPaymentMethod(): JSONObject = JSONObject() .put("type", "CARD") .put("parameters", JSONObject() .put("allowedAuthMethods", allowedCardAuthMethods) .put("allowedCardNetworks", allowedCardNetworks) .put("billingAddressRequired", true) .put("billingAddressParameters", JSONObject() .put("format", "FULL") ) )
Java
private static JSONObject getBaseCardPaymentMethod() throws JSONException { return new JSONObject() .put("type", "CARD") .put("parameters", new JSONObject() .put("allowedAuthMethods", getAllowedCardAuthMethods()) .put("allowedCardNetworks", getAllowedCardNetworks()) .put("billingAddressRequired", true) .put("billingAddressParameters", new JSONObject() .put("format", "FULL") ) ); }
Amplía la configuración con información sobre cómo tokenizar el método de pago.
Kotlin
private val cardPaymentMethod: JSONObject = baseCardPaymentMethod() .put("tokenizationSpecification", gatewayTokenizationSpecification)
Java
private static JSONObject getCardPaymentMethod() throws JSONException { return getBaseCardPaymentMethod() .put("tokenizationSpecification", getGatewayTokenizationSpecification()); }
Para obtener más información, consulta la
documentación de referencia del
objeto CardParameters.
Paso 2: Crea una instancia de PaymentsClient
Crea una instancia de
PaymentsClient
para interactuar con la API de Google Pay.
Kotlin
fun createPaymentsClient(context: Context): PaymentsClient { val walletOptions = Wallet.WalletOptions.Builder() .setEnvironment(Constants.PAYMENTS_ENVIRONMENT) .build() return Wallet.getPaymentsClient(context, walletOptions) }
Java
public static PaymentsClient createPaymentsClient(Context context) { Wallet.WalletOptions walletOptions = new Wallet.WalletOptions.Builder().setEnvironment(Constants.PAYMENTS_ENVIRONMENT).build(); return Wallet.getPaymentsClient(context, walletOptions); }
Paso 3: Determina si se puede pagar con la API Google Pay
Añade los métodos de pago permitidos al objeto de solicitud base con el siguiente fragmento de código:
Kotlin
fun isReadyToPayRequest(): JSONObject? = try { baseRequest .put("allowedPaymentMethods", JSONArray().put(baseCardPaymentMethod())) } catch (e: JSONException) { null }
Java
public static JSONObject getIsReadyToPayRequest() { try { return getBaseRequest() .put("allowedPaymentMethods", new JSONArray().put(getBaseCardPaymentMethod())); } catch (JSONException e) { return null; } }
Antes de mostrar el botón de Google Pay, llama a la API isReadyToPay para determinar si el usuario puede hacer pagos con la API de Google Pay. Para ver una lista completa de las propiedades de configuración, consulta la documentación del objeto JSON IsReadyToPayRequest.
Kotlin
private fun possiblyShowGooglePayButton() { val isReadyToPayJson = PaymentsUtil.isReadyToPayRequest() ?: return val request = IsReadyToPayRequest.fromJson(isReadyToPayJson.toString()) ?: return // The call to isReadyToPay is asynchronous and returns a Task. We need to provide an // OnCompleteListener to be triggered when the result of the call is known. val task = paymentsClient.isReadyToPay(request) task.addOnCompleteListener { completedTask -> try { completedTask.getResult(ApiException::class.java)?.let(::setGooglePayAvailable) } catch (exception: ApiException) { // Process error Log.w("isReadyToPay failed", exception) } } }
Kotlin
(corrutinas)
private suspend fun fetchCanUseGooglePay(): Boolean { val request = IsReadyToPayRequest.fromJson(PaymentsUtil.isReadyToPayRequest().toString()) return paymentsClient.isReadyToPay(request).await() }
Java
private void possiblyShowGooglePayButton() { final Optional<JSONObject> isReadyToPayJson = PaymentsUtil.getIsReadyToPayRequest(); if (!isReadyToPayJson.isPresent()) { return; } // The call to isReadyToPay is asynchronous and returns a Task. We need to provide an // OnCompleteListener to be triggered when the result of the call is known. IsReadyToPayRequest request = IsReadyToPayRequest.fromJson(isReadyToPayJson.get().toString()); Task<Boolean> task = paymentsClient.isReadyToPay(request); task.addOnCompleteListener(this, new OnCompleteListener<Boolean>() { @Override public void onComplete(@NonNull Task<Boolean> task) { if (task.isSuccessful()) { setGooglePayAvailable(task.getResult()); } else { Log.w("isReadyToPay failed", task.getException()); } } }); }
Paso 4: Añade un botón de pago de Google Pay
Añade un botón de pago de Google Pay a tu aplicación para animar a los compradores a completar sus compras con métodos de pago compatibles con la API de Google Pay y tu aplicación.
Para obtener más información sobre los tipos de botones, los colores y los requisitos de visualización disponibles, consulta la referencia de ButtonOptions.
Añade el diseño PayButton al diseño de la tramitación de la compra de tu aplicación:
Kotlin
(Compose)
PayButton( modifier = Modifier .testTag("payButton") .fillMaxWidth(), onClick = onGooglePayButtonClick, allowedPaymentMethods = PaymentsUtil.allowedPaymentMethods.toString()
XML
<com.google.android.gms.wallet.button.PayButton android:id="@+id/googlePayButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="20dp"/>
Si añade el botón de Google Pay mediante XML...
Ve a la actividad de Android e inicializa el botón de Google Pay junto con otros elementos de la interfaz de usuario:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Use view binding to access the UI elements layout = ActivityCheckoutBinding.inflate(layoutInflater) setContentView(layout.root) // Setup buttons googlePayButton = layout.googlePayButton googlePayButton.initialize( ButtonOptions.newBuilder() .setAllowedPaymentMethods(PaymentsUtil.allowedPaymentMethods.toString()).build() ) googlePayButton.setOnClickListener { requestPayment() } // Check Google Pay availability model.canUseGooglePay.observe(this, Observer(::setGooglePayAvailable)) }
Java
private void initializeUi() { // Use view binding to access the UI elements ActivityCheckoutBinding layoutBinding = ActivityCheckoutBinding.inflate(getLayoutInflater()); setContentView(layoutBinding.getRoot()); // The Google Pay button is a layout file – take the root view googlePayButton = layoutBinding.googlePayButton; try { googlePayButton.initialize( ButtonOptions.newBuilder() .setAllowedPaymentMethods(PaymentsUtil.getAllowedPaymentMethods().toString()).build() ); googlePayButton.setOnClickListener(this::requestPayment); } catch (JSONException e) { // Keep Google Pay button hidden (consider logging this to your app analytics service) } }
Paso 5: Crea un objeto PaymentDataRequest
Un PaymentDataRequestobjeto JSON
describe la información que solicitas a un pagador en una hoja de pago de Google Pay. Esto incluye
información sobre el precio de la transacción y el estado del precio proporcionado. Para obtener más información, consulta la documentación del objeto JSON TransactionInfo.
Los siguientes bloques añaden información sobre el comercio y la transacción al objeto PaymentDataRequest necesario para iniciar el proceso de pago con Google Pay.
Kotlin
private fun getTransactionInfo(price: String): JSONObject = JSONObject() .put("totalPrice", price) .put("totalPriceStatus", "FINAL") .put("countryCode", Constants.COUNTRY_CODE) .put("currencyCode", Constants.CURRENCY_CODE)
Java
private static JSONObject getTransactionInfo(String price) throws JSONException { return new JSONObject() .put("totalPrice", price) .put("totalPriceStatus", "FINAL") .put("countryCode", Constants.COUNTRY_CODE) .put("currencyCode", Constants.CURRENCY_CODE) .put("checkoutOption", "COMPLETE_IMMEDIATE_PURCHASE"); }
Kotlin
private val merchantInfo: JSONObject = JSONObject().put("merchantName", "Example Merchant")
Java
private static JSONObject getMerchantInfo() throws JSONException { return new JSONObject().put("merchantName", "Example Merchant"); }
Asigna tu objeto de solicitud base a un nuevo objeto JSON PaymentDataRequest.
A continuación, añade los métodos de pago admitidos por tu aplicación, como cualquier configuración de datos adicionales
esperados en la respuesta. Por último, añade información sobre la transacción y el comerciante que hace la solicitud:
Kotlin
fun getPaymentDataRequest(priceLabel: String): JSONObject = baseRequest .put("allowedPaymentMethods", allowedPaymentMethods) .put("transactionInfo", getTransactionInfo(priceLabel)) .put("merchantInfo", merchantInfo) .put("shippingAddressRequired", true) .put("shippingAddressParameters", JSONObject() .put("phoneNumberRequired", false) .put("allowedCountryCodes", JSONArray(listOf("US", "GB"))) )
Java
public static JSONObject getPaymentDataRequest(String priceLabel) { try { return PaymentsUtil.getBaseRequest() .put("allowedPaymentMethods", getAllowedPaymentMethods()) .put("transactionInfo", getTransactionInfo(priceLabel)) .put("merchantInfo", getMerchantInfo()) .put("shippingAddressRequired", true) .put("shippingAddressParameters", new JSONObject() .put("phoneNumberRequired", false) .put("allowedCountryCodes", new JSONArray(Constants.SHIPPING_SUPPORTED_COUNTRIES)) ); } catch (JSONException e) { return null; } }
El objeto PaymentDataRequest es un Parcelable que representa una solicitud de datos de pago. El PaymentDataRequest proporciona la información necesaria para admitir un pago.
Para obtener más información, consulta la documentación del objeto JSON PaymentDataRequest.
Paso 6: Inicia el proceso de pago con Google Pay
Para iniciar el proceso de pago, llama a la solicitud loadPaymentData con el objeto PaymentsClient. Esta llamada devuelve un objeto Task con el resultado de la operación.
Primero, crea la tarea loadPaymentData con la solicitud que has creado en el paso anterior:
Kotlin
fun getLoadPaymentDataTask(priceLabel: String): Task<PaymentData> { val paymentDataRequestJson = PaymentsUtil.getPaymentDataRequest(priceLabel) val request = PaymentDataRequest.fromJson(paymentDataRequestJson.toString()) return paymentsClient.loadPaymentData(request) }
Java
public Task<PaymentData> getLoadPaymentDataTask(String priceLabel) { JSONObject paymentDataRequestJson = PaymentsUtil.getPaymentDataRequest(priceLabel); if (paymentDataRequestJson == null) { return null; } PaymentDataRequest request = PaymentDataRequest.fromJson(paymentDataRequestJson.toString()); return paymentsClient.loadPaymentData(request); }
Para procesar el resultado, usa uno de los contratos de resultados de actividad
de la API. En este ejemplo se usa GetPaymentDataResult
que devuelve un objeto con información sobre la operación, además del resultado en sí:
Kotlin
private val paymentDataLauncher = registerForActivityResult(GetPaymentDataResult()) { taskResult -> when (taskResult.status.statusCode) { CommonStatusCodes.SUCCESS -> { taskResult.result!!.let { Log.i("Google Pay result:", it.toJson()) model.setPaymentData(it) } } //CommonStatusCodes.CANCELED -> The user canceled //CommonStatusCodes.DEVELOPER_ERROR -> The API returned an error (it.status: Status) //else -> Handle internal and other unexpected errors } }
Java
private final ActivityResultLauncher<Task<PaymentData>> paymentDataLauncher = registerForActivityResult(new GetPaymentDataResult(), result -> { int statusCode = result.getStatus().getStatusCode(); switch (statusCode) { case CommonStatusCodes.SUCCESS: handlePaymentSuccess(result.getResult()); break; //case CommonStatusCodes.CANCELED: The user canceled case CommonStatusCodes.DEVELOPER_ERROR: handleError(statusCode, result.getStatus().getStatusMessage()); break; default: handleError(statusCode, "Unexpected non API" + " exception when trying to deliver the task result to an activity!"); break; } });
Antes de mostrar al usuario una confirmación de su compra, extrae el token de pago del objeto de resultado PaymentData y úsalo para crear la transacción de pago con tu pasarela.
Para obtener más información sobre el objeto de resultado, consulta la
referencia del objeto JSON PaymentData.
Ahora, usa el launcher de resultados de actividad y la tarea para mostrar el selector de pagos de Google Pay:
Kotlin
private fun requestPayment() { val task = model.getLoadPaymentDataTask(priceLabel = "50.2") task.addOnCompleteListener(paymentDataLauncher::launch) }
Kotlin
(corrutinas)
private fun requestPayment() { lifecycleScope.launch { val task = model.getLoadPaymentDataTask(priceLabel = "50.2") paymentDataLauncher.launch(task.awaitTask()) } }
Java
public void requestPayment(View view) { // The price provided to the API should include taxes and shipping. final Task<PaymentData> task = model.getLoadPaymentDataTask("50.2"); task.addOnCompleteListener(paymentDataLauncher::launch); }
Analizar todos los datos en conjunto
El siguiente fragmento muestra un ejemplo completo de un proyecto configurado correctamente. Para ver los pasos de configuración a nivel de proyecto, consulta Configurar tu proyecto.
Kotlin
Actividad
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay.activity import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.viewModels import androidx.compose.runtime.getValue import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import com.google.android.gms.common.api.CommonStatusCodes import com.google.android.gms.wallet.contract.TaskResultContracts.GetPaymentDataResult import com.google.android.gms.samples.pay.R import com.google.android.gms.samples.pay.ui.ProductScreen import com.google.android.gms.samples.pay.viewmodel.CheckoutViewModel import com.google.android.gms.samples.pay.viewmodel.PaymentUiState import com.google.android.gms.samples.pay.viewmodel.awaitTask import kotlinx.coroutines.launch class CheckoutActivity : ComponentActivity() { private val paymentDataLauncher = registerForActivityResult(GetPaymentDataResult()) { taskResult -> when (taskResult.status.statusCode) { CommonStatusCodes.SUCCESS -> { taskResult.result!!.let { Log.i("Google Pay result:", it.toJson()) model.setPaymentData(it) } } //CommonStatusCodes.CANCELED -> The user canceled //CommonStatusCodes.DEVELOPER_ERROR -> The API returned an error (it.status: Status) //else -> Handle internal and other unexpected errors } } private val model: CheckoutViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val payState: PaymentUiState by model.paymentUiState.collectAsStateWithLifecycle() ProductScreen( title = "Men's Tech Shell Full-Zip", description = "A versatile full-zip that you can wear all day long and even...", price = "$50.20", image = R.drawable.ts_10_11019a, payUiState = payState, onGooglePayButtonClick = this::requestPayment, ) } } private fun requestPayment() { val task = model.getLoadPaymentDataTask(priceLabel = "50.2") task.addOnCompleteListener(paymentDataLauncher::launch) } }
Util
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay.util import android.content.Context import com.google.android.gms.samples.pay.Constants import com.google.android.gms.wallet.PaymentsClient import com.google.android.gms.wallet.Wallet import org.json.JSONArray import org.json.JSONException import org.json.JSONObject import java.math.BigDecimal import java.math.RoundingMode /** * Contains helper static methods for dealing with the Payments API. * * Many of the parameters used in the code are optional and are set here merely to call out their * existence. Please consult the documentation to learn more and feel free to remove ones not * relevant to your implementation. */ object PaymentsUtil { /** * Create a Google Pay API base request object with properties used in all requests. * * @return Google Pay API base request object. * @throws JSONException */ private val baseRequest = JSONObject() .put("apiVersion", 2) .put("apiVersionMinor", 0) /** * Gateway Integration: Identify your gateway and your app's gateway merchant identifier. * * * The Google Pay API response will return an encrypted payment method capable of being charged * by a supported gateway after payer authorization. * * * TODO: Check with your gateway on the parameters to pass and modify them in Constants.java. * * @return Payment data tokenization for the CARD payment method. * @throws JSONException * See [PaymentMethodTokenizationSpecification](https://developers.google.com/pay/api/android/reference/object.PaymentMethodTokenizationSpecification) */ private val gatewayTokenizationSpecification: JSONObject = JSONObject() .put("type", "PAYMENT_GATEWAY") .put("parameters", JSONObject(Constants.PAYMENT_GATEWAY_TOKENIZATION_PARAMETERS)) /** * Card networks supported by your app and your gateway. * * * TODO: Confirm card networks supported by your app and gateway & update in Constants.java. * * @return Allowed card networks * See [CardParameters](https://developers.google.com/pay/api/android/reference/object.CardParameters) */ private val allowedCardNetworks = JSONArray(Constants.SUPPORTED_NETWORKS) /** * Card authentication methods supported by your app and your gateway. * * * TODO: Confirm your processor supports Android device tokens on your supported card networks * and make updates in Constants.java. * * @return Allowed card authentication methods. * See [CardParameters](https://developers.google.com/pay/api/android/reference/object.CardParameters) */ private val allowedCardAuthMethods = JSONArray(Constants.SUPPORTED_METHODS) /** * Describe your app's support for the CARD payment method. * * * The provided properties are applicable to both an IsReadyToPayRequest and a * PaymentDataRequest. * * @return A CARD PaymentMethod object describing accepted cards. * @throws JSONException * See [PaymentMethod](https://developers.google.com/pay/api/android/reference/object.PaymentMethod) */ // Optionally, you can add billing address/phone number associated with a CARD payment method. private fun baseCardPaymentMethod(): JSONObject = JSONObject() .put("type", "CARD") .put("parameters", JSONObject() .put("allowedAuthMethods", allowedCardAuthMethods) .put("allowedCardNetworks", allowedCardNetworks) .put("billingAddressRequired", true) .put("billingAddressParameters", JSONObject() .put("format", "FULL") ) ) /** * Describe the expected returned payment data for the CARD payment method * * @return A CARD PaymentMethod describing accepted cards and optional fields. * @throws JSONException * See [PaymentMethod](https://developers.google.com/pay/api/android/reference/object.PaymentMethod) */ private val cardPaymentMethod: JSONObject = baseCardPaymentMethod() .put("tokenizationSpecification", gatewayTokenizationSpecification) val allowedPaymentMethods: JSONArray = JSONArray().put(cardPaymentMethod) /** * An object describing accepted forms of payment by your app, used to determine a viewer's * readiness to pay. * * @return API version and payment methods supported by the app. * See [IsReadyToPayRequest](https://developers.google.com/pay/api/android/reference/object.IsReadyToPayRequest) */ fun isReadyToPayRequest(): JSONObject? = try { baseRequest .put("allowedPaymentMethods", JSONArray().put(baseCardPaymentMethod())) } catch (e: JSONException) { null } /** * Information about the merchant requesting payment information * * @return Information about the merchant. * @throws JSONException * See [MerchantInfo](https://developers.google.com/pay/api/android/reference/object.MerchantInfo) */ private val merchantInfo: JSONObject = JSONObject().put("merchantName", "Example Merchant") /** * Creates an instance of [PaymentsClient] for use in an [Context] using the * environment and theme set in [Constants]. * * @param context from the caller activity. */ fun createPaymentsClient(context: Context): PaymentsClient { val walletOptions = Wallet.WalletOptions.Builder() .setEnvironment(Constants.PAYMENTS_ENVIRONMENT) .build() return Wallet.getPaymentsClient(context, walletOptions) } /** * Provide Google Pay API with a payment amount, currency, and amount status. * * @return information about the requested payment. * @throws JSONException * See [TransactionInfo](https://developers.google.com/pay/api/android/reference/object.TransactionInfo) */ private fun getTransactionInfo(price: String): JSONObject = JSONObject() .put("totalPrice", price) .put("totalPriceStatus", "FINAL") .put("countryCode", Constants.COUNTRY_CODE) .put("currencyCode", Constants.CURRENCY_CODE) /** * An object describing information requested in a Google Pay payment sheet * * @return Payment data expected by your app. * See [PaymentDataRequest](https://developers.google.com/pay/api/android/reference/object.PaymentDataRequest) */ fun getPaymentDataRequest(priceLabel: String): JSONObject = baseRequest .put("allowedPaymentMethods", allowedPaymentMethods) .put("transactionInfo", getTransactionInfo(priceLabel)) .put("merchantInfo", merchantInfo) .put("shippingAddressRequired", true) .put("shippingAddressParameters", JSONObject() .put("phoneNumberRequired", false) .put("allowedCountryCodes", JSONArray(listOf("US", "GB"))) ) }
Ver modelo
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay.viewmodel import android.app.Application import android.util.Log import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope import com.google.android.gms.common.api.ApiException import com.google.android.gms.common.api.CommonStatusCodes import com.google.android.gms.samples.pay.util.PaymentsUtil import com.google.android.gms.tasks.CancellationTokenSource import com.google.android.gms.tasks.Task import com.google.android.gms.wallet.IsReadyToPayRequest import com.google.android.gms.wallet.PaymentData import com.google.android.gms.wallet.PaymentDataRequest import com.google.android.gms.wallet.PaymentsClient import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.tasks.await import org.json.JSONException import org.json.JSONObject import java.util.concurrent.Executor import kotlin.coroutines.resume class CheckoutViewModel(application: Application) : AndroidViewModel(application) { private val _paymentUiState: MutableStateFlow<PaymentUiState> = MutableStateFlow(PaymentUiState.NotStarted) val paymentUiState: StateFlow<PaymentUiState> = _paymentUiState.asStateFlow() // A client for interacting with the Google Pay API. private val paymentsClient: PaymentsClient = PaymentsUtil.createPaymentsClient(application) init { viewModelScope.launch { verifyGooglePayReadiness() } } /** * Determine the user's ability to pay with a payment method supported by your app and display * a Google Pay payment button. ) */ private suspend fun verifyGooglePayReadiness() { val newUiState: PaymentUiState = try { if (fetchCanUseGooglePay()) { PaymentUiState.Available } else { PaymentUiState.Error(CommonStatusCodes.ERROR) } } catch (exception: ApiException) { PaymentUiState.Error(exception.statusCode, exception.message) } _paymentUiState.update { newUiState } } /** * Determine the user's ability to pay with a payment method supported by your app. ) */ private suspend fun fetchCanUseGooglePay(): Boolean { val request = IsReadyToPayRequest.fromJson(PaymentsUtil.isReadyToPayRequest().toString()) return paymentsClient.isReadyToPay(request).await() } /** * Creates a [Task] that starts the payment process with the transaction details included. * * @return a [Task] with the payment information. * @see [PaymentDataRequest](https://developers.google.com/android/reference/com/google/android/gms/wallet/PaymentsClient#loadPaymentData(com.google.android.gms.wallet.PaymentDataRequest) ) */ fun getLoadPaymentDataTask(priceLabel: String): Task<PaymentData> { val paymentDataRequestJson = PaymentsUtil.getPaymentDataRequest(priceLabel) val request = PaymentDataRequest.fromJson(paymentDataRequestJson.toString()) return paymentsClient.loadPaymentData(request) } /** * At this stage, the user has already seen a popup informing them an error occurred. Normally, * only logging is required. * * @param statusCode will hold the value of any constant from CommonStatusCode or one of the * WalletConstants.ERROR_CODE_* constants. * @see [ * Wallet Constants Library](https://developers.google.com/android/reference/com/google/android/gms/wallet/WalletConstants.constant-summary) */ private fun handleError(statusCode: Int, message: String?) { Log.e("Google Pay API error", "Error code: $statusCode, Message: $message") } fun setPaymentData(paymentData: PaymentData) { val payState = extractPaymentBillingName(paymentData)?.let { PaymentUiState.PaymentCompleted(payerName = it) } ?: PaymentUiState.Error(CommonStatusCodes.INTERNAL_ERROR) _paymentUiState.update { payState } } private fun extractPaymentBillingName(paymentData: PaymentData): String? { val paymentInformation = paymentData.toJson() try { // Token will be null if PaymentDataRequest was not constructed using fromJson(String). val paymentMethodData = JSONObject(paymentInformation).getJSONObject("paymentMethodData") val billingName = paymentMethodData.getJSONObject("info") .getJSONObject("billingAddress").getString("name") Log.d("BillingName", billingName) // Logging token string. Log.d( "Google Pay token", paymentMethodData .getJSONObject("tokenizationData") .getString("token") ) return billingName } catch (error: JSONException) { Log.e("handlePaymentSuccess", "Error: $error") } return null } } abstract class PaymentUiState internal constructor() { object NotStarted : PaymentUiState() object Available : PaymentUiState() class PaymentCompleted(val payerName: String) : PaymentUiState() class Error(val code: Int, val message: String? = null) : PaymentUiState() } suspend fun <T> Task<T>.awaitTask(cancellationTokenSource: CancellationTokenSource? = null): Task<T> { return if (isComplete) this else suspendCancellableCoroutine { cont -> // Run the callback directly to avoid unnecessarily scheduling on the main thread. addOnCompleteListener(DirectExecutor, cont::resume) cancellationTokenSource?.let { cancellationSource -> cont.invokeOnCancellation { cancellationSource.cancel() } } } } /** * An [Executor] that just directly executes the [Runnable]. */ private object DirectExecutor : Executor { override fun execute(r: Runnable) { r.run() } }
Constantes
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay import com.google.android.gms.wallet.WalletConstants /** * This file contains several constants you must edit before proceeding. * Please take a look at PaymentsUtil.java to see where the constants are used and to potentially * remove ones not relevant to your integration. * * * Required changes: * * 1. Update SUPPORTED_NETWORKS and SUPPORTED_METHODS if required (consult your processor if * unsure) * 1. Update CURRENCY_CODE to the currency you use. * 1. Update SHIPPING_SUPPORTED_COUNTRIES to list the countries where you currently ship. If this * is not applicable to your app, remove the relevant bits from PaymentsUtil.java. * 1. If you're integrating with your `PAYMENT_GATEWAY`, update * PAYMENT_GATEWAY_TOKENIZATION_NAME and PAYMENT_GATEWAY_TOKENIZATION_PARAMETERS per the * instructions they provided. You don't need to update DIRECT_TOKENIZATION_PUBLIC_KEY. * 1. If you're using `DIRECT` integration, please edit protocol version and public key as * per the instructions. */ object Constants { /** * Changing this to ENVIRONMENT_PRODUCTION will make the API return chargeable card information. * Please refer to the documentation to read about the required steps needed to enable * ENVIRONMENT_PRODUCTION. * * @value #PAYMENTS_ENVIRONMENT */ const val PAYMENTS_ENVIRONMENT = WalletConstants.ENVIRONMENT_TEST /** * The allowed networks to be requested from the API. If the user has cards from networks not * specified here in their account, these will not be offered for them to choose in the popup. * * @value #SUPPORTED_NETWORKS */ val SUPPORTED_NETWORKS = listOf( "AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA") /** * The Google Pay API may return cards on file on Google.com (PAN_ONLY) and/or a device token on * an Android device authenticated with a 3-D Secure cryptogram (CRYPTOGRAM_3DS). * * @value #SUPPORTED_METHODS */ val SUPPORTED_METHODS = listOf( "PAN_ONLY", "CRYPTOGRAM_3DS") /** * Required by the API, but not visible to the user. * * @value #COUNTRY_CODE Your local country */ const val COUNTRY_CODE = "US" /** * Required by the API, but not visible to the user. * * @value #CURRENCY_CODE Your local currency */ const val CURRENCY_CODE = "USD" /** * Supported countries for shipping (use ISO 3166-1 alpha-2 country codes). Relevant only when * requesting a shipping address. * * @value #SHIPPING_SUPPORTED_COUNTRIES */ val SHIPPING_SUPPORTED_COUNTRIES = listOf("US", "GB") /** * The name of your payment processor/gateway. Please refer to their documentation for more * information. * * @value #PAYMENT_GATEWAY_TOKENIZATION_NAME */ private const val PAYMENT_GATEWAY_TOKENIZATION_NAME = "example" /** * Custom parameters required by the processor/gateway. * In many cases, your processor / gateway will only require a gatewayMerchantId. * Please refer to your processor's documentation for more information. The number of parameters * required and their names vary depending on the processor. * * @value #PAYMENT_GATEWAY_TOKENIZATION_PARAMETERS */ val PAYMENT_GATEWAY_TOKENIZATION_PARAMETERS = mapOf( "gateway" to PAYMENT_GATEWAY_TOKENIZATION_NAME, "gatewayMerchantId" to "exampleGatewayMerchantId" ) /** * Only used for `DIRECT` tokenization. Can be removed when using `PAYMENT_GATEWAY` * tokenization. * * @value #DIRECT_TOKENIZATION_PUBLIC_KEY */ const val DIRECT_TOKENIZATION_PUBLIC_KEY = "REPLACE_ME" /** * Parameters required for `DIRECT` tokenization. * Only used for `DIRECT` tokenization. Can be removed when using `PAYMENT_GATEWAY` * tokenization. * * @value #DIRECT_TOKENIZATION_PARAMETERS */ val DIRECT_TOKENIZATION_PARAMETERS = mapOf( "protocolVersion" to "ECv1", "publicKey" to DIRECT_TOKENIZATION_PUBLIC_KEY ) }
Java
Actividad
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.ViewModelProvider; import com.google.android.gms.common.api.CommonStatusCodes; import com.google.android.gms.samples.pay.R; import com.google.android.gms.samples.pay.databinding.ActivityCheckoutBinding; import com.google.android.gms.samples.pay.util.PaymentsUtil; import com.google.android.gms.samples.pay.viewmodel.CheckoutViewModel; import com.google.android.gms.tasks.Task; import com.google.android.gms.wallet.PaymentData; import com.google.android.gms.wallet.button.ButtonOptions; import com.google.android.gms.wallet.button.PayButton; import com.google.android.gms.wallet.contract.TaskResultContracts.GetPaymentDataResult; import org.json.JSONException; import org.json.JSONObject; import java.util.Locale; /** * Checkout implementation for the app */ public class CheckoutActivity extends AppCompatActivity { private CheckoutViewModel model; private PayButton googlePayButton; private final ActivityResultLauncher<Task<PaymentData>> paymentDataLauncher = registerForActivityResult(new GetPaymentDataResult(), result -> { int statusCode = result.getStatus().getStatusCode(); switch (statusCode) { case CommonStatusCodes.SUCCESS: handlePaymentSuccess(result.getResult()); break; //case CommonStatusCodes.CANCELED: The user canceled case CommonStatusCodes.DEVELOPER_ERROR: handleError(statusCode, result.getStatus().getStatusMessage()); break; default: handleError(statusCode, "Unexpected non API" + " exception when trying to deliver the task result to an activity!"); break; } }); /** * Initialize the Google Pay API on creation of the activity * * @see Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initializeUi(); // Check Google Pay availability model = new ViewModelProvider(this).get(CheckoutViewModel.class); model.canUseGooglePay.observe(this, this::setGooglePayAvailable); } private void initializeUi() { // Use view binding to access the UI elements ActivityCheckoutBinding layoutBinding = ActivityCheckoutBinding.inflate(getLayoutInflater()); setContentView(layoutBinding.getRoot()); // The Google Pay button is a layout file – take the root view googlePayButton = layoutBinding.googlePayButton; try { googlePayButton.initialize( ButtonOptions.newBuilder() .setAllowedPaymentMethods(PaymentsUtil.getAllowedPaymentMethods().toString()).build() ); googlePayButton.setOnClickListener(this::requestPayment); } catch (JSONException e) { // Keep Google Pay button hidden (consider logging this to your app analytics service) } } /** * If isReadyToPay returned {@code true}, show the button and hide the "checking" text. * Otherwise, notify the user that Google Pay is not available. Please adjust to fit in with * your current user flow. You are not required to explicitly let the user know if isReadyToPay * returns {@code false}. * * @param available isReadyToPay API response. */ private void setGooglePayAvailable(boolean available) { if (available) { googlePayButton.setVisibility(View.VISIBLE); } else { Toast.makeText(this, R.string.google_pay_status_unavailable, Toast.LENGTH_LONG).show(); } } public void requestPayment(View view) { // The price provided to the API should include taxes and shipping. final Task<PaymentData> task = model.getLoadPaymentDataTask("50.2"); task.addOnCompleteListener(paymentDataLauncher::launch); } /** * PaymentData response object contains the payment information, as well as any additional * requested information, such as billing and shipping address. * * @param paymentData A response object returned by Google after a payer approves payment. * @see <a href="https://developers.google.com/pay/api/android/reference/ * object#PaymentData">PaymentData</a> */ private void handlePaymentSuccess(PaymentData paymentData) { final String paymentInfo = paymentData.toJson(); try { JSONObject paymentMethodData = new JSONObject(paymentInfo).getJSONObject("paymentMethodData"); // If the gateway is set to "example", no payment information is returned - instead, the // token will only consist of "examplePaymentMethodToken". final JSONObject info = paymentMethodData.getJSONObject("info"); final String billingName = info.getJSONObject("billingAddress").getString("name"); Toast.makeText( this, getString(R.string.payments_show_name, billingName), Toast.LENGTH_LONG).show(); // Logging token string. Log.d("Google Pay token", paymentMethodData .getJSONObject("tokenizationData") .getString("token")); startActivity(new Intent(this, CheckoutSuccessActivity.class)); } catch (JSONException e) { Log.e("handlePaymentSuccess", "Error: " + e); } } /** * At this stage, the user has already seen a popup informing them an error occurred. Normally, * only logging is required. * * @param statusCode holds the value of any constant from CommonStatusCode or one of the * WalletConstants.ERROR_CODE_* constants. * @see <a href="https://developers.google.com/android/reference/com/google/android/gms/wallet/ * WalletConstants#constant-summary">Wallet Constants Library</a> */ private void handleError(int statusCode, @Nullable String message) { Log.e("loadPaymentData failed", String.format(Locale.getDefault(), "Error code: %d, Message: %s", statusCode, message)); } }
Actividad de éxito
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay.activity; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.samples.pay.databinding.ActivityCheckoutSuccessBinding; public class CheckoutSuccessActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCheckoutSuccessBinding layoutBinding = ActivityCheckoutSuccessBinding.inflate(getLayoutInflater()); setContentView(layoutBinding.getRoot()); } }
Util
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay.util; import android.content.Context; import com.google.android.gms.samples.pay.Constants; import com.google.android.gms.wallet.PaymentsClient; import com.google.android.gms.wallet.Wallet; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; /** * Contains helper static methods for dealing with the Payments API. * * <p>Many of the parameters used in the code are optional and are set here merely to call out their * existence. Please consult the documentation to learn more and feel free to remove ones not * relevant to your implementation. */ public class PaymentsUtil { /** * Create a Google Pay API base request object with properties used in all requests. * * @return Google Pay API base request object. * @throws JSONException if the object is malformed. */ private static JSONObject getBaseRequest() throws JSONException { return new JSONObject() .put("apiVersion", 2) .put("apiVersionMinor", 0); } /** * Creates an instance of {@link PaymentsClient} for use in an {@link Context} using the * environment and theme set in {@link Constants}. * * @param context is the caller's context. */ public static PaymentsClient createPaymentsClient(Context context) { Wallet.WalletOptions walletOptions = new Wallet.WalletOptions.Builder().setEnvironment(Constants.PAYMENTS_ENVIRONMENT).build(); return Wallet.getPaymentsClient(context, walletOptions); } /** * Gateway Integration: Identify your gateway and your app's gateway merchant identifier. * * <p>The Google Pay API response will return an encrypted payment method capable of being charged * by a supported gateway after payer authorization. * * <p>TODO: Check with your gateway on the parameters to pass and modify them in Constants.java. * * @return Payment data tokenization for the CARD payment method. * @throws JSONException if the object is malformed. * @see <a href= * "https://developers.google.com/pay/api/android/reference/object#PaymentMethodTokenizationSpecification">PaymentMethodTokenizationSpecification</a> */ private static JSONObject getGatewayTokenizationSpecification() throws JSONException { return new JSONObject() .put("type", "PAYMENT_GATEWAY") .put("parameters", new JSONObject() .put("gateway", "example") .put("gatewayMerchantId", "exampleGatewayMerchantId") ); } /** * {@code DIRECT} Integration: Decrypt a response directly on your servers. This configuration has * additional data security requirements from Google and additional PCI DSS compliance complexity. * * <p>Please refer to the documentation for more information about {@code DIRECT} integration. The * type of integration you use depends on your payment processor. * * @return Payment data tokenization for the CARD payment method. * @throws JSONException if the object is malformed. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#PaymentMethodTokenizationSpecification">PaymentMethodTokenizationSpecification</a> */ private static JSONObject getDirectTokenizationSpecification() throws JSONException, RuntimeException { return new JSONObject() .put("type", "DIRECT") .put("parameters", new JSONObject(Constants.DIRECT_TOKENIZATION_PARAMETERS)); } /** * Card networks supported by your app and your gateway. * * <p>TODO: Confirm card networks supported by your app and gateway & update in Constants.java. * * @return Allowed card networks * @see <a * href="https://developers.google.com/pay/api/android/reference/object#CardParameters">CardParameters</a> */ private static JSONArray getAllowedCardNetworks() { return new JSONArray(Constants.SUPPORTED_NETWORKS); } /** * Card authentication methods supported by your app and your gateway. * * <p>TODO: Confirm your processor supports Android device tokens on your supported card networks * and make updates in Constants.java. * * @return Allowed card authentication methods. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#CardParameters">CardParameters</a> */ private static JSONArray getAllowedCardAuthMethods() { return new JSONArray(Constants.SUPPORTED_METHODS); } /** * Describe your app's support for the CARD payment method. * * <p>The provided properties are applicable to both an IsReadyToPayRequest and a * PaymentDataRequest. * * @return A CARD PaymentMethod object describing accepted cards. * @throws JSONException if the object is malformed. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#PaymentMethod">PaymentMethod</a> */ private static JSONObject getBaseCardPaymentMethod() throws JSONException { return new JSONObject() .put("type", "CARD") .put("parameters", new JSONObject() .put("allowedAuthMethods", getAllowedCardAuthMethods()) .put("allowedCardNetworks", getAllowedCardNetworks()) .put("billingAddressRequired", true) .put("billingAddressParameters", new JSONObject() .put("format", "FULL") ) ); } /** * Describe the expected returned payment data for the CARD payment method * * @return A CARD PaymentMethod describing accepted cards and optional fields. * @throws JSONException if the object is malformed. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#PaymentMethod">PaymentMethod</a> */ private static JSONObject getCardPaymentMethod() throws JSONException { return getBaseCardPaymentMethod() .put("tokenizationSpecification", getGatewayTokenizationSpecification()); } /** * Return a collection of payment methods allowed to complete the operation with Google Pay. * * @return A JSONArray object with the list of payment methods. * @throws JSONException if the JSON object is malformed. */ public static JSONArray getAllowedPaymentMethods() throws JSONException { return new JSONArray().put(getCardPaymentMethod()); } /** * An object describing accepted forms of payment by your app, used to determine a viewer's * readiness to pay. * * @return API version and payment methods supported by the app. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#IsReadyToPayRequest">IsReadyToPayRequest</a> */ public static JSONObject getIsReadyToPayRequest() { try { return getBaseRequest() .put("allowedPaymentMethods", new JSONArray().put(getBaseCardPaymentMethod())); } catch (JSONException e) { return null; } } /** * Provide Google Pay API with a payment amount, currency, and amount status. * * @return information about the requested payment. * @throws JSONException if the object is malformed. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#TransactionInfo">TransactionInfo</a> */ private static JSONObject getTransactionInfo(String price) throws JSONException { return new JSONObject() .put("totalPrice", price) .put("totalPriceStatus", "FINAL") .put("countryCode", Constants.COUNTRY_CODE) .put("currencyCode", Constants.CURRENCY_CODE) .put("checkoutOption", "COMPLETE_IMMEDIATE_PURCHASE"); } /** * Information about the merchant requesting payment information * * @return Information about the merchant. * @throws JSONException if the object is malformed. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#MerchantInfo">MerchantInfo</a> */ private static JSONObject getMerchantInfo() throws JSONException { return new JSONObject().put("merchantName", "Example Merchant"); } /** * An object describing information requested in a Google Pay payment sheet * * @return Payment data expected by your app. * @see <a * href="https://developers.google.com/pay/api/android/reference/object#PaymentDataRequest">PaymentDataRequest</a> */ public static JSONObject getPaymentDataRequest(String priceLabel) { try { return PaymentsUtil.getBaseRequest() .put("allowedPaymentMethods", getAllowedPaymentMethods()) .put("transactionInfo", getTransactionInfo(priceLabel)) .put("merchantInfo", getMerchantInfo()) .put("shippingAddressRequired", true) .put("shippingAddressParameters", new JSONObject() .put("phoneNumberRequired", false) .put("allowedCountryCodes", new JSONArray(Constants.SHIPPING_SUPPORTED_COUNTRIES)) ); } catch (JSONException e) { return null; } } }
Ver modelo
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay.viewmodel; import android.app.Application; import android.util.Log; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.google.android.gms.samples.pay.util.PaymentsUtil; import com.google.android.gms.tasks.Task; import com.google.android.gms.wallet.IsReadyToPayRequest; import com.google.android.gms.wallet.PaymentData; import com.google.android.gms.wallet.PaymentDataRequest; import com.google.android.gms.wallet.PaymentsClient; import org.json.JSONObject; public class CheckoutViewModel extends AndroidViewModel { // A client for interacting with the Google Pay API. private final PaymentsClient paymentsClient; // LiveData with the result of whether the user can pay using Google Pay private final MutableLiveData<Boolean> _canUseGooglePay = new MutableLiveData<>(); public CheckoutViewModel(@NonNull Application application) { super(application); paymentsClient = PaymentsUtil.createPaymentsClient(application); fetchCanUseGooglePay(); } public final LiveData<Boolean> canUseGooglePay = _canUseGooglePay; /** * Determine the user's ability to pay with a payment method supported by your app and display * a Google Pay payment button. */ private void fetchCanUseGooglePay() { final JSONObject isReadyToPayJson = PaymentsUtil.getIsReadyToPayRequest(); if (isReadyToPayJson == null) { _canUseGooglePay.setValue(false); return; } // The call to isReadyToPay is asynchronous and returns a Task. We need to provide an // OnCompleteListener to be triggered when the result of the call is known. IsReadyToPayRequest request = IsReadyToPayRequest.fromJson(isReadyToPayJson.toString()); Task<Boolean> task = paymentsClient.isReadyToPay(request); task.addOnCompleteListener( completedTask -> { if (completedTask.isSuccessful()) { _canUseGooglePay.setValue(completedTask.getResult()); } else { Log.w("isReadyToPay failed", completedTask.getException()); _canUseGooglePay.setValue(false); } }); } /** * Creates a Task that starts the payment process with the transaction details included. * * @param priceLabel the price to show on the payment sheet. * @return a Task with the payment information. */ public Task<PaymentData> getLoadPaymentDataTask(String priceLabel) { JSONObject paymentDataRequestJson = PaymentsUtil.getPaymentDataRequest(priceLabel); if (paymentDataRequestJson == null) { return null; } PaymentDataRequest request = PaymentDataRequest.fromJson(paymentDataRequestJson.toString()); return paymentsClient.loadPaymentData(request); } }
Constantes
/* * Copyright 2024 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.gms.samples.pay; import com.google.android.gms.wallet.WalletConstants; import java.util.Arrays; import java.util.HashMap; import java.util.List; /** * This file contains several constants you must edit before proceeding. * Please take a look at PaymentsUtil.java to see where the constants are used and to potentially * remove ones not relevant to your integration. * * <p>Required changes: * <ol> * <li> Update SUPPORTED_NETWORKS and SUPPORTED_METHODS if required (consult your processor if * unsure) * <li> Update CURRENCY_CODE to the currency you use. * <li> Update SHIPPING_SUPPORTED_COUNTRIES to list the countries where you currently ship. If this * is not applicable to your app, remove the relevant bits from PaymentsUtil.java. * <li> If you're integrating with your {@code PAYMENT_GATEWAY}, update * PAYMENT_GATEWAY_TOKENIZATION_NAME and PAYMENT_GATEWAY_TOKENIZATION_PARAMETERS per the * instructions they provided. You don't need to update DIRECT_TOKENIZATION_PUBLIC_KEY. * <li> If you're using {@code DIRECT} integration, please edit protocol version and public key as * per the instructions. */ public class Constants { /** * Changing this to ENVIRONMENT_PRODUCTION will make the API return chargeable card information. * Please refer to the documentation to read about the required steps needed to enable * ENVIRONMENT_PRODUCTION. * * @value #PAYMENTS_ENVIRONMENT */ public static final int PAYMENTS_ENVIRONMENT = WalletConstants.ENVIRONMENT_TEST; /** * The allowed networks to be requested from the API. If the user has cards from networks not * specified here in their account, these will not be offered for them to choose in the popup. * * @value #SUPPORTED_NETWORKS */ public static final List<String> SUPPORTED_NETWORKS = Arrays.asList( "AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"); /** * The Google Pay API may return cards on file on Google.com (PAN_ONLY) and/or a device token on * an Android device authenticated with a 3-D Secure cryptogram (CRYPTOGRAM_3DS). * * @value #SUPPORTED_METHODS */ public static final List<String> SUPPORTED_METHODS = Arrays.asList( "PAN_ONLY", "CRYPTOGRAM_3DS"); /** * Required by the API, but not visible to the user. * * @value #COUNTRY_CODE Your local country */ public static final String COUNTRY_CODE = "US"; /** * Required by the API, but not visible to the user. * * @value #CURRENCY_CODE Your local currency */ public static final String CURRENCY_CODE = "USD"; /** * Supported countries for shipping (use ISO 3166-1 alpha-2 country codes). Relevant only when * requesting a shipping address. * * @value #SHIPPING_SUPPORTED_COUNTRIES */ public static final List<String> SHIPPING_SUPPORTED_COUNTRIES = Arrays.asList("US", "GB"); /** * The name of your payment processor/gateway. Please refer to their documentation for more * information. * * @value #PAYMENT_GATEWAY_TOKENIZATION_NAME */ public static final String PAYMENT_GATEWAY_TOKENIZATION_NAME = "example"; /** * Custom parameters required by the processor/gateway. * In many cases, your processor / gateway will only require a gatewayMerchantId. * Please refer to your processor's documentation for more information. The number of parameters * required and their names vary depending on the processor. * * @value #PAYMENT_GATEWAY_TOKENIZATION_PARAMETERS */ public static final HashMap<String, String> PAYMENT_GATEWAY_TOKENIZATION_PARAMETERS = new HashMap<String, String>() {{ put("gateway", PAYMENT_GATEWAY_TOKENIZATION_NAME); put("gatewayMerchantId", "exampleGatewayMerchantId"); // Your processor may require additional parameters. }}; /** * Only used for {@code DIRECT} tokenization. Can be removed when using {@code PAYMENT_GATEWAY} * tokenization. * * @value #DIRECT_TOKENIZATION_PUBLIC_KEY */ public static final String DIRECT_TOKENIZATION_PUBLIC_KEY = "REPLACE_ME"; /** * Parameters required for {@code DIRECT} tokenization. * Only used for {@code DIRECT} tokenization. Can be removed when using {@code PAYMENT_GATEWAY} * tokenization. * * @value #DIRECT_TOKENIZATION_PARAMETERS */ public static final HashMap<String, String> DIRECT_TOKENIZATION_PARAMETERS = new HashMap<String, String>() {{ put("protocolVersion", "ECv2"); put("publicKey", DIRECT_TOKENIZATION_PUBLIC_KEY); }}; }