برنامه آموزشی

برای افزودن Google Pay به برنامه Android خود و پیکربندی آن برای پذیرش کارت‌های پرداخت، مراحل این آموزش را دنبال کنید.

مرحله ۱: پیکربندی پرداخت خود را تعریف کنید

پیکربندی نسخه Google Pay API

نسخه «میانای برنامه‌سازی کاربردی Google Pay» را که برنامه‌تان استفاده می‌کند اعلام کنید. نسخه‌های اصلی و فرعی بر فیلدهای موردانتظار در هر شیء ارسال‌شده تأثیر می‌گذارند و در پاسخ گنجانده می‌شوند.

یک شیء درخواست پایه ایجاد کنید که حاوی دارایی‌هایی باشد که در همه اشیای درخواست دیگر وجود دارند.

Kotlin

private val baseRequest = JSONObject()
    .put("apiVersion", 2)
    .put("apiVersionMinor", 0)
    

جاوا

private static JSONObject getBaseRequest() throws JSONException {
  return new JSONObject()
      .put("apiVersion", 2)
      .put("apiVersionMinor", 0);
}
    

درخواست رمز پرداخت برای ارائه‌دهنده پرداخت

‫Google اطلاعات مربوط به کارت انتخابی پرداخت‌کننده را برای پردازش ایمن توسط ارائه‌دهنده پرداخت رمزگذاری می‌کند.

Kotlin

private fun gatewayTokenizationSpecification(): JSONObject {
    return JSONObject().apply {
        put("type", "PAYMENT_GATEWAY")
        put("parameters", JSONObject(mapOf(
                "gateway" to "example",
                "gatewayMerchantId" to "exampleGatewayMerchantId")))
    }
}
    

جاوا

private static JSONObject getGatewayTokenizationSpecification() throws JSONException {
  return new JSONObject()
      .put("type", "PAYMENT_GATEWAY")
      .put("parameters", new JSONObject()
          .put("gateway", "example")
          .put("gatewayMerchantId", "exampleGatewayMerchantId")
      );
}
    

‫example و exampleGatewayMerchantId را با مقادیر مناسب برای ارائه‌دهنده پرداختتان جایگزین کنید. از جدول زیر برای پیدا کردن مقادیر خاص gateway و gatewayMerchantId برای ارائه‌دهنده پرداختتان استفاده کنید:

دروازه پارامترها و اسناد
9Pay
  "gateway": "ninepay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

91APP PAYMENTS
  "gateway": "payments91app"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

A360
  "gateway": "a360"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

A-IT
  "gateway": "aitecomm"
  "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"

اسناد توسعه‌دهنده

African Payment Solution (PTY) Ltd t/a LekkaPay
  "gateway": "lekkapay"
  "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME"

اسناد توسعه‌دهنده

AI 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"

اسناد توسعه‌دهنده

Akua
  "gateway": "akua"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Anedot
  "gateway": "anedot"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

ApcoPay
  "gateway": "apcopay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

APPEX
  "gateway": "epos"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Armenian Card OJSC
  "gateway": "epgarca"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

AsiaBill
  "gateway": "asiabill"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

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"

اسناد توسعه‌دهنده

AXS
  "gateway": "axsasia"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

azericardgpay
  "gateway": "azericardgpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

B2B Soft Pay
  "gateway": "b2bsoftpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Bancstac
  "gateway": "bancstac"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Bank 131
  "gateway": "bank131"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Bank Muscat
  "gateway": "bankmuscat"
  "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"

اسناد توسعه‌دهنده

Better Payment Germany GmbH
  "gateway": "betterpayment"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Billing Systems
  "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"

اسناد توسعه‌دهنده

Bizon.one
  "gateway": "bizonone"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Bizzon
  "gateway": "bizzon"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Blackstone Merchant Services
  "gateway": "blackstone"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Blocks
  "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"

اسناد توسعه‌دهنده

Blusky Technology Services
  "gateway": "bluskysvcpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

BORICA
  "gateway": "borica"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

BoxPay
  "gateway": "boxpay"
  "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"

اسناد توسعه‌دهنده

Bonum
  "gateway": "bonumpsp"
  "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"

اسناد توسعه‌دهنده

Callpay
  "gateway": "callpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Card Access Services Pty Ltd
  "gateway": "cardaccess"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

CARDAQ
  "gateway": "cardaq"
  "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"

اسناد توسعه‌دهنده

Cashflows
  "gateway": "cashflowsgateway"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Cathay United Bank
  "gateway": "cathaybk"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

CCAvenue UAE
  "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"

اسناد توسعه‌دهنده

Centrobill LTD
  "gateway": "centrobill"
  "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"

اسناد توسعه‌دهنده

CIBPAY MMC
  "gateway": "cibpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

City Bank PLC
  "gateway": "citybank"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

CityPay
  "gateway": "citypay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Cloud9 Payment Gateway (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"

اسناد توسعه‌دهنده

Comax (Native Data LTD)
  "gateway": "comaxpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Computop
  "gateway": "computop"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

ConcordPay
  "gateway": "concordpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Conekta
  "gateway": "conektagpay"
  "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"

اسناد توسعه‌دهنده

Coriunder Limited
  "gateway": "coriunder"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Corvus Pay
  "gateway": "corvuspay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Credit2000
  "gateway": "credit2000"
  "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"

اسناد توسعه‌دهنده

Debia
  "gateway": "debia"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

DECTA
  "gateway": "decta"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

بدون سند توسعه‌دهنده

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"

بدون سند توسعه‌دهنده

Deutsche Bank – Merchant Solutions
  "gateway":
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

DG Financial Technology, Inc.
  "gateway": "veritrans"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Dibsy
  "gateway": "dibsy"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Digital Commerce Bank
  "gateway": "dcpayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Digital Finance
  "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"

اسناد توسعه‌دهنده

DOKU
  "gateway": "dokudjakarta"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Doremi-Tech
  "gateway": "doremitech"
  "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"

اسناد توسعه‌دهنده

EBizCharge
  "gateway": "ebizcharge"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

eCard
  "gateway": "ecard"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Ecart Pay
  "gateway": "ecartpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Ecentric Payment Systems
  "gateway": "ecentric"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Ecomm Merchant Solutions
  "gateway": "ecommmerchantsolutions"
  "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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

ECRYPT INC
  "gateway": "ecrypt"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

EdfaPay
  "gateway": "edfapay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

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"

اسناد توسعه‌دهنده

Encoded
  "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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

EuPlatesc - Europayment Services SRL
  "gateway": "euplatesc"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Euronet Merchant Services (epay)
  "gateway": "emspi"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Evertec Placetopay S.A.S
  "gateway": "placetopay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Evervault
  "gateway": "evervault"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

EveryPay S.A.
  "gateway": "EveryPay S.A."
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

EVONET
  "gateway": "cardinfolink"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

EVOPAY
  "gateway": "EVOPAY"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Evo Payment Gateway
  "gateway": "evopaymentgateway"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

exactly.com
  "gateway": "exactly"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Exact Payments
  "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"

اسناد توسعه‌دهنده

finby
  "gateway": "finby"
  "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"

اسناد توسعه‌دهنده

Finrelay
  "gateway": "finrelay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

FireAntPay
  "gateway": "fireantpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

First American by Deluxe
  "gateway": "firstpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Fiuu (formerly Razer Merchant Services & 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"

اسناد توسعه‌دهنده

Flintn
  "gateway": "flintn"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Flitt
  "gateway": "flitt"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Flow pagos
  "gateway": "flow_pay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Fluid Pay
  "gateway": "fluidpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Flyway
  "gateway": "flyway"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

FM Finance LTD
  "gateway": "fmfinanceltd"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

ForteBank
  "gateway": "fortebank"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Forward
  "gateway": "forward"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

FPAY
  "gateway": "fizzapay"
  "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"

اسناد توسعه‌دهنده

Frisbii
  "gateway": "Frisbii"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Frontstream
  "gateway": "frontstreampayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Fung Payments
  "gateway": "fungpayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Gatewell Payments
  "gateway": "gatewellpayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

GBPayments
  "gateway": "gbpayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

geidea
  "gateway": "geidea"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Getnet
  "gateway": "getnetpayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

GETTRX
  "gateway": "globalelectronictechnology"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Gkash
  "gateway": "gkash"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Global One Pay
  "gateway": "globalonepay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Global Payments
  "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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Gravity Payments
  "gateway": "gravitypayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Gr4vy
  "gateway": "gr4vy"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Gsurf Tecnologia em Pagamentos Eletrônicos Ltda
  "gateway": "gsurf"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Halyk Bank
  "gateway": "halykbank"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Helcim
  "gateway": "helcim"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

