برای ادغام یک برنامه وب با API گوگل پی و پیکربندی آن برای پذیرش کارتهای پرداخت، مراحل این آموزش را دنبال کنید.
- مرحله ۱: نسخه API گوگل پی خود را تعریف کنید .
- مرحله ۲: یک روش توکنسازی پرداخت انتخاب کنید .
- مرحله ۳: شبکههای کارت پرداخت پشتیبانیشده را تعریف کنید .
- مرحله ۴: روشهای پرداخت مجاز خود را شرح دهید.
- مرحله ۵: کتابخانه جاوا اسکریپت Google Pay API را بارگذاری کنید .
- مرحله ۶: آمادگی برای پرداخت با API گوگل پی را تعیین کنید .
- مرحله ۷: دکمه پرداخت گوگل پی را اضافه کنید .
- مرحله ۸: یک شیء PaymentDataRequest ایجاد کنید .
- مرحله ۹: ثبت یک کنترلکننده رویداد برای حرکات کاربر .
- مرحله 10 (اختیاری): تنظیم مجوز پرداختها .
- مرحله 11 (اختیاری برای فعال بودن ارسال): تنظیم بهروزرسانیهای پویای قیمت .
- مرحله ۱۲ (اختیاری برای کدهای تخفیف): تنظیم کدهای تخفیف .
مرحله ۱: نسخه API گوگل پی خود را تعریف کنید
نسخه API گوگل پی که سایت شما استفاده میکند را اعلام کنید. نسخههای اصلی و فرعی در فیلدهای هر شیء ارسالی الزامی هستند و در پاسخ نیز لحاظ میشوند.
نمونه کد زیر نسخههای API اعلامشده را نشان میدهد:
const baseRequest = { apiVersion: 2, apiVersionMinor: 0 };
مرحله ۲: درخواست توکن پرداخت برای ارائهدهنده خدمات پرداخت خود
گوگل اطلاعات مربوط به کارت انتخابی پرداختکننده را برای پردازش ایمن توسط ارائهدهنده خدمات پرداخت رمزگذاری میکند.
const tokenizationSpecification = { type: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleGatewayMerchantId' } };
به جای example و exampleGatewayMerchantId ، مقادیر مناسب برای ارائهدهنده پرداخت خود را وارد کنید. از جدول زیر برای یافتن مقادیر خاص gateway و gatewayMerchantId برای ارائهدهنده پرداخت خود استفاده کنید:
| دروازه | پارامترها و اسناد |
|---|---|
| 9Pay | "gateway": "ninepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت ABA | "gateway": "ababank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| قبول.آبی | "gateway": "acceptblue" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ACI | "gateway": "aciworldwide" "gatewayMerchantId": "YOUR_ENTITY_ID" |
| ای سی پی | "gateway": "acpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Acquired.com | "gateway": "acquired" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آدین | "gateway": "adyen" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| هوش مصنوعی، فینتک | "gateway": "aifintech" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| ایربا پی | "gateway": "airbapay"" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| ایروند | "gateway": "airvend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایروالکس | "gateway": "airwallex" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" |
| آکوراتک | "gateway": "akuratecolab" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آلفا-بانک | "gateway": "alfabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| الگوریتم | "gateway": "algoritma" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آلینپی | "gateway": "allinpayintl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| همه پرداختها | "gateway": "allpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آلتیسپی | "gateway": "alticepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت فناوری مالی آمو | "gateway": "amofintech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آموال پی | "gateway": "amwalalraqamia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| آندوت | "gateway": "anedot" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آپکوپی | "gateway": "apcopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آپکس | "gateway": "epos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آسیابیل | "gateway": "asiabill" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| کمک | "gateway": "assist" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| به بلاروس کمک کنید | "gateway": "belassist" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| به قزاقستان کمک کنید | "gateway": "assistkz" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اوروس | "gateway": "auruspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Authorize.net | "gateway": "authorizenet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اکسرو | "gateway": "gestpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آذریکارتجیپی | "gateway": "azericardgpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت نرم B2B | "gateway": "b2bsoftpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک ۱۳۱ | "gateway": "bank131" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک آر بی کی | "gateway": "bankrbkkzpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک وستوک | "gateway": "bankvostok" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بارکلیکارت | "gateway": "barclayssmartpayadvance" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| باریون | "gateway": "barion" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نظریه پایه | "gateway": "basistheory" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BCC.KZ | "gateway": "bccpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بیپید | "gateway": "ecomcharge" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک برکه | "gateway": "berekepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیستمهای صورتحساب | "gateway": "billingsystems" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آزمایشگاههای بیندو لیمیتد | "gateway": "bindo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| bisys.kz | "gateway": "bisysgpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بیزون | "gateway": "bizzon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بلوکها | "gateway": "blocks" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بلوفین | "gateway": "bluefin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بلوفین اروپا | "gateway": "bluefineurope" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| رسانه آبی | "gateway": "bluemedia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بلواسنپ | "gateway": "bluesnap" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بوریکا | "gateway": "borica" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بی پی سی | "gateway": "bpcpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| BR-DGE | "gateway": "comcarde" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| برینتری | "gateway": "braintree" "braintree:apiVersion": "v1" "braintree:sdkVersion": "braintree.client.VERSION" "braintree:merchantId": "YOUR_BRAINTREE_MERCHANT_ID" "braintree:clientKey": "YOUR_BRAINTREE_TOKENIZATION_KEY" |
| براسپاگ | "gateway": "cielo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بریجرپی | "gateway": "bridgerpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بی تی پی | "gateway": "btpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بوکارو | "gateway": "buckaroo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بویا | "gateway": "buya" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کاردکام | "gateway": "cardcom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کارت کانکت | "gateway": "cardconnect" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کاردناکس | "gateway": "cardknox" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کارتلینک | "gateway": "cardlink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کارتاستریم | "gateway": "crst" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| جریانهای نقدی | "gateway": "cashflowsgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک کاتای یونایتد | "gateway": "cathaybk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| CCAvenue امارات | "gateway": "ccavenueuae" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سی سی وی | "gateway": "ccv" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سِکابانک | "gateway": "cecabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سلریسپی | "gateway": "celerispay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سنترال پی | "gateway": "centralpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شارژهایو | "gateway": "chargehive" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| چریتی انجین | "gateway": "charityengine" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| خدمات بازرگانی چیس | "gateway": "chase" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| چکاوت.کام | "gateway": "checkoutltd" "gatewayMerchantId": "YOUR_PUBLIC_KEY" |
| سیتی پی | "gateway": "citypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| درگاه پرداخت Cloud9 (C9PG) | "gateway": "c9pg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای ابری | "gateway": "cloudpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کلودواک | "gateway": "cloudwalk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کوینفلو | "gateway": "coinflow" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کامپوترتاپ | "gateway": "computop" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کنکوردپی | "gateway": "concordpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کانکتوم | "gateway": "connectum" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کانکس پی | "gateway": "connexpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کورالپی | "gateway": "coralpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کورفی | "gateway": "paycoreio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کوروس پی | "gateway": "corvuspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کردوراکس | "gateway": "credorax" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کراس پی | "gateway": "crosspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سوئیچ متقاطع | "gateway": "crossswitch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیاسجی فورته | "gateway": "csgforte" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک سی تی بی سی | "gateway": "ctbcbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای CURO | "gateway": "curopayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سایبربیز | "gateway": "cyberbizpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سایبرسورس | "gateway": "cybersource" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دانوب.پی | "gateway": "danubepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت سیستمهای دیتاکپ | "gateway": "datatrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دیتاترنس | "gateway": "datatrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دکتا | "gateway": "decta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" بدون اسناد توسعهدهنده |
| دژاوو | "gateway": "denovosystempay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دونا | "gateway": "deuna" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دویچه بانک AG | "gateway": "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" بدون اسناد توسعهدهنده |
| دویچه بانک - راه حل های تجاری | "gateway": "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت فناوری مالی دیجی | "gateway": "veritrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| امور مالی دیجیتال | "gateway": "digitalfinance" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دینترو | "gateway": "dintero" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| محلی | "gateway": "dlocal" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای DNA | "gateway": "dnapayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دوجو | "gateway": "dojo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| داتپی | "gateway": "dotpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| e-SiTef - نرمافزار اکسپرس | "gateway": "softwareexpress" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایزی کارت | "gateway": "easycard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایزی پی | "gateway": "easypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایزی پی اتحادیه اروپا | "gateway": "easypaypt" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایبانکس | "gateway": "ebanx" "gatewayMerchantId": "YOUR_PUBLIC_INTEGRATION_KEY" |
| کارت الکترونیکی | "gateway": "ecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایکامپی | "gateway": "ecommpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اکوپاینت | "gateway": "ecopaynet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایسیپی | "gateway": "ecpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| شرکت افت | "gateway": "eftcorporation" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایجیال | "gateway": "eghl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| الاون (همگرا) | "gateway": "convergepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| امرچانتپی | "gateway": "emerchantpay" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| امسپای | "gateway": "emsonline" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| رمزگذاری شده | "gateway": "encoded" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ای پی | "gateway": "epay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت سهامی خاص EPAY | "gateway": "epayjsc" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| اپیک پی | "gateway": "epicpay" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" |
| اسپاگو | "gateway": "espago" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اتصالات | "gateway": "etisalatpaymentgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| EveryPay SA | "gateway": "EveryPay S.A." "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اورولت | "gateway": "evervault" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایونت | "gateway": "cardinfolink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایووپی | "gateway": "EVOPAY" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| درگاه پرداخت اوو | "gateway": "evopaymentgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| exact.com | "gateway": "exactly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای دقیق | "gateway": "exactpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گورخر چاق | "gateway": "fatzebra" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فنیگ | "gateway": "fenige" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فکسکو پی یونیت | "gateway": "fexco" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فیبوناتیکس | "gateway": "fibonatixparagon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| خط مالی | "gateway": "finline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فینانسو یو ای | "gateway": "finansoua" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فینکد از GMO | "gateway": "fincode" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فینکسوس | "gateway": "finexus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فینیکس | "gateway": "finix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اولین آمریکایی از برند دلوکس | "gateway": "firstpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فیو (که قبلاً خدمات بازرگانی ریزر و MOLPay نام داشت) | "gateway": "molpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| راهکارهای پرداخت FIS | "gateway": "fisglobalbsp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فیسرو | "gateway": "fiserv" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فیسرو | "gateway": "fiservipg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فلیت | "gateway": "flitt" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت سیال | "gateway": "fluidpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت مالی FM | "gateway": "fmfinanceltd" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فورتبانک | "gateway": "fortebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فراکتال | "gateway": "fractal" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک مالی فریدام | "gateway": "axayscom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فریدمپی | "gateway": "freedompay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فریدومپی.مانی | "gateway": "payboxmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فریپی | "gateway": "freepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| جریان اصلی | "gateway": "frontstreampayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای فونگ | "gateway": "fungpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای GBP | "gateway": "gbpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گیدیا | "gateway": "geidea" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گت تی آر ایکس | "gateway": "globalelectronictechnology" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گلوبال وان پی | "gateway": "globalonepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| پرداختهای جهانی | "gateway": "globalpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای جهانی | "gateway": "globalpaymentsinc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| درگاه پرداخت GMO | "gateway": "gmopg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای GoDaddy | "gateway": "godaddypayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فناوریهای ایده خوب | "gateway": "git" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گوپی | "gateway": "gopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وبپی جیپی | "gateway": "gpwebpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| پرداختهای گرانشی | "gateway": "gravitypayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گر۴وی | "gateway": "gr4vy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک هالیک | "gateway": "halykbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| هلسیم | "gateway": "helcim" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| باسن | "gateway": "hips" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| های تراست | "gateway": "hitrustpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| هوتکو | "gateway": "hutko" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| هیپ | "gateway": "hyp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایکارد | "gateway": "icardwallet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آیکانت | "gateway": "iCount" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت فناوری IDid | "gateway": "idid" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آیخوخا | "gateway": "ikhokha" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایموجی | "gateway": "imoje" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایمپایا | "gateway": "impayarus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای اینوویو | "gateway": "inoviopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اینپلات | "gateway": "inplat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اینستامد | "gateway": "instamed" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| راهکارهای اینتااسند لیمیتد | "gateway": "intasend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اینتلکت مانی | "gateway": "intellectmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| راهکارهای تراکنش تعاملی | "gateway": "interactivets" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گالری پرداخت Interswitch | "gateway": "interswitch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فاصله | "gateway": "intervale" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آیوکا فینتک | "gateway": "ioka" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آیپی۸۸ | "gateway": "ipay88" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آی پی اس آی | "gateway": "ipsi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آیکیو متریکس | "gateway": "iqmetrixpaymentservicesgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آیکسوپی | "gateway": "ixopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| جت پی | "gateway": "jetpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| جودوپی | "gateway": "judopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| کاپیتال بانک | "gateway": "eCommerceKapitalBank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کاسا | "gateway": "kassacom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کاسا۲۴پی | "gateway": "kassa24pay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کینوکس | "gateway": "kineox" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کلیکس توسط سیتادل | "gateway": "klix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کوین | "gateway": "koin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گروه کیپی | "gateway": "kpaygroup" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای لاپسا | "gateway": "lapsapayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پانک LHV | "gateway": "lhvpank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آزادی | "gateway": "liberty" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت مادام العمر | "gateway": "lifepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لایمپی | "gateway": "limepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لینکلی | "gateway": "linkly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لیکیپی | "gateway": "liqpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لیتیکون او یو | "gateway": "nuvex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لیتلپی | "gateway": "littlepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لاگ پی | "gateway": "logpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لویال | "gateway": "loyale" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لینک | "gateway": "lynck" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لیرا | "gateway": "lyra" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک مگنتیک | "gateway": "magnetiq" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مایب | "gateway": "maibecomm" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| میک کامرس (Maksekeskus) | "gateway": "maksekeskus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت ماکسو جی ام بی اچ | "gateway": "maksupayeu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ماندارین | "gateway": "mandarin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت بازار | "gateway": "marketpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| خدمات درگاه پرداخت مسترکارت | "gateway": "mpgs" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مرچنت ای | "gateway": "merchante" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| میدترانس | "gateway": "midtrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| جنگجوی تاجر | "gateway": "merchantwarrior" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیستمهای پرداخت مینسایت | "gateway": "minsaitpaymentsgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| میتک | "gateway": "mitecmx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| میکسپلات | "gateway": "mixplat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پول موبی | "gateway": "mobimoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مدولبانک | "gateway": "modulbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مولی | "gateway": "mollie" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| موندیدو | "gateway": "mondido" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مونی | "gateway": "monei" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مونک | "gateway": "monek" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مونریس | "gateway": "moneris" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مونتا | "gateway": "moneta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| مونِکسِت | "gateway": "monext" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مانی هش | "gateway": "moneyhash" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پول.میل.رو | "gateway": "moneymailru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مونریپیمنتها | "gateway": "monripayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| موو | "gateway": "moov" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| امپی | "gateway": "managepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شروع مجدد | "gateway": "mstartipg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مولتیکارتا | "gateway": "mulitcarta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت چندگانه | "gateway": "multisafepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| موندیپاگ | "gateway": "mundipagg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مای چک | "gateway": "mycheck" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مایچویس۲پی | "gateway": "mychoice2pay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| من فتوره | "gateway": "myfatoorah"
"gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مای پی | "gateway": "mypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| مای پوز (myPOS) | "gateway": "mypos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گروه N&TS | "gateway": "netsgroup" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ان سی سی سی | "gateway": "nccc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نئولینک | "gateway": "neolinkprocessing" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت نئون | "gateway": "neonpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نتوپیا | "gateway": "netopia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نت والو | "gateway": "netvalve" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شبکه بینالمللی | "gateway": "networkintl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نیوبپی (که قبلاً STPath، Pay2Go نام داشت) | "gateway": "newebpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نیوتک | "gateway": "newtechmobile" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نکسی | "gateway": "nexi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نکسی ایزی | "gateway": "easy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ان ام آی | "gateway": "gatewayservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای ظهر | "gateway": "noonpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نوکودی پی | "gateway": "noqoodypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نووالنت | "gateway": "novalnet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| رله نکسی | "gateway": "nexirelay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| دادههای NTT | "gateway": "nttdatahk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نووی | "gateway": "nuvei" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اوشنپیمنت | "gateway": "oceanpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اومیزه | "gateway": "omise" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| امنو | "gateway": "omno" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وان اینک | "gateway": "oneinc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اونلیا | "gateway": "onelya" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" |
| وانروی | "gateway": "ronghan" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" |
| وان ویژن لیمیتد | "gateway": "onevision" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" |
| آنپی | "gateway": "onpayio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اوپایو اثر الاون | "gateway": "opayoelavon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ارکسترپی | "gateway": "orkestapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اوشادبانک | "gateway": "oschadbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پاگارمه | "gateway": "pagarme" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پاگبانک | "gateway": "pagbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پاگبراسیل | "gateway": "pagbrasil" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پاگسگورو | "gateway": "pagsegurointernational" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی تو ام | "gateway": "pay2m" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایارک | "gateway": "payarc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی.کام | "gateway": "paycom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیکامت | "gateway": "paycomet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت پیکراس | "gateway": "paycross" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی داک | "gateway": "paydock" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت آسان | "gateway": "payeasenet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| موتور پرداخت | "gateway": "payengine" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایرمکس | "gateway": "payermax" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی فابریک | "gateway": "payfabric" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیفکتو | "gateway": "payfacto" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت سریع | "gateway": "gopayfastuat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت کننده | "gateway": "paygent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیهاب | "gateway": "payhub" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایکاکا | "gateway": "paykkaeu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیلین | "gateway": "paylane" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایلر | "gateway": "payler" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیلینک® | "gateway": "paylink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بار مفید | "gateway": "payload" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیمارک | "gateway": "paymark" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی مستر | "gateway": "paymaster" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ادغام پرداخت | "gateway": "paymentfusion" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت ویژن | "gateway": "paymentvision" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت از طریق دیوار پرداخت | "gateway": "paymentwall" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایمو | "gateway": "paymo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیموب | "gateway": "gpaymob" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی مونگو | "gateway": "paymongo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیمتک | "gateway": "paymtech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت نزدیک من | "gateway": "paynearme" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پینتایزی | "gateway": "payneteasy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت.nl | "gateway": "paynl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پاینوپین | "gateway": "paynopain" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی وان | "gateway": "payone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت آنلاین | "gateway": "payonline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایو | "gateway": "payoo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نظریه پرداخت | "gateway": "paytheory" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیپلاس | "gateway": "payplus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت خصوصی پیپرو | "gateway": "paypro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| ریلهای پرداخت | "gateway": "payrails" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایرکس | "gateway": "payrexx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی ریف | "gateway": "payriff" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایریکس | "gateway": "payrix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیسیف | "gateway": "paysafe" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیاسکات | "gateway": "payscout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کسب و کار پیسند | "gateway": "paysend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیسافت | "gateway": "paysoft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی۳۶۰ | "gateway": "pay360" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیتک | "gateway": "paytechsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیتک اوکراین | "gateway": "paytech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| درگاه پرداخت پیتن | "gateway": "paytentr" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایترو | "gateway": "paythru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت | "gateway": "payture" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پی یو | "gateway": "payu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پییو لاتام | "gateway": "payulatam" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایونی | "gateway": "payuni" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پییو رومانی | "gateway": "payuro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پییو روسیه | "gateway": "payuru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت | "gateway": "payway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیوایزر | "gateway": "paywiser" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| منطقه پایز ایرلند | "gateway": "payzoneireland" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| خدمات دروازه PBT با مسئولیت محدود | "gateway": "pbtgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پلکارد | "gateway": "pelecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پنسوپی | "gateway": "pensopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیکاسا | "gateway": "pikassa" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پینگپنگ | "gateway": "pingpongx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای پین | "gateway": "pinpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیاره | "gateway": "cccpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پلنت پی | "gateway": "itcardpaymentservice" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Plategka.com | "gateway": "plategkacom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| افلاطون | "gateway": "platon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پوملو | "gateway": "pomelopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پورتمون | "gateway": "portmonecom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرسزن | "gateway": "preczn" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرایمپی | "gateway": "primepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرایمر | "gateway": "primer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پروکارت | "gateway": "procard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پردازش | "gateway": "processout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرزلوی۲۴ | "gateway": "przelewy24" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیاسسیبی | "gateway": "pscbru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت پیاسآیگیت | "gateway": "psigate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پیاکسپی فایننشال | "gateway": "pxpfinancial" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت Qenta CEE | "gateway": "qenta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کیوی | "gateway": "qiwi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کوالپی | "gateway": "qualpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت سریع | "gateway": "quickpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کیووالنت | "gateway": "qvalent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شعاعی | "gateway": "radial" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مرکز پردازش رایفایزن | "gateway": "raiffeisenprocessingcentre" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| رپید | "gateway": "rapyd" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پول آر بی کی | "gateway": "rbkmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سرمایه گذاری مجدد | "gateway": "rebailcapital" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ربیلی | "gateway": "Rebilly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مکرراً | "gateway": "recurly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| رددات | "gateway": "reddotpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| رید | "gateway": "rede" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ردسیس | "gateway": "redsys" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ریپی | "gateway": "reepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| راکتگیت | "gateway": "rocketgate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| روتلاین | "gateway": "rootline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک استاندارد روسیه | "gateway": "rsb" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ریفت | "gateway": "ryft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت امن | "gateway": "safepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیفرپی | "gateway": "worldlinesaferpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیفاکسپی | "gateway": "safexpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اسبربانک | "gateway": "sberbank" "gatewayMerchantId": "YOUR_ORGANIZATION_NAME" |
| اس ای بی بالتیک | "gateway": "sebbaltic" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| فناوری SEBES | "gateway": "sebes" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت امن | "gateway": "securepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک سنس | "gateway": "sensebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سنسپس | "gateway": "sensepass" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| Servicios Digitales Popular SA | "gateway": "pagosazul" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شیفت۴ | "gateway": "shift4payments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| گروه شیجی | "gateway": "shijipaymentsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شروع با سرعت بالا | "gateway": "shstartpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شوارناپای | "gateway": "shvarenapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیمباسافت | "gateway": "simbasoft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیپای | "gateway": "sipay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت هوشمند | "gateway": "smartpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سرویس پرداخت سافتبانک | "gateway": "sbps" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پایانه فروش و پرداخت Softtouch | "gateway": "softtouch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| جامد | "gateway": "solid" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| خدمات پرداخت سونی | "gateway": "sonypaymentservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اسپلیتیت | "gateway": "splitit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| به سرعت | "gateway": "spreedly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مربع | "gateway": "square" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سردا پی | "gateway": "sredapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| SSLCOMMERZ | "gateway": "sslcommerz" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| استنسر | "gateway": "stancer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نوار | "gateway": "stripe" "stripe:version": "2018-10-31" "stripe:publishableKey": "YOUR_PUBLIC_STRIPE_KEY" |
| سامیت | "gateway": "sumit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سانتک | "gateway": "esafe" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای تخته موجسواری | "gateway": "surfboard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| بانک اسوا | "gateway": "svea" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سوئدبانک بالتیک | "gateway": "swedbankbaltic" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سوئدبانک پی | "gateway": "payexswedbankpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تاباپی | "gateway": "tabapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تپپی (چری تک) | "gateway": "tappay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تپپیمنت | "gateway": "tappayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای تارلان | "gateway": "tarlanpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| لینک TAS | "gateway": "taslink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تاترا بانکا (کارت پی) | "gateway": "tatrabanka" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| تکو | "gateway": "teko" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نقشه | "gateway": "themap" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای صندوق | "gateway": "tillpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت پروژه زمان | "gateway": "timeproject" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تینکوف | "gateway": "tinkoff" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت تیپتاپ | "gateway": "tiptoppay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| تیپی | "gateway": "tpaycom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تیپی | "gateway": "tpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پردیس تراکنش | "gateway": "transactcampus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تراکنش پرو | "gateway": "transactpro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شبکه خدمات تراکنش | "gateway": "tns" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ترانسپیرنت | "gateway": "transpayrent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ترانزیلا | "gateway": "tranzila" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ترانزو | "gateway": "tranzzo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای قبیلهای | "gateway": "tribepayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ترووو | "gateway": "truevo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| تراست پی | "gateway": "trustpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداختهای امانی | "gateway": "trustpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ماهی تن | "gateway": "tuna" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| 2can و ibox | "gateway": "twocan" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یوپی | "gateway": "uapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یو بی آر آر | "gateway": "ubrrpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اوکراینکارتپی | "gateway": "ukrcardpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| پرداخت UkrGasBank | "gateway": "ukrgasbankpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت سهامی خاص یونی بانک | "gateway": "unibankcheckout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت مالی متحد | "gateway": "unitedfinancialcorporation" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یونیتلر | "gateway": "uniteller" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| واحدپی | "gateway": "unitpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| نامحدود | "gateway": "unlimint" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اونزر | "gateway": "unzer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اتریش | "gateway": "unzeraustria" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یو پی سی | "gateway": "upc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| آپگیت | "gateway": "upgate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یو اس ای پی | "gateway": "usaepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یوزپی | "gateway": "useepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| شرکت USIO | "gateway": "usio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ولیتور | "gateway": "valitor" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ارزش.io | "gateway": "inspirecommerce" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وانکو | "gateway": "vanco" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ونتیجپی | "gateway": "vantagepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| وانتیف | "gateway": "vantiv" "vantiv:merchantPayPageId": "YOUR_PAY_PAGE_ID" "vantiv:merchantOrderId": "YOUR_ORDER_ID" "vantiv:merchantTransactionId": "YOUR_TRANSACTION_ID" "vantiv:merchantReportGroup": "*web" |
| وایاپای | "gateway": "vayapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| وندو | "gateway": "vendoservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ورسترو | "gateway": "verestro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| امنیت بسیار خوب | "gateway": "verygoodsecurity" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ویکتوریابانک | "gateway": "victoriabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ویندیسیا | "gateway": "vindicia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| کیف پول ویوا | "gateway": "vivawallet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ویتکس | "gateway": "vtex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وافو | "gateway": "waffo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| والی | "gateway": "wallee" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| والت داک | "gateway": "walletdoc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| والتتو | "gateway": "walletto" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وی فور پی | "gateway": "wayforpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| خوردن | "gateway": "weatpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| چه زمانی آنگاه | "gateway": "whenthen" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| غار بادی | "gateway": "windcave" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وایربنک | "gateway": "wirebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وایرکارد | "gateway": "wirecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ووپی | "gateway": "wooppay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ووشپی | "gateway": "swooshtransfer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| وردلاین (گلوبال کالکت) | "gateway": "globalcollect" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ورلدلاین - اینجنیکو (پرداخت آنلاین WL) | "gateway": "worldlineingenicoogone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ورلدلاین نوردیکس (پرداخت آنلاین ورلدلاین) | "gateway": "worldlineonlinecheckout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| جرعههای ورلدلاین | "gateway": "wlsips" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ورلدنت | "gateway": "worldnet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ورلدپی | "gateway": "worldpay" "gatewayMerchantId": "YOUR_WORLDPAY_MERCHANT_ID" |
| ویپی | "gateway": "wpayaus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| WSPay | "gateway": "wspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایکس مانی | "gateway": "xmoneypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| XPATE | "gateway": "xpate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ایکس پی | "gateway": "xpaycomua" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| XPay توسط PostEx | "gateway": "xpaybypostex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یابندپی بی وی | "gateway": "yabandpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| سیستم پرداخت ییجیم | "gateway": "yigim" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" هیچ سند توسعهدهندهای موجود نیست |
| ای کاسا (یوکاسا) | "gateway": "yoomoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| یونو | "gateway": "yuno" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| اعتبار Z | "gateway": "zcredit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| زالوپای | "gateway": "zalopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| ZEN.com | "gateway": "zen" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| مزه | "gateway": "zestpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
| زورا | "gateway": "zuora" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" |
example یک نام معتبر برای درگاه در محیط آزمایشی است. اگر میخواهید API را امتحان کنید، میتوانید نمونه کد بالا را به همین صورت رها کنید. وقتی از درگاه example استفاده میکنید، سایت شما دادههای کارت با قابلیت تراکنش را دریافت نمیکند، اما جریان کاربری به همان شکل باقی میماند. نوع توکنسازی PAYMENT_GATEWAY رایجترین پیادهسازی روش پرداخت کارت در API گوگل پی توسط فروشندگان است. اگر ارائهدهنده پرداخت شما پشتیبانی نمیشود، ممکن است بتوانید گوگل پی را با ادغام DIRECT بپذیرید. برای اطلاعات بیشتر، به مستندات توکنسازی مستقیم مراجعه کنید.
مرحله ۳: شبکههای کارت پرداخت پشتیبانیشده را تعریف کنید
شبکههای کارتی مورد پذیرش سایت خود را تعریف کنید. به نمونه کد زیر مراجعه کنید:
const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];
API گوگل پی ممکن است کارتهای موجود در فایل Google.com ( PAN_ONLY ) یا توکن دستگاه روی یک دستگاه اندروید که با رمزنگاری امن سهبعدی ( CRYPTOGRAM_3DS ) تأیید شده است را برگرداند. شما میتوانید کنترل کنید که آیا هر دو روش یا فقط یکی از آنها قابل برگشت باشد.
قبل از تنظیم allowedCardAuthMethods ، با پردازنده پرداخت و پذیرنده خود تأیید کنید که آیا توکنهای دستگاه ( CRYPTOGRAM_3DS ) در منطقه شما پشتیبانی میشوند یا خیر.
نمونه کد زیر را ببینید:
const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];
برای اطلاعات بیشتر، به CardParameters در مستندات مرجع Object ما مراجعه کنید. همچنین، با درگاه یا پردازنده خود، شبکههای کارتی که پشتیبانی میشوند و همچنین پشتیبانی از توکنهای دستگاه اندروید را بررسی کنید.
- مطمئن شوید که بررسیها و کنترلهای ریسک موجود برای تراکنشهای پرداخت را برای تراکنشهای Google Pay نیز اعمال میکنید. اعتبارسنجی و بررسیهای کلاهبرداری Google Pay قرار نیست جایگزین فرآیندهای مدیریت ریسک شما شوند.
- اگر از
PAN_ONLYپشتیبانی میکنید، مطمئن شوید که 3D Secure (احراز هویت پیشرفته) را برای تراکنشهای PANPAN_ONLYگوگل پی، به همان روشی که 3D Secure را برای تراکنشهای معمولی کارت فعال میکنید، فعال میکنید.
مرحله ۴: روشهای پرداخت مجاز خود را شرح دهید
برای توصیف روشهای پرداخت مجاز خود، مراحل زیر را انجام دهید:
- روشهای احراز هویت پشتیبانیشده و شبکههای کارتی پشتیبانیشده خود را ترکیب کنید تا پشتیبانی سایت خود را از روش پرداخت
CARDتوصیف کنید. به نمونه کد زیر مراجعه کنید:const baseCardPaymentMethod = { type: 'CARD', parameters: { allowedAuthMethods: allowedCardAuthMethods, allowedCardNetworks: allowedCardNetworks } };
- شیء روش پرداخت کارت پایه را طوری توسعه دهید که اطلاعاتی را که انتظار دارید به برنامه شما بازگردانده شود، توصیف کند. توضیحی در مورد دادههای پرداخت توکنشده نیز اضافه کنید. به نمونه کد زیر مراجعه کنید:
const cardPaymentMethod = Object.assign( {tokenizationSpecification: tokenizationSpecification}, baseCardPaymentMethod );
برای اطلاعات بیشتر در مورد parameters پشتیبانی شده، به CardParameters مراجعه کنید.
گوگل پی در حال حاضر فقط از روش پرداخت CARD پشتیبانی میکند.
مرحله 5: بارگذاری کتابخانه جاوا اسکریپت Google Pay API
برای بارگذاری کتابخانه جاوا اسکریپت Google Pay API، مراحل زیر را انجام دهید:
- جاوا اسکریپت میزبانی شده توسط گوگل را در صفحه خود قرار دهید. به نمونه کد زیر مراجعه کنید:
<script async src="https://pay.google.com/gp/p/js/pay.js" onload="console.log('TODO: add onload function')"> </script> - پس از بارگذاری کتابخانه جاوا اسکریپت Google Pay API، یک شیء
PaymentsClientمقداردهی اولیه کنید. توسعه اولیه از یک محیطTESTاستفاده میکند که روشهای پرداخت ساختگی را برمیگرداند که برای ارجاع به ساختار پاسخ پرداخت مناسب هستند. در این محیط، روش پرداخت انتخاب شده قادر به انجام تراکنش نیست. به نمونه کد زیر مراجعه کنید.نکته : توصیه میکنیم که فقط یک بارpaymentsClientمقداردهی اولیه کنید. از همین نمونه هنگام فراخوانی سایر APIها مانندCreateButton،IsReadyToPay،PrefetchPaymentDataوLoadPaymentDataاستفاده کنید.const paymentsClient = new google.payments.api.PaymentsClient({environment: 'TEST'});
برای اطلاعات بیشتر در مورد الزامات یک محیط
PRODUCTIONکه روشهای پرداخت کارمزدی را برمیگرداند، به چکلیست ادغام مراجعه کنید.
مرحله ۶: آمادگی برای پرداخت با API گوگل پی را تعیین کنید
برای تعیین آمادگی برای پرداخت با API گوگل پی، مراحل زیر را انجام دهید:
- روشهای پرداخت مجاز خود را به شیء درخواست پایه خود اضافه کنید. نمونه کد زیر را ببینید:
const isReadyToPayRequest = Object.assign({}, baseRequest); isReadyToPayRequest.allowedPaymentMethods = [baseCardPaymentMethod];
- برای تعیین اینکه آیا API گوگل پی توسط دستگاه و مرورگر فعلی برای روشهای پرداخت مشخص شده شما پشتیبانی میشود یا خیر، تابع
isReadyToPay()را فراخوانی کنید. به نمونه کد زیر مراجعه کنید:paymentsClient.isReadyToPay(isReadyToPayRequest) .then(function(response) { if (response.result) { // add a Google Pay payment button } }) .catch(function(err) { // show error in developer console for debugging console.error(err); });
مرحله ۷: دکمه پرداخت گوگل پی را اضافه کنید
یک دکمه پرداخت گوگل پی به صفحه خود اضافه کنید تا خریداران را تشویق کنید تا با روشهای پرداختی که توسط API گوگل پی و سایت شما پشتیبانی میشوند، خرید خود را انجام دهند. برای اطلاعات بیشتر در مورد انواع دکمههای موجود، رنگها و الزامات نمایش، به دستورالعملهای برند مراجعه کنید.
نمونه کد دکمه پرداخت زیر را ببینید:
const button = paymentsClient.createButton({onClick: () => console.log('TODO: click handler'), allowedPaymentMethods: []}); // same payment methods as for the loadPaymentData() API call document.getElementById('container').appendChild(button);
مرحله ۸: ایجاد یک شیء PaymentDataRequest
برای ایجاد یک شیء PaymentDataRequest ، مراحل زیر را انجام دهید:
- یک شیء جاوا اسکریپت بسازید که پشتیبانی سایت شما از API گوگل پی را توصیف کند. برای لیست کامل ویژگیهای پشتیبانیشده، به
PaymentDataRequestمراجعه کنید. نمونه کد زیر را ببینید:const paymentDataRequest = Object.assign({}, baseRequest);
- روشهای پرداخت پشتیبانیشده توسط برنامه خود، مانند هرگونه پیکربندی دادههای اضافی که در پاسخ انتظار میرود را اضافه کنید. نمونه کد زیر را ببینید:
paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
- قیمت کل و واحد پول را برای تأیید توسط خریدار تعریف کنید. به نمونه کد زیر مراجعه کنید:مهم : فروشندگانی که تراکنشها را در منطقه اقتصادی اروپا (EEA) یا هر کشور دیگری که مشمول احراز هویت قوی مشتری (SCA) است، پردازش میکنند، باید پارامترهای
countryCode،totalPriceوmerchantNameرا برای برآورده کردن الزامات SCA لحاظ کنند.paymentDataRequest.transactionInfo = { totalPriceStatus: 'FINAL', totalPrice: '123.45', currencyCode: 'USD', countryCode: 'US' };
- یک نام تجاری قابل مشاهده توسط کاربر ارائه دهید و در حالت
TESTاز مقدارTESTmerchantIdما استفاده کنید. برای جزئیات بیشتر و کسب اطلاعات در مورد زمان جایگزینی مقدارTESTmerchantId، بهMerchantInfoمراجعه کنید. نمونه کد زیر از یک نام تجاری قابل مشاهده توسط کاربر را ببینید:paymentDataRequest.merchantInfo = { merchantName: 'Example Merchant' merchantId: '12345678901234567890' };
توجه : مقدارTESTmerchantIdما عددی است. مقدار خاصmerchantIdشما میتواند عددی یا حرفی-عددی باشد. برای جزئیات بیشتر در مورد نحوه به دست آوردنmerchantIdخاص خود، MerchantInfo را بررسی کنید.
مرحله ۹: ثبت یک کنترلکننده رویداد برای حرکات کاربر
برای ثبت یک کنترلکننده رویداد برای حرکات کاربر، مراحل زیر را انجام دهید:
- یک رویداد کلیک برای دکمه خرید ثبت کنید. رویداد بلافاصله پس از تعامل با دکمه پرداخت Google Pay، تابع
loadPaymentData()را فراخوانی میکند. - پس از اینکه یک کاربر گوگل به سایت شما اجازه دریافت اطلاعات مربوط به روش پرداخت انتخابی کاربر و اطلاعات تماس اختیاری را داد، پاسخ را از API گوگل پی مدیریت کنید.
- توکن پرداخت را از پاسخ
paymentDataاستخراج کنید. اگر یکپارچهسازی درگاه را پیادهسازی کردهاید، این توکن را بدون هیچ تغییری به درگاه خود منتقل کنید.توجه : در یک محیطTEST، پاسخ پرداخت شامل خلاصهای از دادههای مربوط به روش پرداخت انتخاب شده است که برای نمایش در صفحه تأیید مناسب است. پاسخ پرداخت شامل روش پرداختی که قابلیت انجام تراکنش را داشته باشد، نمیشود.paymentsClient.loadPaymentData(paymentDataRequest).then(function(paymentData){ // if using gateway tokenization, pass this token without modification paymentToken = paymentData.paymentMethodData.tokenizationData.token; }).catch(function(err){ // show error in developer console for debugging console.error(err); });
مرحله 10 (اختیاری): تنظیم مجوز پرداختها
«مجاز کردن پرداختها» برای شروع فرآیند پرداخت و تأیید وضعیت مجوز پرداخت استفاده میشود. برای تنظیم «مجاز کردن پرداختها»، مراحل زیر را انجام دهید:
- یک تابع فراخوانی
onPaymentAuthorized()درPaymentOptionsثبت کنید. - تابع
loadPaymentData()را با هدف فراخوانیPAYMENT_AUTHORIZATIONفراخوانی کنید. - پیادهسازی
onPaymentAuthorized().
ثبت نام در پرداخت های مجاز
نمونه کد زیر نحوه ثبت فراخوانیهای onPaymentAuthorized را نشان میدهد:
{ environment: "TEST", merchantInfo: { merchantName: "Example Merchant", merchantId: "12345678901234567890" }, paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized } }
بارگذاری دادههای پرداخت با اهداف فراخوانی مجدد
نمونه کد زیر نحوه مقداردهی اولیه برگه پرداخت با Authorize Payments را نشان میدهد:
const paymentDataRequest = Object.assign({}, baseRequest); paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod]; paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); paymentDataRequest.merchantInfo = { merchantName: 'Example Merchant' merchantId: '12345678901234567890', }; paymentDataRequest.callbackIntents = ["PAYMENT_AUTHORIZATION"];
رسیدگی به فراخوانیهای مجاز در پرداخت
تابع فراخوانی onPaymentAuthorized() پس از تأیید پرداختکننده از طریق یک اشاره کاربر، مانند کلیک روی پرداخت ، توسط گوگل با یک شیء PaymentData فراخوانی میشود.
تابع فراخوانی، مقدار Promise<PaymentAuthorizationResult> را برمیگرداند. شیء PaymentAuthorizationResult دارای وضعیت تراکنش SUCCESS یا ERROR است. در صورت موفقیت، برگه پرداخت با موفقیت بسته میشود. اگر با خطایی مواجه شوید، برگه پرداخت جزئیات خطایی را که پس از پردازش پرداخت برگردانده شده است، نمایش میدهد. کاربر میتواند دادههای پرداخت برگه پرداخت را تغییر داده و دوباره پرداخت را تأیید کند. به نمونه کد زیر مراجعه کنید:
function onPaymentAuthorized(paymentData) { return new Promise(function(resolve, reject){ // handle the response processPayment(paymentData) .then(function() { resolve({transactionState: 'SUCCESS'}); }) .catch(function() { resolve({ transactionState: 'ERROR', error: { intent: 'PAYMENT_AUTHORIZATION', message: 'Insufficient funds', reason: 'PAYMENT_DATA_INVALID' } }); }); }); }
مرحله 11 (اختیاری برای فعال بودن ارسال): تنظیم بهروزرسانیهای پویای قیمت
بهروزرسانیهای پویای قیمت به فروشنده اجازه میدهد تا گزینههای ارسال و اطلاعات تراکنش را بر اساس آدرس ارسال انتخابشده، بهصورت پویا بهروزرسانی کند. علاوه بر این، شما میتوانید اطلاعات تراکنش را بر اساس گزینه ارسال انتخابشده، بهصورت پویا بهروزرسانی کنید.
برای تنظیم بهروزرسانیهای پویای قیمت، مراحل زیر را انجام دهید:
- هر دو تابع فراخوانی
onPaymentAuthorizedوonPaymentDataChangedرا درPaymentOptionsثبت کنید. - تابع
loadPaymentData()را با اهداف فراخوانی فراخوانی کنید. برای جزئیات بیشتر، به مثال مربوطه مراجعه کنید. - پیادهسازی
onPaymentAuthorizedوonPaymentDataChanged
فراخوانی مجدد PaymentData را ثبت کنید
نمونه کد زیر نشان میدهد که بهروزرسانیهای پویای قیمت نیازمند ثبت توابع فراخوانی در شیء PaymentsClient paymentOptions هستند.
{ environment: "TEST", merchantInfo: { merchantName: "Example Merchant", merchantId: "12345678901234567890" }, paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged } }
بارگذاری دادههای پرداخت با اهداف فراخوانی مجدد
نمونه کد زیر نشان میدهد که چگونه یک برگه پرداخت باید با آدرس ارسال مورد نیاز و پیکربندی گزینههای ارسال، مقداردهی اولیه شود:
const paymentDataRequest = Object.assign({}, baseRequest); paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod]; paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); paymentDataRequest.merchantInfo = { merchantId: '12345678901234567890', merchantName: 'Example Merchant' }; paymentDataRequest.callbackIntents = ["SHIPPING_ADDRESS", "SHIPPING_OPTION", "PAYMENT_AUTHORIZATION"]; paymentDataRequest.shippingAddressRequired = true; paymentDataRequest.shippingAddressParameters = getGoogleShippingAddressParameters(); paymentDataRequest.shippingOptionRequired = true;
تابع فراخوانی onPaymentDataChanged را مدیریت کنید
تابع فراخوانی onPaymentDataChanged با یک شیء IntermediatePaymentData فراخوانی میشود که شامل آدرس ارسال و گزینه ارسال انتخاب شده در برگه پرداخت است.
تابع فراخوانی، یک Promise<PaymentDataRequestUpdate> برمیگرداند. شیء PaymentDataRequestUpdate شامل اطلاعات تراکنش جدید، گزینههای ارسال و یک خطای دادههای پرداخت است. این دادهها، برگه پرداخت را بهروزرسانی میکنند.
هرگونه مورد استثنا، مانند آدرس ارسال نامناسب یا گزینه ارسال نامعتبر، را مستقیماً در برگه پرداخت مدیریت کنید. یک شیء PaymentDataError تنظیم کنید تا دلیل خطا را با یک پیام خطا به کاربر نشان دهد. حتماً هدف مرتبط را در پیام بگنجانید. برای جزئیات بیشتر در مورد نحوه تنظیم شیء و پیام، به نمونه کد زیر مراجعه کنید:
function onPaymentDataChanged(intermediatePaymentData) { return new Promise(function(resolve, reject) { let shippingAddress = intermediatePaymentData.shippingAddress; let shippingOptionData = intermediatePaymentData.shippingOptionData; let paymentDataRequestUpdate = {}; if (intermediatePaymentData.callbackTrigger == "INITIALIZE" || intermediatePaymentData.callbackTrigger == "SHIPPING_ADDRESS") { if(shippingAddress.administrativeArea == "NJ") { paymentDataRequestUpdate.error = getGoogleUnserviceableAddressError(); } else { paymentDataRequestUpdate.newShippingOptionParameters = getGoogleDefaultShippingOptions(); let selectedShippingOptionId = paymentDataRequestUpdate.newShippingOptionParameters.defaultSelectedOptionId; paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(selectedShippingOptionId); } } else if (intermediatePaymentData.callbackTrigger == "SHIPPING_OPTION") { paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(shippingOptionData.id); } resolve(paymentDataRequestUpdate); }); }
مرحله ۱۲ (اختیاری برای کدهای تخفیف): تنظیم کدهای تخفیف
کدهای تخفیف به فروشنده این امکان را میدهند که گزینههای ارسال و اطلاعات تراکنش را بر اساس کد تخفیف ارائه شده، به صورت پویا بهروزرسانی کند.
برای تنظیم کدهای تخفیف، مراحل زیر را دنبال کنید:
- کالبکهای
onPaymentDataChangedرا درPaymentOptionsثبت کنید. - تابع
loadPaymentData()را با اهداف فراخوانی فراخوانی کنید. برای جزئیات بیشتر، به مثال مربوطه مراجعه کنید. - تابع
onPaymentDataChanged callback functionپیادهسازی کنید.
ثبت پیشنهاد تماس مجدد
نمونه کد زیر نشان میدهد که کدهای تخفیف نیاز به توابع فراخوانی دارند که در شیءPaymentsClient paymentOptions ثبت شوند.
{ environment: "TEST", merchantInfo: { merchantName: "Example Merchant", merchantId: "12345678901234567890" }, paymentDataCallbacks: { onPaymentDataChanged: onPaymentDataChanged } }
بارگذاری دادههای پرداخت با اهداف فراخوانی مجدد
نمونه کد زیر نشان میدهد که چگونه یک برگه پرداخت باید با یک هدف فراخوانی OFFER مقداردهی اولیه شود:
const paymentDataRequest = Object.assign({}, baseRequest); paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod]; paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); paymentDataRequest.merchantInfo = { merchantId: '12345678901234567890', merchantName: 'Example Merchant' }; paymentDataRequest.callbackIntents = ["OFFER"];
تابع فراخوانی onPaymentDataChanged را مدیریت کنید
تابع فراخوانی onPaymentDataChanged با یک شیء IntermediatePaymentData فراخوانی میشود که شامل آدرس ارسال و گزینه ارسال انتخاب شده در برگه پرداخت است.
تابع فراخوانی باید یک Promise<PaymentDataRequestUpdate> برگرداند. شیء PaymentDataRequestUpdate شامل اطلاعات تراکنش جدید، گزینههای ارسال، دادههای پیشنهاد و یک خطای مربوط به دادههای پرداخت است. این دادهها برگه پرداخت را بهروزرسانی میکنند.
هرگونه مورد استثنا، مانند کد تخفیف نامعتبر، را مستقیماً در برگه پرداخت مدیریت کنید. یک شیء PaymentDataError تنظیم کنید تا دلیل خطا را با یک پیام خطا به کاربر نشان دهد. حتماً هدف مرتبط را در پیام بگنجانید. برای جزئیات بیشتر در مورد نحوه تنظیم شیء و پیام، به نمونه کد زیر مراجعه کنید که به یک شیء (validPromoCodes) حاوی مقادیر کد تخفیف اشاره دارد:
function onPaymentDataChanged(intermediatePaymentData) { return new Promise(function(resolve, reject) { let redemptionCodes = []; let shippingOptionData = intermediatePaymentData.shippingOptionData; let paymentDataRequestUpdate = {}; paymentDataRequestUpdate.newTransactionInfo = getGoogleTransactionInfo(); // ensure that promo codes set is unique if(typeof intermediatePaymentData.offerData != 'undefined') { // convert to set then back to array redemptionCodes = Array.from( new Set(intermediatePaymentData.offerData.redemptionCodes) ); } // OPTIONAL: ensure that the newest promo code is the only one applied // redemptionCodes = new Array(redemptionCodes[redemptionCodes.length -1]); // validate promo codes and add descriptions to payment sheet if (intermediatePaymentData.callbackTrigger === 'OFFER') { paymentDataRequestUpdate.newOfferInfo = {}; paymentDataRequestUpdate.newOfferInfo.offers = []; for (redemptionCode of redemptionCodes) { if (validPromoCodes[redemptionCode]) { paymentDataRequestUpdate = validPromoCodes[redemptionCode].function( validPromoCodes[redemptionCode], paymentDataRequestUpdate ); } else { paymentDataRequestUpdate.error = getGoogleOfferInvalidError(redemptionCode); } } }
همه را کنار هم بگذارید
بلوکهای کد نمونه در این بخش، یک مثال کامل از آموزش کتابخانه جاوا اسکریپت Google Pay API، پرداختهای مجاز، بهروزرسانیهای قیمت پویا و کدهای تخفیف را نشان میدهند.
آموزش
<div id="container"></div><script>/** * Define the version of the Google Pay API referenced when creating your * configuration * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest} */ const baseRequest = { apiVersion: 2, apiVersionMinor: 0 }; /** * Card networks supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm card networks supported by your site and gateway */ const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"]; /** * Card authentication methods supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm your processor supports Android device tokens for your * supported card networks */ const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"]; /** * Identify your gateway and your site'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 * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification} */ const tokenizationSpecification = { type: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleGatewayMerchantId' } }; /** * Describe your site's support for the CARD payment method and its required * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const baseCardPaymentMethod = { type: 'CARD', parameters: { allowedAuthMethods: allowedCardAuthMethods, allowedCardNetworks: allowedCardNetworks } }; /** * Describe your site's support for the CARD payment method including optional * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const cardPaymentMethod = Object.assign( {}, baseCardPaymentMethod, { tokenizationSpecification: tokenizationSpecification } ); /** * An initialized google.payments.api.PaymentsClient object or null if not yet set * * @see {@link getGooglePaymentsClient} */ let paymentsClient = null; /** * Configure your site's support for payment methods supported by the Google Pay * API. * * Each member of allowedPaymentMethods should contain only the required fields, * allowing reuse of this base request when determining a viewer's ability * to pay and later requesting a supported payment method * * @returns {object} Google Pay API version, payment methods supported by the site */ function getGoogleIsReadyToPayRequest() { return Object.assign( {}, baseRequest, { allowedPaymentMethods: [baseCardPaymentMethod] } ); } /** * Configure support for the Google Pay API * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest} * @returns {object} PaymentDataRequest fields */ function getGooglePaymentDataRequest() { const paymentDataRequest = Object.assign({}, baseRequest); paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod]; paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); paymentDataRequest.merchantInfo = { // @todo a merchant ID is available for a production environment after approval by Google // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist} // merchantId: '12345678901234567890', merchantName: 'Example Merchant' }; return paymentDataRequest; } /** * Return an active PaymentsClient or initialize * * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor} * @returns {google.payments.api.PaymentsClient} Google Pay API client */ function getGooglePaymentsClient() { if ( paymentsClient === null ) { paymentsClient = new google.payments.api.PaymentsClient({environment: 'TEST'}); } return paymentsClient; } /** * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded * * Display a Google Pay payment button after confirmation of the viewer's * ability to pay. */ function onGooglePayLoaded() { const paymentsClient = getGooglePaymentsClient(); paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest()) .then(function(response) { if (response.result) { addGooglePayButton(); // @todo prefetch payment data to improve performance after confirming site functionality // prefetchGooglePaymentData(); } }) .catch(function(err) { // show error in developer console for debugging console.error(err); }); } /** * Add a Google Pay purchase button alongside an existing checkout button * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options} * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines} */ function addGooglePayButton() { const paymentsClient = getGooglePaymentsClient(); const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked, allowedPaymentMethods: [baseCardPaymentMethod] }); document.getElementById('container').appendChild(button); } /** * Provide Google Pay API with a payment amount, currency, and amount status * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo} * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest */ function getGoogleTransactionInfo() { return { countryCode: 'US', currencyCode: 'USD', totalPriceStatus: 'FINAL', // set to cart total totalPrice: '1.00' }; } /** * Prefetch payment data to improve performance * * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()} */ function prefetchGooglePaymentData() { const paymentDataRequest = getGooglePaymentDataRequest(); // transactionInfo must be set but does not affect cache paymentDataRequest.transactionInfo = { totalPriceStatus: 'NOT_CURRENTLY_KNOWN', currencyCode: 'USD' }; const paymentsClient = getGooglePaymentsClient(); paymentsClient.prefetchPaymentData(paymentDataRequest); } /** * Show Google Pay payment sheet when Google Pay payment button is clicked */ function onGooglePaymentButtonClicked() { const paymentDataRequest = getGooglePaymentDataRequest(); paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); const paymentsClient = getGooglePaymentsClient(); paymentsClient.loadPaymentData(paymentDataRequest) .then(function(paymentData) { // handle the response processPayment(paymentData); }) .catch(function(err) { // show error in developer console for debugging console.error(err); }); } /** * Process payment data returned by the Google Pay API * * @param {object} paymentData response from Google Pay API after user approves payment * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference} */ function processPayment(paymentData) { // show returned data in developer console for debugging console.log(paymentData); // @todo pass payment token to your gateway to process payment // @note DO NOT save the payment credentials for future transactions, // unless they're used for merchant-initiated transactions with user // consent in place. paymentToken = paymentData.paymentMethodData.tokenizationData.token; }</script><script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"></script>
پرداختها را مجاز کنید
<div id="container"></div><script>/** * Define the version of the Google Pay API referenced when creating your * configuration * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest} */ const baseRequest = { apiVersion: 2, apiVersionMinor: 0 }; /** * Card networks supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm card networks supported by your site and gateway */ const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"]; /** * Card authentication methods supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm your processor supports Android device tokens for your * supported card networks */ const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"]; /** * Identify your gateway and your site'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 * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification} */ const tokenizationSpecification = { type: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleGatewayMerchantId' } }; /** * Describe your site's support for the CARD payment method and its required * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const baseCardPaymentMethod = { type: 'CARD', parameters: { allowedAuthMethods: allowedCardAuthMethods, allowedCardNetworks: allowedCardNetworks } }; /** * Describe your site's support for the CARD payment method including optional * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const cardPaymentMethod = Object.assign( {}, baseCardPaymentMethod, { tokenizationSpecification: tokenizationSpecification } ); /** * An initialized google.payments.api.PaymentsClient object or null if not yet set * * @see {@link getGooglePaymentsClient} */ let paymentsClient = null; /** * Configure your site's support for payment methods supported by the Google Pay * API. * * Each member of allowedPaymentMethods should contain only the required fields, * allowing reuse of this base request when determining a viewer's ability * to pay and later requesting a supported payment method * * @returns {object} Google Pay API version, payment methods supported by the site */ function getGoogleIsReadyToPayRequest() { return Object.assign( {}, baseRequest, { allowedPaymentMethods: [baseCardPaymentMethod] } ); } /** * Configure support for the Google Pay API * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest} * @returns {object} PaymentDataRequest fields */ function getGooglePaymentDataRequest() { const paymentDataRequest = Object.assign({}, baseRequest); paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod]; paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); paymentDataRequest.merchantInfo = { // @todo a merchant ID is available for a production environment after approval by Google // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist} // merchantId: '12345678901234567890', merchantName: 'Example Merchant' }; paymentDataRequest.callbackIntents = ["PAYMENT_AUTHORIZATION"]; return paymentDataRequest; } /** * Return an active PaymentsClient or initialize * * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor} * @returns {google.payments.api.PaymentsClient} Google Pay API client */ function getGooglePaymentsClient() { if ( paymentsClient === null ) { paymentsClient = new google.payments.api.PaymentsClient({ environment: 'TEST', paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized } }); } return paymentsClient; } /** * Handles authorize payments callback intents. * * @param {object} paymentData response from Google Pay API after a payer approves payment through user gesture. * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData object reference} * * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentAuthorizationResult} * @returns Promise<{object}> Promise of PaymentAuthorizationResult object to acknowledge the payment authorization status. */ function onPaymentAuthorized(paymentData) { return new Promise(function(resolve, reject){ // handle the response processPayment(paymentData) .then(function() { resolve({transactionState: 'SUCCESS'}); }) .catch(function() { resolve({ transactionState: 'ERROR', error: { intent: 'PAYMENT_AUTHORIZATION', message: 'Insufficient funds', reason: 'PAYMENT_DATA_INVALID' } }); }); }); } /** * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded * * Display a Google Pay payment button after confirmation of the viewer's * ability to pay. */ function onGooglePayLoaded() { const paymentsClient = getGooglePaymentsClient(); paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest()) .then(function(response) { if (response.result) { addGooglePayButton(); } }) .catch(function(err) { // show error in developer console for debugging console.error(err); }); } /** * Add a Google Pay purchase button alongside an existing checkout button * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options} * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines} */ function addGooglePayButton() { const paymentsClient = getGooglePaymentsClient(); const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked, allowedPaymentMethods: [baseCardPaymentMethod] }); document.getElementById('container').appendChild(button); } /** * Provide Google Pay API with a payment amount, currency, and amount status * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo} * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest */ function getGoogleTransactionInfo() { return { displayItems: [ { label: "Subtotal", type: "SUBTOTAL", price: "11.00", }, { label: "Tax", type: "TAX", price: "1.00", } ], countryCode: 'US', currencyCode: "USD", totalPriceStatus: "FINAL", totalPrice: "12.00", totalPriceLabel: "Total" }; } /** * Show Google Pay payment sheet when Google Pay payment button is clicked */ function onGooglePaymentButtonClicked() { const paymentDataRequest = getGooglePaymentDataRequest(); paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); const paymentsClient = getGooglePaymentsClient(); paymentsClient.loadPaymentData(paymentDataRequest); } /** * Process payment data returned by the Google Pay API * * @param {object} paymentData response from Google Pay API after user approves payment * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference} */ function processPayment(paymentData) { return new Promise(function(resolve, reject) { setTimeout(function() { // @todo pass payment token to your gateway to process payment paymentToken = paymentData.paymentMethodData.tokenizationData.token; resolve({}); }, 3000); }); }</script><script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"></script>
بهروزرسانیهای پویای قیمت
<div id="container"></div><script>/** * Define the version of the Google Pay API referenced when creating your * configuration * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest} */ const baseRequest = { apiVersion: 2, apiVersionMinor: 0 }; /** * Card networks supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm card networks supported by your site and gateway */ const allowedCardNetworks = ["AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"]; /** * Card authentication methods supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm your processor supports Android device tokens for your * supported card networks */ const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"]; /** * Identify your gateway and your site'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 * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification} */ const tokenizationSpecification = { type: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleGatewayMerchantId' } }; /** * Describe your site's support for the CARD payment method and its required * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const baseCardPaymentMethod = { type: 'CARD', parameters: { allowedAuthMethods: allowedCardAuthMethods, allowedCardNetworks: allowedCardNetworks } }; /** * Describe your site's support for the CARD payment method including optional * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const cardPaymentMethod = Object.assign( {}, baseCardPaymentMethod, { tokenizationSpecification: tokenizationSpecification } ); /** * An initialized google.payments.api.PaymentsClient object or null if not yet set * * @see {@link getGooglePaymentsClient} */ let paymentsClient = null; /** * Configure your site's support for payment methods supported by the Google Pay * API. * * Each member of allowedPaymentMethods should contain only the required fields, * allowing reuse of this base request when determining a viewer's ability * to pay and later requesting a supported payment method * * @returns {object} Google Pay API version, payment methods supported by the site */ function getGoogleIsReadyToPayRequest() { return Object.assign( {}, baseRequest, { allowedPaymentMethods: [baseCardPaymentMethod] } ); } /** * Configure support for the Google Pay API * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest} * @returns {object} PaymentDataRequest fields */ function getGooglePaymentDataRequest() { const paymentDataRequest = Object.assign({}, baseRequest); paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod]; paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); paymentDataRequest.merchantInfo = { // @todo a merchant ID is available for a production environment after approval by Google // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist} // merchantId: '12345678901234567890', merchantName: 'Example Merchant' }; paymentDataRequest.callbackIntents = ["SHIPPING_ADDRESS", "SHIPPING_OPTION", "PAYMENT_AUTHORIZATION"]; paymentDataRequest.shippingAddressRequired = true; paymentDataRequest.shippingAddressParameters = getGoogleShippingAddressParameters(); paymentDataRequest.shippingOptionRequired = true; return paymentDataRequest; } /** * Return an active PaymentsClient or initialize * * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor} * @returns {google.payments.api.PaymentsClient} Google Pay API client */ function getGooglePaymentsClient() { if ( paymentsClient === null ) { paymentsClient = new google.payments.api.PaymentsClient({ environment: "TEST", merchantInfo: { merchantName: "Example Merchant", merchantId: "01234567890123456789" }, paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged } }); } return paymentsClient; } function onPaymentAuthorized(paymentData) { return new Promise(function(resolve, reject){ // handle the response processPayment(paymentData) .then(function() { resolve({transactionState: 'SUCCESS'}); }) .catch(function() { resolve({ transactionState: 'ERROR', error: { intent: 'PAYMENT_AUTHORIZATION', message: 'Insufficient funds', reason: 'PAYMENT_DATA_INVALID' } }); }); }); } /** * Handles dynamic buy flow shipping address and shipping options callback intents. * * @param {object} itermediatePaymentData response from Google Pay API a shipping address or shipping option is selected in the payment sheet. * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference} * * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate} * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet. */ function onPaymentDataChanged(intermediatePaymentData) { return new Promise(function(resolve, reject) { let shippingAddress = intermediatePaymentData.shippingAddress; let shippingOptionData = intermediatePaymentData.shippingOptionData; let paymentDataRequestUpdate = {}; if (intermediatePaymentData.callbackTrigger == "INITIALIZE" || intermediatePaymentData.callbackTrigger == "SHIPPING_ADDRESS") { if(shippingAddress.administrativeArea == "NJ") { paymentDataRequestUpdate.error = getGoogleUnserviceableAddressError(); } else { paymentDataRequestUpdate.newShippingOptionParameters = getGoogleDefaultShippingOptions(); let selectedShippingOptionId = paymentDataRequestUpdate.newShippingOptionParameters.defaultSelectedOptionId; paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(selectedShippingOptionId); } } else if (intermediatePaymentData.callbackTrigger == "SHIPPING_OPTION") { paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(shippingOptionData.id); } resolve(paymentDataRequestUpdate); }); } /** * Helper function to create a new TransactionInfo object. * @param string shippingOptionId respresenting the selected shipping option in the payment sheet. * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo} * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest */ function calculateNewTransactionInfo(shippingOptionId) { let newTransactionInfo = getGoogleTransactionInfo(); let shippingCost = getShippingCosts()[shippingOptionId]; newTransactionInfo.displayItems.push({ type: "LINE_ITEM", label: "Shipping cost", price: shippingCost, status: "FINAL" }); let totalPrice = 0.00; newTransactionInfo.displayItems.forEach(displayItem => totalPrice += parseFloat(displayItem.price)); newTransactionInfo.totalPrice = totalPrice.toString(); return newTransactionInfo; } /** * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded * * Display a Google Pay payment button after confirmation of the viewer's * ability to pay. */ function onGooglePayLoaded() { const paymentsClient = getGooglePaymentsClient(); paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest()) .then(function(response) { if (response.result) { addGooglePayButton(); // @todo prefetch payment data to improve performance after confirming site functionality // prefetchGooglePaymentData(); } }) .catch(function(err) { // show error in developer console for debugging console.error(err); }); } /** * Add a Google Pay purchase button alongside an existing checkout button * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options} * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines} */ function addGooglePayButton() { const paymentsClient = getGooglePaymentsClient(); const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked, allowedPaymentMethods: [baseCardPaymentMethod] }); document.getElementById('container').appendChild(button); } /** * Provide Google Pay API with a payment amount, currency, and amount status * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo} * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest */ function getGoogleTransactionInfo() { return { displayItems: [ { label: "Subtotal", type: "SUBTOTAL", price: "11.00", }, { label: "Tax", type: "TAX", price: "1.00", } ], countryCode: 'US', currencyCode: "USD", totalPriceStatus: "FINAL", totalPrice: "12.00", totalPriceLabel: "Total" }; } /** * Provide a key value store for shippping options. */ function getShippingCosts() { return { "shipping-001": "0.00", "shipping-002": "1.99", "shipping-003": "10.00" } } /** * Provide Google Pay API with shipping address parameters when using dynamic buy flow. * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters} * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest */ function getGoogleShippingAddressParameters() { return { allowedCountryCodes: ['US'], phoneNumberRequired: true }; } /** * Provide Google Pay API with shipping options and a default selected shipping option. * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingOptionParameters|ShippingOptionParameters} * @returns {object} shipping option parameters, suitable for use as shippingOptionParameters property of PaymentDataRequest */ function getGoogleDefaultShippingOptions() { return { defaultSelectedOptionId: "shipping-001", shippingOptions: [ { "id": "shipping-001", "label": "Free: Standard shipping", "description": "Free Shipping delivered in 5 business days." }, { "id": "shipping-002", "label": "$1.99: Standard shipping", "description": "Standard shipping delivered in 3 business days." }, { "id": "shipping-003", "label": "$10: Express shipping", "description": "Express shipping delivered in 1 business day." }, ] }; } /** * Provide Google Pay API with a payment data error. * * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError} * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate */ function getGoogleUnserviceableAddressError() { return { reason: "SHIPPING_ADDRESS_UNSERVICEABLE", message: "Cannot ship to the selected address", intent: "SHIPPING_ADDRESS" }; } /** * Prefetch payment data to improve performance * * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()} */ function prefetchGooglePaymentData() { const paymentDataRequest = getGooglePaymentDataRequest(); // transactionInfo must be set but does not affect cache paymentDataRequest.transactionInfo = { totalPriceStatus: 'NOT_CURRENTLY_KNOWN', currencyCode: 'USD' }; const paymentsClient = getGooglePaymentsClient(); paymentsClient.prefetchPaymentData(paymentDataRequest); } /** * Show Google Pay payment sheet when Google Pay payment button is clicked */ function onGooglePaymentButtonClicked() { const paymentDataRequest = getGooglePaymentDataRequest(); paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); const paymentsClient = getGooglePaymentsClient(); paymentsClient.loadPaymentData(paymentDataRequest); } /** * Process payment data returned by the Google Pay API * * @param {object} paymentData response from Google Pay API after user approves payment * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference} */ function processPayment(paymentData) { return new Promise(function(resolve, reject) { setTimeout(function() { // show returned data in developer console for debugging console.log(paymentData); // @todo pass payment token to your gateway to process payment paymentToken = paymentData.paymentMethodData.tokenizationData.token; resolve({}); }, 3000); }); }</script><script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"></script>
پیشنهادات
<div id="container"></div><script>/** * Please note: The Promo Code callback is extremely flexible. This example * implementation is only one of many ways to interface with it. * * In production, your promo codes and payment logic should be securely * processed on your server, not client-side as in this example. Use AJAX to * pass this information to the payment sheet. */ /** * Define the version of the Google Pay API referenced when creating your * configuration * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest} */ const baseRequest = { apiVersion: 2, apiVersionMinor: 0 }; /** * Define valid promo code strings * * This object paradigm is not necessary to implement Promo Codes, but provides * an example of how to implement promo code behavior in a modular way. * * In production, your promo codes should be securely processed on your server, * not client-side as in this example. * * code: the way the promo code itself is displayed in the payment sheet * description: the description provided to the user on the payment sheet * function: the function used to calculate the price change * value: the value passed into the above function. This value should be * negative for a discount. */ const validPromoCodes = { SOMEPROMOCODE: { code: 'SOMEPROMOCODE', description: '20% off all products!', function: percentageDiscount, value: -20 // value should be negative for a discount }, ANOTHERPROMOCODE: { code: 'ANOTHERPROMOCODE', description: '$5 dollars off!', function: staticDiscount, value: -5.00 // value should be negative for a discount } } /** * Card networks supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm card networks supported by your site and gateway */ const allowedCardNetworks = ['AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA']; /** * Card authentication methods supported by your site and your gateway * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} * @todo confirm your processor supports Android device tokens for your * supported card networks */ const allowedCardAuthMethods = ['PAN_ONLY', 'CRYPTOGRAM_3DS']; /** * Identify your gateway and your site'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 * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification} */ const tokenizationSpecification = { type: 'PAYMENT_GATEWAY', parameters: { gateway: 'example', gatewayMerchantId: 'exampleGatewayMerchantId' } }; /** * Describe your site's support for the CARD payment method and its required * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const baseCardPaymentMethod = { type: 'CARD', parameters: { allowedAuthMethods: allowedCardAuthMethods, allowedCardNetworks: allowedCardNetworks } }; /** * Describe your site's support for the CARD payment method including optional * fields * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters} */ const cardPaymentMethod = Object.assign( {}, baseCardPaymentMethod, { tokenizationSpecification: tokenizationSpecification } ); /** * An initialized google.payments.api.PaymentsClient object or null if not yet set * * @see {@link getGooglePaymentsClient} */ let paymentsClient = null; /** * Configure your site's support for payment methods supported by the Google Pay * API. * * Each member of allowedPaymentMethods should contain only the required fields, * allowing reuse of this base request when determining a viewer's ability * to pay and later requesting a supported payment method * * @returns {object} Google Pay API version, payment methods supported by the site */ function getGoogleIsReadyToPayRequest() { return Object.assign( {}, baseRequest, { allowedPaymentMethods: [baseCardPaymentMethod] } ); } /** * Configure support for the Google Pay API * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest} * @returns {object} PaymentDataRequest fields */ function getGooglePaymentDataRequest() { const paymentDataRequest = Object.assign({}, baseRequest); paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod]; paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); paymentDataRequest.merchantInfo = { // @todo a merchant ID is available for a production environment after approval by Google // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist} // merchantId: '12345678901234567890', merchantName: 'Example Merchant' }; paymentDataRequest.callbackIntents = ['OFFER']; paymentDataRequest.shippingAddressRequired = false; paymentDataRequest.shippingAddressParameters = getGoogleShippingAddressParameters(); return paymentDataRequest; } /** * Return an active PaymentsClient or initialize * * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor} * @returns {google.payments.api.PaymentsClient} Google Pay API client */ function getGooglePaymentsClient() { if ( paymentsClient === null ) { paymentsClient = new google.payments.api.PaymentsClient({ environment: 'TEST', merchantInfo: { merchantName: 'Example Merchant', merchantId: '01234567890123456789' }, paymentDataCallbacks: { onPaymentDataChanged: onPaymentDataChanged } }); } return paymentsClient; } /** * These functions handle adding valid promo codes to the payment sheet * as well as adjusting the display items to match. * * To add a new promo code, create a new function per this template * and define it as valid in the onPaymentDataChanged function. * * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate} * @param {string} redemptionCode string representing the promo code to apply * @param {string} description string representing the description to show * @param {int} discountPercentage int representing the percentage to discount. * Please note the discount value should be negative. Ex: -20 = 20% discount. * @param {object} PaymentDataRequestUpdate object representing * the current state of the payment data request. * @returns {object} PaymentDataRequestUpdate object to update the * payment sheet with new transaction info and offer data. */ function percentageDiscount(promoParameters, paymentDataRequestUpdate) { // set variables let originalTransactionInfo = getGoogleTransactionInfo(); /* because this promo code calculates a % of original prices, * we need to get the original transaction info */ let newTransactionInfo = paymentDataRequestUpdate.newTransactionInfo; let discount = 0; // update promo code and description paymentDataRequestUpdate.newOfferInfo.offers.push({ redemptionCode: promoParameters['code'], description: promoParameters['description'] }); // calculate discount (from original transaction items only) originalTransactionInfo.displayItems.forEach(function(displayItem) { discount += parseFloat(displayItem.price) * promoParameters['value'] * 0.01; }); // add displayItem with new discount newTransactionInfo.displayItems.push({ label: promoParameters['code'], price: discount.toFixed(2), type: 'LINE_ITEM' }); return paymentDataRequestUpdate; } function staticDiscount(promoParameters, paymentDataRequestUpdate) { // set variables let newTransactionInfo = paymentDataRequestUpdate.newTransactionInfo; // update promo code and description paymentDataRequestUpdate.newOfferInfo.offers.push({ redemptionCode: promoParameters['code'], description: promoParameters['description'] }); // add displayItem with new discount newTransactionInfo.displayItems.push({ label: promoParameters['code'], price: promoParameters['value'].toFixed(2), type: 'LINE_ITEM' }); return paymentDataRequestUpdate; } /** * Handles offer callback intents. * * @param {object} itermediatePaymentData response from Google Pay API when a promo code is entered in the google pay payment sheet. * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference} * * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate} * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet with new transaction info and offer data. */ function onPaymentDataChanged(intermediatePaymentData) { return new Promise(function(resolve, reject) { let redemptionCodes = new Set(); let shippingOptionData = intermediatePaymentData.shippingOptionData; let paymentDataRequestUpdate = {}; paymentDataRequestUpdate.newTransactionInfo = getGoogleTransactionInfo(); // ensure that promo codes set is unique if(typeof intermediatePaymentData.offerData != 'undefined') { redemptionCodes = new Set(intermediatePaymentData.offerData.redemptionCodes); } // validate promo codes and add descriptions to payment sheet if (intermediatePaymentData.callbackTrigger === 'OFFER') { paymentDataRequestUpdate.newOfferInfo = {}; paymentDataRequestUpdate.newOfferInfo.offers = []; for (redemptionCode of redemptionCodes) { if (validPromoCodes[redemptionCode]) { paymentDataRequestUpdate = validPromoCodes[redemptionCode].function( validPromoCodes[redemptionCode], paymentDataRequestUpdate ); } else { paymentDataRequestUpdate.error = getGoogleOfferInvalidError(redemptionCode); } } } /** * Update item costs and total. * * In production, this final calculation should always be calculated * server-side to ensure it matches the price that the merchant sends to the * processor. */ paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo( paymentDataRequestUpdate.newTransactionInfo ) resolve(paymentDataRequestUpdate); }); } /** * Helper function to update the TransactionInfo object. * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo} * @param {object} transactionInfo respresenting the selected shipping option in the payment sheet. * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo} * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest */ function calculateNewTransactionInfo(newTransactionInfo) { // calculate the new totalPrice from display items let totalPrice = 0.00; newTransactionInfo.displayItems.forEach( function(displayItem) { totalPrice += parseFloat(displayItem.price); } ); // Note: newTransactionInfo.totalPrice must be a string newTransactionInfo.totalPrice = totalPrice.toFixed(2); return newTransactionInfo; } /** * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded * * Display a Google Pay payment button after confirmation of the viewer's * ability to pay. */ function onGooglePayLoaded() { const paymentsClient = getGooglePaymentsClient(); paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest()) .then(function(response) { if (response.result) { addGooglePayButton(); // @todo prefetch payment data to improve performance after confirming site functionality // prefetchGooglePaymentData(); } }) .catch(function(err) { // show error in developer console for debugging console.error(err); }); } /** * Add a Google Pay purchase button alongside an existing checkout button * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options} * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines} */ function addGooglePayButton() { const paymentsClient = getGooglePaymentsClient(); const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked, allowedPaymentMethods: [baseCardPaymentMethod] }); document.getElementById('container').appendChild(button); } /** * Provide Google Pay API with a payment amount, currency, and amount status * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo} * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest */ function getGoogleTransactionInfo() { return { displayItems: [ { label: 'Subtotal', type: 'SUBTOTAL', price: '11.00', status: 'FINAL' }, { label: 'Tax', type: 'TAX', price: '1.00' } ], currencyCode: 'USD', totalPriceStatus: 'FINAL', totalPrice: '12.00', totalPriceLabel: 'Total' }; } /** * Provide Google Pay API with shipping address parameters. * * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters} * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest */ function getGoogleShippingAddressParameters() { return { allowedCountryCodes: ['US', 'UK', 'FR', 'CA', 'MX', 'GA'], phoneNumberRequired: false }; } /** * Provide Google Pay API with an invalid offer error. * * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError} * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate */ function getGoogleOfferInvalidError(redemptionCode) { return { reason: 'OFFER_INVALID', message: redemptionCode + ' is not a valid promo code.', intent: 'OFFER' }; } /** * Prefetch payment data to improve performance * * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()} */ function prefetchGooglePaymentData() { const paymentDataRequest = getGooglePaymentDataRequest(); // transactionInfo must be set but does not affect cache paymentDataRequest.transactionInfo = { totalPriceStatus: 'NOT_CURRENTLY_KNOWN', currencyCode: 'USD' }; const paymentsClient = getGooglePaymentsClient(); paymentsClient.prefetchPaymentData(paymentDataRequest); } /** * Show Google Pay payment sheet when Google Pay payment button is clicked */ function onGooglePaymentButtonClicked() { const paymentDataRequest = getGooglePaymentDataRequest(); paymentDataRequest.transactionInfo = getGoogleTransactionInfo(); const paymentsClient = getGooglePaymentsClient(); paymentsClient.loadPaymentData(paymentDataRequest) .then(function(paymentData) { // handle the response processPayment(paymentData); }) .catch(function(err) { // show error in developer console for debugging console.error(err); }); } /** * Process payment data returned by the Google Pay API * In a production environment, this function should always be implemented * server-side. * * @param {object} paymentData response from Google Pay API after user approves payment * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference} */ function processPayment(paymentData) { // show returned data in developer console for debugging console.log(paymentData); // @todo pass payment token to your gateway to process payment paymentToken = paymentData.paymentMethodData.tokenizationData.token; }</script><script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"></script>