HiPay
  "gateway": "hipay"
  "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"

اسناد توسعه‌دهنده

iCredit
  "gateway": "rivhit"
  "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"

اسناد توسعه‌دهنده

Infofintech S A S
  "gateway": "infofintech"
  "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"

اسناد توسعه‌دهنده

intella
  "gateway": "intella"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

IntellectMoney
  "gateway": "intellectmoney"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Interactive Transaction Solutions
  "gateway": "interactivets"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Interpay
  "gateway": "interpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Interpay Llp
  "gateway": "interpaypro"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Interswitch Payment Gallery
  "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"

اسناد توسعه‌دهنده

iVeri Payment Technologies
  "gateway": "iveri"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

IXOPAY
  "gateway": "ixopay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

JagoLink Limited
  "gateway": "jagolink"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

JetPay
  "gateway": "jetpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

jpmmps
  "gateway": "jpmmps"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

JudoPay
  "gateway": "judopay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Juspay
  "gateway": "juspay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

JustiFi
  "gateway": "justifi"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

KapitalBank
  "gateway": "eCommerceKapitalBank"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Kassa
  "gateway": "kassacom"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

kassa24pay
  "gateway": "kassa24pay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Kazpost JSC
  "gateway": "qazpost"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

KimNganPay
  "gateway": "kimngan"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Kineox
  "gateway": "kineox"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Klix by 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"

اسناد توسعه‌دهنده

Kronor.io
  "gateway": "kronor"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Kyrgyzkommertsbank
  "gateway": "kkbpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Lapsa Payments
  "gateway": "lapsapayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Lemonway
  "gateway": "lemonway"
  "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"

اسناد توسعه‌دهنده

MADFIN TECH
  "gateway": "madfingate"
  "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"

اسناد توسعه‌دهنده

Mandarin
  "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"

اسناد توسعه‌دهنده

Maya
  "gateway": "mayaph"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Mellifera
  "gateway": "mellifera"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

MerchantE
  "gateway": "merchante"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Midtrans
  "gateway": "midtrans"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Menahel4uGoCredit
  "gateway": "menahel4ugocredit"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Merchant Warrior
  "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"

اسناد توسعه‌دهنده

Mobbex
  "gateway": "mobbex"
  "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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

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"

اسناد توسعه‌دهنده

Moyasar
  "gateway": "moyasar"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

MPay
  "gateway": "managepay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

MSolution
  "gateway": "msolution"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

mstartipg
  "gateway": "mstartipg"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

MTB BANK, PJSC
  "gateway": "mtb"
  "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"

اسناد توسعه‌دهنده

Mycar Pay
  "gateway": "mycarpay"
  "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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

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"

اسناد توسعه‌دهنده

NCR Voyix
  "gateway": "ncrpaymentsolutions"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Neolink
  "gateway": "neolinkprocessing"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Neon Pay
  "gateway": "neonpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Neopayment
  "gateway": "neopayment"
  "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 (formerly 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
  "gateway": "siavpos"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Nexi Easy
  "gateway": "easy"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

NMI
  "gateway": "gatewayservices"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

noon payments
  "gateway": "noonpayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Noqoody Pay
  "gateway": "noqoodypay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

North
  "gateway": "north"
  "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"

اسناد توسعه‌دهنده

OneGate
  "gateway": "onegate"
  "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 by Elavon
  "gateway": "opayoelavon"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

ONVO
  "gateway": "onvopay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Orient Commercial Joint Stock Bank (OCB)
  "gateway": "ocbcheckout"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

OrkestaPay
  "gateway": "orkestapay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Oschadbank
  "gateway": "oschadbank"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Outpayce
  "gateway": "outpayce"
  "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"

اسناد توسعه‌دهنده

Pay N Seconds
  "gateway": "paynseconds"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

PAY2M
  "gateway": "pay2m"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Payadmit
  "gateway": "payadmit"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Payarc
  "gateway": "payarc"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Paybis
  "gateway": "paybis"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PAYBOX VERIFONE
  "gateway": "paybox"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Pay.com
  "gateway": "paycom"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PAYCOMET
  "gateway": "paycomet"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Paycore
  "gateway": "twisto"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Paycross Ltd
  "gateway": "paycross"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayDo
  "gateway": "paydo"
  "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"

اسناد توسعه‌دهنده

Payku
  "gateway": "payku"
  "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"

اسناد توسعه‌دهنده

Payload
  "gateway": "payload"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Paymark
  "gateway": "paymark"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayMaster
  "gateway": "paymaster"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayMe
  "gateway": "payme"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Payment Fusion
  "gateway": "paymentfusion"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PaymentIQ
  "gateway": "worldlinedevcode"
  "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"

اسناد توسعه‌دهنده

PayNetWorx
  "gateway": "paynetworx"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayNext Inc
  "gateway": "paynext"
  "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"

اسناد توسعه‌دهنده

Payonomy Limited
  "gateway": "asperato"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Payoo
  "gateway": "payoo"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayPal Complete Payments
  "gateway": "paypalppcp"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Pay Theory
  "gateway": "paytheory"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayPlus
  "gateway": "payplus"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayPlusLLC
  "gateway": "payplusllc"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayPro Pvt Ltd
  "gateway": "paypro"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Payrails
  "gateway": "payrails"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayRex
  "gateway": "payrexhq"
  "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"

اسناد توسعه‌دهنده

Paystack Payments Limited
  "gateway": "paystack"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Pay360
  "gateway": "pay360"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayTabs
  "gateway": "paytabs"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

paytech
  "gateway": "paytechsolutions"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayTech Ukraine
  "gateway": "paytech"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Payten Payment Gateway
  "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 Russia
  "gateway": "payuru"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Payway
  "gateway": "payway"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Paywiser
  "gateway": "paywiser"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PayXpert
  "gateway": "payxpert"
  "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"

اسناد توسعه‌دهنده

PhotonPay
  "gateway": "photonpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Pifagorus Ltd
  "gateway": "pifagorusgate"
  "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"

اسناد توسعه‌دهنده

Planet
  "gateway": "cccpayment"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PlanetPay
  "gateway": "itcardpaymentservice"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Plategka.com
  "gateway": "plategkacom"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Platon
  "gateway": "platon"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Plexo
  "gateway": "plexouy"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Plexy
  "gateway": "plexy"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Pomelo
  "gateway": "pomelopay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Portmone
  "gateway": "portmonecom"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

PortPos
  "gateway": "portpos"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Powerpay
  "gateway": "powerpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Praxis
  "gateway": "praxistech"
  "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"

اسناد توسعه‌دهنده

QNB
  "gateway": "qnbpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

QorCommerce
  "gateway": "qorpay"
  "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"

اسناد توسعه‌دهنده

Rainforest
  "gateway": "rainforestpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

RapidCents
  "gateway": "rapidcentspay"
  "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"

اسناد توسعه‌دهنده

Revenue Monster
  "gateway": "revenuemonster"
  "gatewayMerchantId": "YOUR_REVOLUT_ORDER_TOKEN"

اسناد توسعه‌دهنده

Revolut
  "gateway": "revolut"
  "gatewayMerchantId": "YOUR_REVOLUT_ORDER_TOKEN"

اسناد توسعه‌دهنده

RocketGate
  "gateway": "rocketgate"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

revPAY (Revenue Harvest)
  "gateway": "revpay"
  "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"

اسناد توسعه‌دهنده

S.C. C SOLUTION S.R.L.
  "gateway": "plationline"
  "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"

اسناد توسعه‌دهنده

SIBS Romania
  "gateway": "romcard"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

simbasoft
  "gateway": "simbasoft"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

SimplePay Zrt
  "gateway": "simplepay"
  "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"

اسناد توسعه‌دهنده

Sohar International
  "gateway": "soharinternational"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Sokin
  "gateway": "sokinpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Solid
  "gateway": "solid"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Sony Payment Services
  "gateway": "sonypaymentservices"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

SPayN
  "gateway": "spayn"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Splitit
  "gateway": "splitit"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Spreedly
  "gateway": "spreedly"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Square
  "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"

اسناد توسعه‌دهنده

SUNBAY
  "gateway": "sunbay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Suntech
  "gateway": "esafe"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

SuperSonic Pay
  "gateway": "supersonicpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Surfboard Payments
  "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"

اسناد توسعه‌دهنده

TAS Link
  "gateway": "taslink"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Tatra banka (CardPay)
  "gateway": "tatrabanka"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Technology Partnership PGS
  "gateway": "technologypartnership"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

TEKO
  "gateway": "teko"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Telepay
  "gateway": "telerompay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Telr
  "gateway": "telr"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

theMAP
  "gateway": "themap"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

The Vaults International Payment L.L.C
  "gateway": "vaultspaygpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Till Payments
  "gateway": "tillpayments"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Tilopay
  "gateway": "tilopay"
  "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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

TIYN
  "gateway": "tiyn"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

TORA
  "gateway": "tora"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

TotalPay
  "gateway": "totalpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

TPay
  "gateway": "tpaycom"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

TPay.com
  "gateway": "tpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Trade and Development Bank of Mongolia(TDBM)
  "gateway": "tdbgpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Transact Campus
  "gateway": "transactcampus"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Transact Pro
  "gateway": "transactpro"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Transactworld CY
  "gateway": "TransactworldCY"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Transaction Services Network
  "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"

اسناد توسعه‌دهنده

Tuna
  "gateway": "tuna"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

TWPAYZ
  "gateway": "transactworlduk"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Tyler Technologies
  "gateway": "tylertech"
  "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"

اسناد توسعه‌دهنده

Unicorn Laboratories
  "gateway": "unicornlab"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Unipaas payments technologies
  "gateway": "unipaas"
  "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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

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"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Vendo
  "gateway": "vendoservices"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Verestro
  "gateway": "verestro"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Verifone Payments BV
  "gateway": "twocheckoutpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Verifone Web Pay
  "gateway": "verifonefinland"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Very Good Security
  "gateway": "verygoodsecurity"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Vesta
  "gateway": "vesta"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Victoriabank
  "gateway": "victoriabank"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Vindicia
  "gateway": "vindicia"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Vinr
  "gateway": "vinrpay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Viva Wallet
  "gateway": "vivawallet"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

VTEX
  "gateway": "vtex"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

W-HA
  "gateway": "wha"
  "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"

اسناد توسعه‌دهنده

Whitegate
  "gateway": "Whitegate"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

WHITELARK LTD
  "gateway": "whitelark"
  "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"

اسناد توسعه‌دهنده

Wondergate
  "gateway": "wondergate"
  "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"

اسناد توسعه‌دهنده

Xendit
  "gateway": "xendit"
  "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"

اسناد توسعه‌دهنده

Yapstone
  "gateway": "yapstone"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

YIĞIM Payment System
  "gateway": "yigim"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

ЮKassa (YooKassa)
  "gateway": "yoomoney"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Yuno
  "gateway": "yuno"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Z-credit
  "gateway": "zcredit"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Zalopay
  "gateway": "zalopay"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Zeller
  "gateway": "zeller"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

ZEN.com
  "gateway": "zen"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Zest
  "gateway": "zestpayment"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

Zift
  "gateway": "zift"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

هیچ سند توسعه‌دهنده‌ای دردسترس نیست

Zuora
  "gateway": "zuora"
  "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID"

اسناد توسعه‌دهنده

نوع نشانه‌گذاری PAYMENT_GATEWAY رایج‌ترین پیاده‌سازی فروشنده روش پرداخت با کارت در Google Pay API است. اگر ارائه‌دهنده پرداختتان پشتیبانی نمی‌شود، ممکن است بتوانید Google Pay را ازطریق یکپارچه‌سازی DIRECT بپذیرید. برای اطلاعات بیشتر، به مستندات رمزگذاری مستقیم مراجعه کنید.

تعریف شبکه‌های کارت پرداخت پشتیبانی‌شده

شبکه‌های کارتی را که برنامه‌تان می‌پذیرد تعریف کنید.

Kotlin

private val allowedCardNetworks = JSONArray(listOf(
        "AMEX",
        "DISCOVER",
        "INTERAC",
        "JCB",
        "MASTERCARD",
        "VISA"))
    

جاوا

private static JSONArray getAllowedCardNetworks() {
  return new JSONArray()
      .put("AMEX")
      .put("DISCOVER")
      .put("INTERAC")
      .put("JCB")
      .put("MASTERCARD")
      .put("VISA");
}
    

«میانای برنامه‌سازی کاربردی Google Pay» ممکن است کارت‌های موجود در پرونده حساب شما (PAN_ONLY) یا رمز دستگاه در دستگاه Android اصالت‌سنجی‌شده با رمزنگاری 3-D Secure (CRYPTOGRAM_3DS) را برگرداند. می‌توانید میانای برنامه‌سازی کاربردی را پیکربندی کنید تا روش‌هایی را که برنامه شما پشتیبانی می‌کند برگرداند.

قبل‌از تنظیم allowedCardAuthMethods، با پردازشگر پرداخت و خریدارتان تأیید کنید که آیا رمزهای دستگاه (CRYPTOGRAM_3DS) در منطقه شما پشتیبانی می‌شوند یا نه.

Kotlin

private val allowedCardAuthMethods = JSONArray(listOf(
        "PAN_ONLY",
        "CRYPTOGRAM_3DS"))
    

جاوا

private static JSONArray getAllowedCardAuthMethods() {
  return new JSONArray()
      .put("PAN_ONLY")
      .put("CRYPTOGRAM_3DS");
}
    

برای اطلاعات بیشتر، اسناد مرجع شیء CardParameters را ببینید. برای پشتیبانی از کد دستگاه Android، با درگاه یا پردازشگر خود برای شبکه‌های کارت پشتیبانی‌شده تماس بگیرید.

روش‌های پرداخت مجازتان را شرح دهید

برای توصیف پشتیبانی برنامه‌تان از روش پرداخت CARD، روش‌های اصالت‌سنجی پشتیبانی‌شده و شبکه‌های کارتتان را ترکیب کنید.

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")
                )
        )
    

جاوا

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")
          )
      );
}
    

پیکربندی‌تان را با اطلاعاتی درباره نحوه تبدیل روش پرداخت به رمز گسترش دهید.

Kotlin

private val cardPaymentMethod: JSONObject = baseCardPaymentMethod()
    .put("tokenizationSpecification", gatewayTokenizationSpecification)
    

جاوا

private static JSONObject getCardPaymentMethod() throws JSONException {
  return getBaseCardPaymentMethod()
      .put("tokenizationSpecification", getGatewayTokenizationSpecification());
}
    

برای اطلاعات بیشتر، اسناد مرجع شیء CardParameters را ببینید.

مرحله ۲: ایجاد نمونه PaymentsClient

PaymentsClient نمونه‌ای برای تعامل با Google Pay API ایجاد کنید.

Kotlin

fun createPaymentsClient(context: Context): PaymentsClient {
    val walletOptions = Wallet.WalletOptions.Builder()
        .setEnvironment(Constants.PAYMENTS_ENVIRONMENT)
        .build()

    return Wallet.getPaymentsClient(context, walletOptions)
}
    

جاوا

public static PaymentsClient createPaymentsClient(Context context) {
  Wallet.WalletOptions walletOptions =
      new Wallet.WalletOptions.Builder().setEnvironment(Constants.PAYMENTS_ENVIRONMENT).build();
  return Wallet.getPaymentsClient(context, walletOptions);
}
    

مرحله ۳: تعیین آمادگی برای پرداخت با Google Pay API

با تکه‌کد زیر، روش‌های پرداخت مجاز را به شیء درخواست پایه خود اضافه کنید:

Kotlin

fun isReadyToPayRequest(): JSONObject? =
    try {
        baseRequest
            .put("allowedPaymentMethods", JSONArray().put(baseCardPaymentMethod()))
    } catch (e: JSONException) {
        null
    }
    

جاوا

public static JSONObject getIsReadyToPayRequest() {
  try {
    return getBaseRequest()
        .put("allowedPaymentMethods", new JSONArray().put(getBaseCardPaymentMethod()));
  } catch (JSONException e) {
    return null;
  }
}
    

قبل‌از نمایش دکمه Google Pay، با isReadyToPay API تماس بگیرید تا مشخص کنید آیا کاربر می‌تواند با Google Pay API پرداخت انجام دهد یا نه. برای فهرست کامل دارایی‌های پیکربندی، IsReadyToPayRequest مستندات شیء JSON را ببینید.

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
(coroutines)

private suspend fun fetchCanUseGooglePay(): Boolean {
    val request = IsReadyToPayRequest.fromJson(PaymentsUtil.isReadyToPayRequest().toString())
    return paymentsClient.isReadyToPay(request).await()
}
      

جاوا

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

مرحله ۴: دکمه پرداخت Google Pay را اضافه کنید

دکمه پرداخت Google Pay را به برنامه‌تان اضافه کنید تا خریداران تشویق شوند با روش‌های پرداخت پشتیبانی‌شده توسط Google Pay API و برنامه‌تان تسویه‌حساب کنند.

برای کسب اطلاعات بیشتر درباره انواع دکمه‌های دردسترس، رنگ‌ها، و الزامات نمایش، به مرجع ButtonOptions مراجعه کنید.

چیدمان PayButton را به چیدمان تسویه‌حساب برنامه‌تان اضافه کنید:

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"/>
      

اگر دکمه Google Pay را بااستفاده از XML اضافه می‌کنید…

به فعالیت Android بروید و دکمه Google Pay را در کنار عناصر دیگر رابط کاربری مقداردهی اولیه کنید:

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))
}
      

جاوا

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)
  }
}
      

مرحله ۵: ایجاد شیء PaymentDataRequest

A PaymentDataRequest شیء JSON اطلاعاتی را که از پرداخت‌کننده در برگ پرداخت Google Pay درخواست می‌کنید توصیف می‌کند. این شامل اطلاعات مربوط به قیمت تراکنش و وضعیت قیمت ارائه‌شده می‌شود. برای اطلاعات بیشتر، به مستندات شیء JSON TransactionInfo مراجعه کنید.

بلوک‌های زیر اطلاعاتی درباره فروشنده و تراکنش به شیء PaymentDataRequest اضافه می‌کنند که برای شروع فرایند پرداخت با 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)
    

جاوا

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")
    

جاوا

private static JSONObject getMerchantInfo() throws JSONException {
  return new JSONObject().put("merchantName", "Example Merchant");
}
    

شیء درخواست پایه خود را به یک شیء JSON جدید PaymentDataRequest اختصاص دهید. سپس، روش‌های پرداخت پشتیبانی‌شده توسط برنامه‌تان را اضافه کنید، مثلاً هر پیکربندی داده‌های اضافی که در پاسخ انتظار می‌رود. درنهایت، اطلاعاتی درباره تراکنش و فروشنده‌ای که درخواست را انجام می‌دهد اضافه کنید:

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")))
        )
    

جاوا

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;
  }
}
    

شیء PaymentDataRequest یک Parcelable است که نشان‌دهنده درخواست داده‌های پرداخت است. PaymentDataRequest اطلاعاتی را ارائه می‌دهد که برای پشتیبانی از پرداخت ضروری است.

برای اطلاعات بیشتر، PaymentDataRequest مستندات شیء JSON را ببینید.

مرحله ۶: شروع فرایند پرداخت با Google Pay

برای شروع فرایند پرداخت، درخواست loadPaymentData را بااستفاده از PaymentsClient شیء فراخوانی کنید. این تماس یک Task شیء با نتیجه عملیات برمی‌گرداند.

ابتدا، بااستفاده از درخواست ایجادشده در مرحله قبلی، تکلیف loadPaymentData را ایجاد کنید:

Kotlin

fun getLoadPaymentDataTask(priceLabel: String): Task<PaymentData> {
    val paymentDataRequestJson = PaymentsUtil.getPaymentDataRequest(priceLabel)
    val request = PaymentDataRequest.fromJson(paymentDataRequestJson.toString())
    return paymentsClient.loadPaymentData(request)
}
    

جاوا

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);
}
    

برای پردازش نتیجه، از یکی از قراردادهای نتیجه فعالیت در API استفاده کنید. این مثال از GetPaymentDataResult استفاده می‌کند که علاوه‌بر نتیجه، شیئی با اطلاعات مربوط به عملیات را نیز ارائه می‌دهد:

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
    }
}
    

جاوا

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;
      }
    });
    

پیش‌از ارائه تأییدیه خرید به کاربر، کد پرداخت را از شیء نتیجه PaymentData استخراج کنید و از این کد برای ایجاد تراکنش پرداخت با درگاهتان استفاده کنید.

برای اطلاعات بیشتر درباره شیء نتیجه، به مرجع شیء JSON PaymentData مراجعه کنید.

اکنون، از راه‌انداز نتیجه فعالیت و تکلیف برای نمایش انتخابگر پرداخت Google Pay استفاده کنید:

Kotlin

private fun requestPayment() {
    val task = model.getLoadPaymentDataTask(priceLabel = "50.2")
    task.addOnCompleteListener(paymentDataLauncher::launch)
}
      

Kotlin
(coroutines)

private fun requestPayment() {
    lifecycleScope.launch {
        val task = model.getLoadPaymentDataTask(priceLabel = "50.2")
        paymentDataLauncher.launch(task.awaitTask())
    }
}
      

جاوا

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);
}
      

مرحله ۷: فعال کردن «تماس‌های برگشتی» بااستفاده از «به‌روزرسانی‌های قیمت پویا»

ابتدا، شیء PaymentDataRequest را به‌روز کنید تا تماس‌های برگشتی فعال شود.

Kotlin

fun getPaymentDataRequest(price: String): JSONObject {
    return getBaseRequest()
        .put("allowedPaymentMethods", getAllowedPaymentMethods())
        .put("transactionInfo", getTransactionInfo(price))
        .put("merchantInfo", JSONObject().put("merchantName", Constants.MERCHANT_NAME))
        .put("shippingAddressRequired", true)
        .put("shippingOptionRequired", true)
        .put("shippingOptionParameters", getShippingOptionParameters())
        .put(
            "shippingAddressParameters",
            JSONObject()
                .put("phoneNumberRequired", false)
                .put("allowedCountryCodes", JSONArray(Constants.SHIPPING_SUPPORTED_COUNTRIES))
        )
        .put(
            "callbackIntents",
            JSONArray()
                .put("PAYMENT_AUTHORIZATION")
                .put("SHIPPING_ADDRESS")
                .put("SHIPPING_OPTION")
        )
}
    

جاوا

public static JSONObject getPaymentDataRequest(String priceLabel) throws JSONException {
  return getBaseRequest()
      .put("allowedPaymentMethods", getAllowedPaymentMethods())
      .put("transactionInfo", getTransactionInfo(priceLabel))
      .put("merchantInfo", new JSONObject().put("merchantName", Constants.MERCHANT_NAME))
      .put("shippingAddressRequired", true)
      .put("shippingOptionRequired", true)
      .put("shippingOptionParameters", getShippingOptionParameters())
      .put(
          "shippingAddressParameters",
          new JSONObject()
              .put("phoneNumberRequired", false)
              .put("allowedCountryCodes", new JSONArray(Constants.SHIPPING_SUPPORTED_COUNTRIES)))
      .put(
          "callbackIntents",
          new JSONArray()
              .put("PAYMENT_AUTHORIZATION")
              .put("SHIPPING_ADDRESS")
              .put("SHIPPING_OPTION"));
}
    

سپس، با گسترش دادن BasePaymentDataCallbacks و BasePaymentDataCallbacksService به‌ترتیب برای مدیریت رویدادهای فراخوانی، منطق MerchantPaymentDataCallbacks و MerchantPaymentDataCallbacksService را پیاده‌سازی کنید.

MerchantPaymentDataCallbacks

Kotlin

/*
 * 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 com.google.android.gms.samples.pay.Constants
import com.google.android.gms.samples.pay.util.PaymentsUtil
import com.google.android.gms.wallet.PaymentData
import com.google.android.gms.wallet.callback.BasePaymentDataCallbacks
import com.google.android.gms.wallet.callback.IntermediatePaymentData
import com.google.android.gms.wallet.callback.OnCompleteListener
import com.google.android.gms.wallet.callback.PaymentAuthorizationResult
import com.google.android.gms.wallet.callback.PaymentDataRequestUpdate
import org.json.JSONException
import org.json.JSONObject

/**
 * Implementation of [BasePaymentDataCallbacks] that handles callbacks from the Google Pay
 * payment sheet.
 */
class MerchantPaymentDataCallbacks : BasePaymentDataCallbacks() {

    /**
     * onPaymentDataChanged callback - Handles payment data changes in the payment sheet such as
     * shipping address and shipping options.
     */
    override fun onPaymentDataChanged(
        request: IntermediatePaymentData?,
        onCompleteListener: OnCompleteListener<PaymentDataRequestUpdate>,
    ) {
        val newSavedState = Bundle()

        try {
            val intermediatePaymentDataJson = JSONObject(request?.toJson() ?: "{}")

            val paymentDataRequestUpdateJson = PaymentsUtil.getPaymentDataRequestUpdate(
                intermediatePaymentDataJson,
                Constants.BASE_PRICE,
            )

            newSavedState.putString("paymentDataRequestUpdate", paymentDataRequestUpdateJson.toString())

            // return the generated data to the client
            onCompleteListener.complete(
                PaymentDataRequestUpdate.fromJson(paymentDataRequestUpdateJson.toString())
                    .withUpdatedSavedState(newSavedState),
            )
        } catch (e: Exception) {
            Log.e("MerchantPaymentDataCallbacks", "onPaymentDataChanged failed", e)
        }
    }

    /**
     * onPaymentAuthorized callback - Called when a payment is authorized in the payment sheet.
     */
    override fun onPaymentAuthorized(
        request: PaymentData?,
        onCompleteListener: OnCompleteListener<PaymentAuthorizationResult>,
    ) {
        Log.i("Invocation", "onPaymentAuthorized invoked")
        val savedState = Bundle()
        val paymentAuthorizationResultJson = JSONObject()

        try {
            val paymentDataJson = JSONObject(request?.toJson() ?: "{}")
            val info = paymentDataJson.getJSONObject("paymentMethodData").getJSONObject("info")

            // example of how to check for a card network
            val cardNetwork = info.getString("cardNetwork")
            if (cardNetwork == "VISA") {
                paymentAuthorizationResultJson.put("transactionState", "SUCCESS")
            } else {
                paymentAuthorizationResultJson.put("transactionState", "ERROR")
                val error = JSONObject().apply {
                    put("reason", "PAYMENT_DATA_INVALID")
                    put("message", "Only Visa is accepted!")
                    put("intent", "PAYMENT_AUTHORIZATION")
                }
                paymentAuthorizationResultJson.put("error", error)
            }

            onCompleteListener.complete(
                PaymentAuthorizationResult.fromJson(paymentAuthorizationResultJson.toString())
                    .withUpdatedSavedState(savedState),
            )
        } catch (e: Exception) {
            Log.e("MerchantPaymentDataCallbacks", "onPaymentAuthorized failed", e)
        }
    }
}

    

جاوا

/*
 * Copyright 2020 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.annotation.NonNull;
import com.google.android.gms.samples.pay.Constants;
import com.google.android.gms.samples.pay.util.PaymentsUtil;
import com.google.android.gms.wallet.PaymentData;
import com.google.android.gms.wallet.callback.BasePaymentDataCallbacks;
import com.google.android.gms.wallet.callback.IntermediatePaymentData;
import com.google.android.gms.wallet.callback.OnCompleteListener;
import com.google.android.gms.wallet.callback.PaymentAuthorizationResult;
import com.google.android.gms.wallet.callback.PaymentDataRequestUpdate;
import java.util.Objects;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * Implementation of {@link BasePaymentDataCallbacks} that handles callbacks from the Google Pay
 * payment sheet.
 */
public class MerchantPaymentDataCallbacks extends BasePaymentDataCallbacks {

  /**
   * Handles payment data changes in the payment sheet such as shipping address and shipping
   * options. Values passed back to it will update the payment sheet.
   *
   * @param request The updated payment data from the payment sheet.
   * @param onCompleteListener The listener to call when the update is complete.
   */
  @Override
  public void onPaymentDataChanged(
      IntermediatePaymentData request,
      @NonNull OnCompleteListener<PaymentDataRequestUpdate> onCompleteListener) {
    // define prices and variables
    JSONObject paymentDataRequestUpdate;
    Bundle newSavedState = new Bundle();
    try {
      assert request != null;
      JSONObject intermediatePaymentData = new JSONObject(request.toJson());
      // define transaction info
      paymentDataRequestUpdate =
          PaymentsUtil.getPaymentDataRequestUpdate(intermediatePaymentData, Constants.BASE_PRICE);
      newSavedState.putString("paymentDataRequestUpdate", paymentDataRequestUpdate.toString());
      // return the generated data to the client
      onCompleteListener.complete(
          PaymentDataRequestUpdate.fromJson(paymentDataRequestUpdate.toString())
              .withUpdatedSavedState(newSavedState));
    } catch (JSONException e) {
      Log.e("SampleMerchantPaymentDataCallbacksService", e.getMessage(), e);
      throw new RuntimeException(e);
    }
  }

  /**
   * Called when a payment is authorized in the payment sheet. Use this callback to perform any
   * final validation on the payment data. Throwing an error will allow the user to make
   * corrections to the payment sheet.
   *
   * @param request The payment data from the payment sheet.
   * @param onCompleteListener The listener to call when the authorization is complete.
   */
  @Override
  public void onPaymentAuthorized(
      PaymentData request,
      @NonNull OnCompleteListener<PaymentAuthorizationResult> onCompleteListener) {
    Log.i("Invocation", "onPaymentAuthorized invoked");
    Bundle savedState = new Bundle();
    JSONObject paymentAuthorizationResultJson = new JSONObject();
    try {
      assert request != null;
      JSONObject paymentDataJson = new JSONObject(request.toJson());
      JSONObject info = paymentDataJson.getJSONObject("paymentMethodData").getJSONObject("info");
      // example of how to check for a card network
      String cardNetwork = info.getString("cardNetwork");
      if (cardNetwork.equals("VISA")) {
        paymentAuthorizationResultJson.put("transactionState", "SUCCESS");
      } else {
        paymentAuthorizationResultJson.put("transactionState", "ERROR");
        JSONObject error =
            new JSONObject()
                .put("reason", "PAYMENT_DATA_INVALID")
                .put("message", "Only Visa is accepted!")
                .put("intent", "PAYMENT_AUTHORIZATION");
        paymentAuthorizationResultJson.put("error", error);
      }
      onCompleteListener.complete(
          PaymentAuthorizationResult.fromJson(paymentAuthorizationResultJson.toString())
              .withUpdatedSavedState(savedState));
    } catch (JSONException e) {
      Log.e("SampleMerchantPaymentDataCallbacksService", Objects.requireNonNull(e.getMessage()));
      throw new RuntimeException(e);
    }
  }
}

    

MerchantPaymentDataCallbacksService

Kotlin

package com.google.android.gms.samples.pay.service

import com.google.android.gms.wallet.callback.BasePaymentDataCallbacks
import com.google.android.gms.samples.pay.activity.MerchantPaymentDataCallbacks
import com.google.android.gms.wallet.callback.BasePaymentDataCallbacksService

/**
 * Service class which hosts the payment data callbacks initiated by Google Play services
 * within a {@link PaymentsClient#loadPaymentData(PaymentDataRequest)}.
 *
 * <p>The callbacks are implemented through MerchantPaymentDataCallbacks returned from {@link #createPaymentDataCallbacks()}.
 */
class MerchantPaymentDataCallbacksService : BasePaymentDataCallbacksService() {

    override fun createPaymentDataCallbacks(): BasePaymentDataCallbacks {
        return MerchantPaymentDataCallbacks()
    }
}

    

جاوا

/*
 * 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.service;

import androidx.annotation.NonNull;
import com.google.android.gms.samples.pay.activity.MerchantPaymentDataCallbacks;
import com.google.android.gms.wallet.callback.BasePaymentDataCallbacks;
import com.google.android.gms.wallet.callback.BasePaymentDataCallbacksService;

/**
 * Service class which hosts the payment data callbacks initiated by Google Play services within a
 * {@link
 * com.google.android.gms.wallet.PaymentsClient#loadPaymentData(com.google.android.gms.wallet.PaymentDataRequest)}.
 *
 * <p>The callbacks are implemented through MerchantPaymentDataCallbacks returned from {@link
 * #createPaymentDataCallbacks()}.
 */
public class MerchantPaymentDataCallbacksService extends BasePaymentDataCallbacksService {

  @NonNull
  @Override
  protected BasePaymentDataCallbacks createPaymentDataCallbacks() {
    return new MerchantPaymentDataCallbacks();
  }
}

    

در آخر، فایل AndroidManifest.xml را به‌روز کنید تا com.google.android.gms.permission.BIND_PAYMENTS_CALLBACK_SERVICE را به‌عنوان اجازه آن مشخص کنید و فیلتر هدفی با نام کنش com.google.android.gms.wallet.callback.PAYMENT_DATA_CALLBACKS اضافه کنید.

Kotlin

<service
    android:name="com.google.android.gms.samples.pay.service.MerchantPaymentDataCallbacksService"
    android:permission="com.google.android.gms.permission.BIND_PAYMENTS_CALLBACK_SERVICE"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.google.android.gms.wallet.callback.PAYMENT_DATA_CALLBACKS"/>
    </intent-filter>
</service>
    

جاوا

<service
    android:name="com.google.android.gms.samples.pay.service.MerchantPaymentDataCallbacksService"
    android:enabled="true"
    android:exported="true"
    android:permission="com.google.android.gms.permission.BIND_PAYMENTS_CALLBACK_SERVICE">
  <intent-filter>
    <action android:name="com.google.android.gms.wallet.callback.PAYMENT_DATA_CALLBACKS" />
  </intent-filter>
</service>
    

همه را کنار هم بگذارید

تکه زیر نمونه کاملی از پروژه پیکربندی‌شده صحیح را نشان می‌دهد. برای مراحل راه‌اندازی سطح پروژه، به پیکربندی پروژه مراجعه کنید.

Kotlin

فعالیت

/*
 * 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 com.google.android.gms.common.api.CommonStatusCodes
import com.google.android.gms.samples.pay.Constants
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.tasks.Task
import com.google.android.gms.wallet.PaymentData
import com.google.android.gms.wallet.contract.TaskResultContracts.GetPaymentDataResult

class CheckoutActivity : ComponentActivity() {

    private val model: CheckoutViewModel by viewModels()

    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 the payment attempt
                Log.i("Google Pay result:", "Payment canceled by user")
            }
            else -> {
                // Handle internal and other unexpected errors
                Log.w("Google Pay result:", "Payment failed. Status: ${taskResult.status}")
            }
        }
    }

    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 = "$${Constants.BASE_PRICE}",
                image = R.drawable.ts_10_11019a,
                payUiState = payState,
                onGooglePayButtonClick = this::requestPayment,
            )
        }
    }

    private fun requestPayment() {
        val task = model.getLoadPaymentDataTask(Constants.BASE_PRICE)
        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 java.math.BigDecimal
import java.util.Locale
import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject

/**
 * 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 {

    /**
     * Encapsulated shipping option parameters (set of options) definition.
     *
     * @return A [JSONObject] containing shipping options and the default selected option.
     * @throws JSONException If the JSON object is malformed.
     */
    @Throws(JSONException::class)
    fun getShippingOptionParameters(): JSONObject {
        val shippingOptionParameters = JSONObject()
        val shippingOptions = JSONArray()

        shippingOptions.put(
            createShippingOption(
                "shipping-001", "$0.00: Free shipping label", "Free Shipping example text"
            )
        )
        shippingOptions.put(
            createShippingOption(
                "shipping-002", "$1.99: Standard shipping label", "Standard shipping example text."
            )
        )
        shippingOptions.put(
            createShippingOption(
                "shipping-003", "$1000: Express shipping label", "Express shipping example text."
            )
        )
        shippingOptions.put(
            createShippingOption(
                "shipping-004", "$2000: Same-day shipping label", "Same-day shipping example text."
            )
        )

        shippingOptionParameters.put("shippingOptions", shippingOptions)
        shippingOptionParameters.put("defaultSelectedOptionId", "shipping-001")

        return shippingOptionParameters
    }

    /**
     * Defines an encapsulated shipping option.
     *
     * @param id The unique identifier for the shipping option.
     * @param label The label to display for the shipping option.
     * @param description A brief description of the shipping option.
     * @return A [JSONObject] representing the shipping option.
     * @throws JSONException If the JSON object is malformed.
     */
    @Throws(JSONException::class)
    private fun createShippingOption(id: String, label: String, description: String): JSONObject {
        return JSONObject().put("id", id).put("label", label).put("description", description)
    }

    /**
     * Encapsulated definition for a display item.
     *
     * @param label The label to display for the item.
     * @param type The type of the display item (e.g., LINE_ITEM, SUBTOTAL).
     * @param price The price of the item.
     * @return A [JSONObject] representing the display item.
     * @throws JSONException If the JSON object is malformed.
     */
    @Throws(JSONException::class)
    fun createDisplayItem(label: String, type: String, price: String): JSONObject {
        return JSONObject().put("label", label).put("type", type).put("price", price)
    }

    /**
     * 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.
     */
    @Throws(JSONException::class)
    private fun getBaseRequest(): JSONObject {
        return JSONObject().put("apiVersion", 2).put("apiVersionMinor", 0)
    }

    /**
     * Creates an instance of [PaymentsClient] for use in an [Context] using the
     * environment and theme set in [Constants].
     *
     * @param context is the caller's context.
     * @return An instance of [PaymentsClient].
     */
    fun createPaymentsClient(context: Context): PaymentsClient {
        val walletOptions = 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.
     *
     * 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 if the object is malformed.
     * @see [PaymentMethodTokenizationSpecification](https://developers.google.com/pay/api/android/reference/object#PaymentMethodTokenizationSpecification)
     */
    @Throws(JSONException::class)
    private fun getGatewayTokenizationSpecification(): JSONObject {
        return JSONObject()
            .put("type", "PAYMENT_GATEWAY")
            .put(
                "parameters",
                JSONObject()
                    .put("gateway", "example")
                    .put("gatewayMerchantId", "exampleGatewayMerchantId")
            )
    }

    /**
     * `DIRECT` Integration: Decrypt a response directly on your servers. This configuration has
     * additional data security requirements from Google and additional PCI DSS compliance complexity.
     *
     * Please refer to the documentation for more information about `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 [PaymentMethodTokenizationSpecification](https://developers.google.com/pay/api/android/reference/object#PaymentMethodTokenizationSpecification)
     */
    @Throws(JSONException::class)
    private fun getDirectTokenizationSpecification(): JSONObject {
        return JSONObject()
            .put("type", "DIRECT")
            .put("parameters", JSONObject(Constants.DIRECT_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 fun getAllowedCardNetworks(): JSONArray {
        return 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 fun getAllowedCardAuthMethods(): JSONArray {
        return 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 if the object is malformed.
     * @see [PaymentMethod](https://developers.google.com/pay/api/android/reference/object#PaymentMethod)
     */
    @Throws(JSONException::class)
    private fun getBaseCardPaymentMethod(): JSONObject {
        return JSONObject()
            .put("type", "CARD")
            .put(
                "parameters",
                JSONObject()
                    .put("allowedAuthMethods", getAllowedCardAuthMethods())
                    .put("allowedCardNetworks", getAllowedCardNetworks())
                    .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 if the object is malformed.
     * @see [PaymentMethod](https://developers.google.com/pay/api/android/reference/object#PaymentMethod)
     */
    @Throws(JSONException::class)
    private fun getCardPaymentMethod(): JSONObject {
        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.
     */
    @Throws(JSONException::class)
    fun getAllowedPaymentMethods(): JSONArray {
        return 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.
     * @throws JSONException if the object is malformed.
     * @see [IsReadyToPayRequest](https://developers.google.com/pay/api/android/reference/object#IsReadyToPayRequest)
     */
    @Throws(JSONException::class)
    fun getIsReadyToPayRequest(): JSONObject {
        return getBaseRequest()
            .put("allowedPaymentMethods", JSONArray().put(getBaseCardPaymentMethod()))
    }

    /**
     * Provide Google Pay API with a payment amount, currency, and amount status.
     *
     * @param price The price of the product.
     * @return information about the requested payment.
     * @throws JSONException if the object is malformed.
     * @see [TransactionInfo](https://developers.google.com/pay/api/android/reference/object#TransactionInfo)
     */
    @Throws(JSONException::class)
    fun getTransactionInfo(price: String): JSONObject {
        return JSONObject()
            .put("totalPrice", price)
            .put("totalPriceLabel", "Total")
            .put("totalPriceStatus", "FINAL")
            .put("countryCode", Constants.COUNTRY_CODE)
            .put("currencyCode", Constants.CURRENCY_CODE)
            .put("checkoutOption", "COMPLETE_IMMEDIATE_PURCHASE")
            .put("displayItems", getDisplayItems(price))
    }

    /**
     * Provide Google Pay API with a payment amount, currency, and amount status.
     *
     * @param price The price of the product.
     * @return information about the requested payment.
     * @throws JSONException if the object is malformed.
     * @see [TransactionInfo](https://developers.google.com/pay/api/android/reference/object#TransactionInfo)
     */
    @Throws(JSONException::class)
    fun getDisplayItems(price: String): JSONArray {
        val displayItems = JSONArray()
        val tax = String.format(
            Locale.getDefault(), "%.2f", BigDecimal(price).multiply(BigDecimal(Constants.TAX_RATE.toString()))
        )
        displayItems.put(createDisplayItem("Total", "SUBTOTAL", price))
        displayItems.put(createDisplayItem("Tax", "TAX", tax))
        return displayItems
    }

    /**
     * An object describing information to be requested via the Google Pay payment sheet.
     *
     * @param price the price of the product
     * @return Payment data expected by your app.
     * @throws JSONException If the object is malformed.
     * @see [PaymentDataRequest](https://developers.google.com/pay/api/android/reference/object#PaymentDataRequest)
     */
    @Throws(JSONException::class)
    fun getPaymentDataRequest(price: String): JSONObject {
        return getBaseRequest()
            .put("allowedPaymentMethods", getAllowedPaymentMethods())
            .put("transactionInfo", getTransactionInfo(price))
            .put("merchantInfo", JSONObject().put("merchantName", Constants.MERCHANT_NAME))
            .put("shippingAddressRequired", true)
            .put("shippingOptionRequired", true)
            .put("shippingOptionParameters", getShippingOptionParameters())
            .put(
                "shippingAddressParameters",
                JSONObject()
                    .put("phoneNumberRequired", false)
                    .put("allowedCountryCodes", JSONArray(Constants.SHIPPING_SUPPORTED_COUNTRIES))
            )
            .put(
                "callbackIntents",
                JSONArray()
                    .put("PAYMENT_AUTHORIZATION")
                    .put("SHIPPING_ADDRESS")
                    .put("SHIPPING_OPTION")
            )
    }

    /**
     * An object describing information to be updated via the Google Pay payment sheet.
     *
     * @param intermediatePaymentData the intermediate payment data containing user selections.
     * @param price the price of the product.
     * @return Payment data expected by your app.
     * @throws JSONException If the object is malformed.
     * @see [PaymentDataRequest](https://developers.google.com/pay/api/android/reference/object#PaymentDataRequest)
     */
    @Throws(JSONException::class)
    fun getPaymentDataRequestUpdate(
        intermediatePaymentData: JSONObject, price: String
    ): JSONObject {
        // Populate the payment request with default data
        val paymentDataRequestUpdate = JSONObject()
        paymentDataRequestUpdate.put("newTransactionInfo", getTransactionInfo(price))

        val shippingOptionParameters = getShippingOptionParameters()
        paymentDataRequestUpdate.put("newShippingOptionParameters", shippingOptionParameters)

        // Update the selected shippingOption based on the user selection
        var shippingOptionId = "shipping-001"
        if (intermediatePaymentData.has("shippingOptionData")
            && intermediatePaymentData.getJSONObject("shippingOptionData").has("id")
        ) {
            shippingOptionId =
                intermediatePaymentData.getJSONObject("shippingOptionData").getString("id")
            paymentDataRequestUpdate
                .getJSONObject("newShippingOptionParameters")
                .put("defaultSelectedOptionId", shippingOptionId)
        }
        // Get display item for the selected shipping method and add it to paymentDataRequestUpdate
        val shippingDisplayItem = getShippingDisplayItem(shippingOptionId)
        paymentDataRequestUpdate
            .getJSONObject("newTransactionInfo")
            .getJSONArray("displayItems")
            .put(shippingDisplayItem)

        // define shipping price
        if (shippingDisplayItem.has("price")) {
            // Update displayItems with the new price.
            val totalPrice =
                paymentDataRequestUpdate.getJSONObject("newTransactionInfo").getString("totalPrice")
            val shippingPrice = shippingDisplayItem.getString("price")
            val newTotalPriceValue = BigDecimal(totalPrice).add(BigDecimal(shippingPrice))
            paymentDataRequestUpdate
                .getJSONObject("newTransactionInfo")
                .put("totalPrice", String.format(Locale.getDefault(), "%.2f", newTotalPriceValue))
        }
        return paymentDataRequestUpdate
    }

    /**
     * Get a display item object for the selected shipping option.
     *
     * @param shippingOptionId the ID of the selected shipping option.
     * @return a JSONObject containing the display item for the shipping option.
     * @throws JSONException if the shipping option is invalid.
     */
    @Throws(JSONException::class)
    private fun getShippingDisplayItem(shippingOptionId: String?): JSONObject {
        if (shippingOptionId == null) {
            return JSONObject()
        }

        return when (shippingOptionId) {
            "shipping-001" -> createDisplayItem("Shipping", "LINE_ITEM", "0")
            "shipping-002" -> createDisplayItem("Shipping", "LINE_ITEM", "1.99")
            "shipping-003" -> createDisplayItem("Shipping", "LINE_ITEM", "1000")
            "shipping-004" -> createDisplayItem("Shipping", "LINE_ITEM", "2000")
            "shipping_option_unselected" -> JSONObject()
            else -> throw JSONException("This shipping option is invalid for the given address")
        }
    }
}

      

مشاهده مدل

/*
 * 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.getIsReadyToPayRequest().toString())
        return paymentsClient.isReadyToPay(request).await()
    }

    /**
     * Creates a [Task] that starts the payment process with the transaction details included.
     *
     * @param price the price of the product
     * @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(price: String): Task<PaymentData> {
        val paymentDataRequestJson = PaymentsUtil.getPaymentDataRequest(price)
        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()
    }
}

    

ثابت‌ها

/*
 * 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
     */
    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 "ECv2",
        "publicKey" to DIRECT_TOKENIZATION_PUBLIC_KEY
    )

    /**
     * A coefficient to calculate tax rates.
     *
     * @value #TAX_RATE The rate at which you want to calculate tax.
     */
    const val TAX_RATE = 0.35

    /**
     * The default price for the product.
     *
     * @value #BASE_PRICE
     */
    const val BASE_PRICE = "50.20"

    /**
     * The name of the merchant.
     *
     * @value #MERCHANT_NAME
     */
    const val MERCHANT_NAME = "Example Merchant"
}

    

جاوا

فعالیت

/*
 * 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.Constants;
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 java.util.Locale;
import org.json.JSONException;
import org.json.JSONObject;

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

    // Set the price label from the constant
    layoutBinding.detailPrice.setText(getString(R.string.price_format, Constants.BASE_PRICE));

    // 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) {
      Log.e("initializeUi", "Error initializing Google Pay button", e);
    }
  }

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

  /**
   * Handles the request to start a payment.
   *
   * @param view The view that triggered the request.
   */
  public void requestPayment(View view) {
    // The price provided to the API should include taxes and shipping.
    try {
      // provide the default starting price here.
      final Task<PaymentData> task = model.getLoadPaymentDataTask(Constants.BASE_PRICE);
      task.addOnCompleteListener(paymentDataLauncher::launch);
    } catch (JSONException e) {
      handleError(CommonStatusCodes.INTERNAL_ERROR, "The payment data task couldn't be created.");
    }
  }

  /**
   * 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(@Nullable PaymentData paymentData) {
    if (paymentData == null) {
      return;
    }

    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.
   * @param message An optional error message.
   * @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));
  }
}

    

فعالیت موفق

/*
 * 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;

/** An activity that is displayed when a payment completes successfully. */
public class CheckoutSuccessActivity extends AppCompatActivity {

  /**
   * Initializes the activity.
   *
   * @param savedInstanceState If the activity is being re-initialized after previously being shut
   *     down then this Bundle contains the data it most recently supplied in {@link
   *     #onSaveInstanceState}. <b><i>Note: Otherwise it is null.</i></b>
   */
  @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 static com.google.android.gms.samples.pay.Constants.TAX_RATE;

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 java.math.BigDecimal;
import java.util.Locale;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * 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 {

  private PaymentsUtil() {}

  /**
   * Encapsulated shipping option parameters (set of options) definition.
   *
   * @return A {@link JSONObject} containing shipping options and the default selected option.
   * @throws JSONException If the JSON object is malformed.
   */
  public static JSONObject getShippingOptionParameters() throws JSONException {
    JSONObject shippingOptionParameters = new JSONObject();
    JSONArray shippingOptions = new JSONArray();

    shippingOptions.put(
        createShippingOption(
            "shipping-001", "$0.00: Free shipping label", "Free Shipping example text"));
    shippingOptions.put(
        createShippingOption(
            "shipping-002", "$1.99: Standard shipping label", "Standard shipping example text."));
    shippingOptions.put(
        createShippingOption(
            "shipping-003", "$1000: Express shipping label", "Express shipping example text."));
    shippingOptions.put(
        createShippingOption(
            "shipping-004", "$2000: Same-day shipping label", "Same-day shipping example text."));

    shippingOptionParameters.put("shippingOptions", shippingOptions);
    shippingOptionParameters.put("defaultSelectedOptionId", "shipping-001");

    return shippingOptionParameters;
  }

  /**
   * Defines an encapsulated shipping option.
   *
   * @param id The unique identifier for the shipping option.
   * @param label The label to display for the shipping option.
   * @param description A brief description of the shipping option.
   * @return A {@link JSONObject} representing the shipping option.
   * @throws JSONException If the JSON object is malformed.
   */
  private static JSONObject createShippingOption(String id, String label, String description)
      throws JSONException {
    return new JSONObject().put("id", id).put("label", label).put("description", description);
  }

  /**
   * Encapsulated definition for a display item.
   *
   * @param label The label to display for the item.
   * @param type The type of the display item (e.g., LINE_ITEM, SUBTOTAL).
   * @param price The price of the item.
   * @return A {@link JSONObject} representing the display item.
   * @throws JSONException If the JSON object is malformed.
   */
  public static JSONObject createDisplayItem(String label, String type, String price)
      throws JSONException {
    return new JSONObject().put("label", label).put("type", type).put("price", price);
  }

  /**
   * 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.
   * @return An instance of {@link PaymentsClient}.
   */
  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.
   * @throws JSONException if the object is malformed.
   * @see <a
   *     href="https://developers.google.com/pay/api/android/reference/object#IsReadyToPayRequest">IsReadyToPayRequest</a>
   */
  public static JSONObject getIsReadyToPayRequest() throws JSONException {
    return getBaseRequest()
        .put("allowedPaymentMethods", new JSONArray().put(getBaseCardPaymentMethod()));
  }

  /**
   * Provide Google Pay API with a payment amount, currency, and amount status.
   *
   * @param price The price of the product.
   * @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>
   */
  public static JSONObject getTransactionInfo(String price) throws JSONException {
    return new JSONObject()
        .put("totalPrice", price)
        .put("totalPriceLabel", "Total")
        .put("totalPriceStatus", "FINAL")
        .put("countryCode", Constants.COUNTRY_CODE)
        .put("currencyCode", Constants.CURRENCY_CODE)
        .put("checkoutOption", "COMPLETE_IMMEDIATE_PURCHASE")
        .put("displayItems", getDisplayItems(price));
  }

  /**
   * Provide Google Pay API with a payment amount, currency, and amount status.
   *
   * @param price The price of the product.
   * @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>
   */
  public static JSONArray getDisplayItems(String price) throws JSONException {
    JSONArray displayItems = new JSONArray();
    String tax =
        String.format(
            Locale.getDefault(), "%.2f", new BigDecimal(price).multiply(new BigDecimal(TAX_RATE)));
    displayItems.put(createDisplayItem("Total", "SUBTOTAL", price));
    displayItems.put(createDisplayItem("Tax", "TAX", tax));
    return displayItems;
  }

  /**
   * An object describing information to be requested via the Google Pay payment sheet.
   *
   * @param priceLabel the price of the product
   * @return Payment data expected by your app.
   * @throws JSONException If the object is malformed.
   * @see <a
   *     href="https://developers.google.com/pay/api/android/reference/object#PaymentDataRequest">PaymentDataRequest</a>
   */
  public static JSONObject getPaymentDataRequest(String priceLabel) throws JSONException {
    return getBaseRequest()
        .put("allowedPaymentMethods", getAllowedPaymentMethods())
        .put("transactionInfo", getTransactionInfo(priceLabel))
        .put("merchantInfo", new JSONObject().put("merchantName", Constants.MERCHANT_NAME))
        .put("shippingAddressRequired", true)
        .put("shippingOptionRequired", true)
        .put("shippingOptionParameters", getShippingOptionParameters())
        .put(
            "shippingAddressParameters",
            new JSONObject()
                .put("phoneNumberRequired", false)
                .put("allowedCountryCodes", new JSONArray(Constants.SHIPPING_SUPPORTED_COUNTRIES)))
        .put(
            "callbackIntents",
            new JSONArray()
                .put("PAYMENT_AUTHORIZATION")
                .put("SHIPPING_ADDRESS")
                .put("SHIPPING_OPTION"));
  }

  /**
   * An object describing information to be updated via the Google Pay payment sheet.
   *
   * @param intermediatePaymentData the intermediate payment data containing user selections.
   * @param priceLabel the price of the product.
   * @return Payment data expected by your app.
   * @throws JSONException If the object is malformed.
   * @see <a
   *     href="https://developers.google.com/pay/api/android/reference/object#PaymentDataRequest">PaymentDataRequest</a>
   */
  public static JSONObject getPaymentDataRequestUpdate(
      JSONObject intermediatePaymentData, String priceLabel) throws JSONException {
    // Populate the payment request with default data
    JSONObject paymentDataRequestUpdate = new JSONObject();
    paymentDataRequestUpdate.put("newTransactionInfo", getTransactionInfo(priceLabel));

    JSONObject shippingOptionParameters = getShippingOptionParameters();
    paymentDataRequestUpdate.put("newShippingOptionParameters", shippingOptionParameters);

    // Update the selected shippingOption based on the user selection
    String shippingOptionId = "shipping-001";
    if (intermediatePaymentData.has("shippingOptionData")
        && intermediatePaymentData.getJSONObject("shippingOptionData").has("id")) {
      shippingOptionId =
          intermediatePaymentData.getJSONObject("shippingOptionData").getString("id");
      paymentDataRequestUpdate
          .getJSONObject("newShippingOptionParameters")
          .put("defaultSelectedOptionId", shippingOptionId);
    }
    // Get display item for the selected shipping method and add it to paymentDataRequestUpdate
    JSONObject shippingDisplayItem = getShippingDisplayItem(shippingOptionId);
    paymentDataRequestUpdate
        .getJSONObject("newTransactionInfo")
        .getJSONArray("displayItems")
        .put(shippingDisplayItem);

    // define shipping price
    if (shippingDisplayItem.has("price")) {
      // Update displayItems with the new price.
      String totalPrice =
          paymentDataRequestUpdate.getJSONObject("newTransactionInfo").getString("totalPrice");
      String shippingPrice = shippingDisplayItem.getString("price");
      BigDecimal newTotalPriceValue = new BigDecimal(totalPrice).add(new BigDecimal(shippingPrice));
      paymentDataRequestUpdate
          .getJSONObject("newTransactionInfo")
          .put("totalPrice", String.format(Locale.getDefault(), "%.2f", newTotalPriceValue));
    }
    return paymentDataRequestUpdate;
  }

  /**
   * Get a display item object for the selected shipping option.
   *
   * @param shippingOptionId the ID of the selected shipping option.
   * @return a JSONObject containing the display item for the shipping option.
   * @throws JSONException if the shipping option is invalid.
   */
  private static JSONObject getShippingDisplayItem(String shippingOptionId) throws JSONException {
    if (shippingOptionId == null) {
      return new JSONObject();
    }

    switch (shippingOptionId) {
      case "shipping-001":
        return createDisplayItem("Shipping", "LINE_ITEM", "0");
      case "shipping-002":
        return createDisplayItem("Shipping", "LINE_ITEM", "1.99");
      case "shipping-003":
        return createDisplayItem("Shipping", "LINE_ITEM", "1000");
      case "shipping-004":
        return createDisplayItem("Shipping", "LINE_ITEM", "2000");
      case "shipping_option_unselected":
        return new JSONObject();
      default:
        throw new JSONException("This shipping option is invalid for the given address");
    }
  }
}

    

مشاهده مدل

/*
 * 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.JSONException;
import org.json.JSONObject;

/** ViewModel for the {@link com.google.android.gms.samples.pay.activity.CheckoutActivity}. */
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> canUseGooglePayInternal = new MutableLiveData<>();

  public final LiveData<Boolean> canUseGooglePay = canUseGooglePayInternal;

  /**
   * Initializes the ViewModel.
   *
   * @param application The application context.
   */
  public CheckoutViewModel(@NonNull Application application) {
    super(application);
    paymentsClient = PaymentsUtil.createPaymentsClient(application);

    fetchCanUseGooglePay();
  }

  /**
   * 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() {
    try {
      final JSONObject isReadyToPayJson = PaymentsUtil.getIsReadyToPayRequest();
      if (isReadyToPayJson == null) {
        canUseGooglePayInternal.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()) {
              canUseGooglePayInternal.setValue(completedTask.getResult());
            } else {
              Log.w("isReadyToPay failed", completedTask.getException());
              canUseGooglePayInternal.setValue(false);
            }
          });
    } catch (JSONException e) {
      Log.w("isReadyToPay failed", e);
      canUseGooglePayInternal.setValue(false);
    }
  }

  /**
   * Creates a Task that starts the payment process with the transaction details included.
   *
   * @param price the price to show on the payment sheet.
   * @return a Task with the payment information.
   * @throws JSONException If the JSON request is malformed.
   */
  public Task<PaymentData> getLoadPaymentDataTask(String price) throws JSONException {
    JSONObject paymentDataRequestJson = PaymentsUtil.getPaymentDataRequest(price);
    PaymentDataRequest request = PaymentDataRequest.fromJson(paymentDataRequestJson.toString());
    return paymentsClient.loadPaymentData(request);
  }
}

    

ثابت‌ها

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

  /**
   * A coefficient to calculate tax rates.
   *
   * @value #TAX_RATE The rate at which you want to calculate tax.
   */
  public static final Double TAX_RATE = 0.35;

  /**
   * The default price for the product.
   *
   * @value #BASE_PRICE
   */
  public static final String BASE_PRICE = "50.20";

  /**
   * The name of the merchant.
   *
   * @value #MERCHANT_NAME
   */
  public static final String MERCHANT_NAME = "Example Merchant";
}