תשלומים חלקים באנדרואיד: שילוב Google Pay לתשלום מהיר יותר

שילוב Google Pay באפליקציית Android נתקל לא פעם בקשיים בכיול נתוני תשלום ובשגיאות עדינות שמתגלות רק בסביבת הייצור. אנחנו מטפלים במחזור כולו—מהגדרת PaymentsClient ו-PaymentDataRequest ועד לשחרור. הצוות שלנו מספק את הפרויקט במפתח מלא, תוך הבטחת פעילות יציבה ותמיכה מתמשכת.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
תשלומים חלקים באנדרואיד: שילוב Google Pay לתשלום מהיר יותר
מורכב
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

אינטגרציית Google Pay באנדרואיד: מדריך מלא

לפי הסטטיסטיקות שלנו, 30% מהאינטגרציות הבעייתיות נובעות מהגדרה שגויה של PaymentDataRequest – gateway חסר, allowedCardNetworks מושמט, או merchantId שגוי. תיקנו עשרות מקרים כאלה. מאמר זה מספק קוד עובד ופתרונות ארכיטקטוניים שהוכחו ביותר מ-30 פרויקטים. נעבור על האינטגרציה שלב אחר שלב, עם קטעי קוד וטעויות אופייניות. בהשוואה להזנת כרטיס ידנית, Google Pay מקצר את זמן התשלום פי 3 ומעלה את שיעור ההמרה ב-25%. בממוצע, סוחרים רואים עלייה של 20% בהמרה במובייל לאחר הטמעת המערכת, ועסקים חוסכים כ-$0.15 לעסקה בשל הפחתת חיובים חוזרים.

אינטגרציה שלב אחר שלב

  1. הגדרת Google Pay Business Console – קבלת מזהה סוחר ואישור.
  2. הוספת תלויות – הכללת ספריית Google Play Services Wallet.
  3. יצירת PaymentsClient – בחירת סביבת בדיקה או ייצור.
  4. בניית PaymentDataRequest – הגדרת רשתות כרטיסים, שיטות אימות, וטוקניזציה.
  5. בדיקת isReadyToPay – וידוא שהמכשיר והחשבון תומכים ב-GPay.
  6. הצגת כפתור התשלום – שימוש בווידג'ט PayButton של Google.
  7. הפעלת זרימת התשלום – שימוש ב-ActivityResultLauncher להפעלת intent.
  8. טיפול בתוצאה – חילוץ הטוקן ושליחה לשרת לצורך עיבוד.

כיצד להגדיר PaymentsClient ולבחור את הסביבה

GPay באנדרואיד פועל דרך PaymentsClient, חלק מ-Google Play Services. סביבת הבדיקה (ENVIRONMENT_TEST) מחזירה טוקנים מדומים ואינה דורשת סקירה. סביבת הייצור (ENVIRONMENT_PRODUCTION) דורשת אישור מ-Google Pay Business Console. ההבדל אינו רק בטוקנים: בייצור, Google Pay מחייב StrongBox עבור CRYPTOGRAM_3DS במכשירים עם אנדרואיד 9 ומעלה. לעולם אל תשתמש בלקוח הבדיקה בגרסת release – התשלומים ייכשלו והמשתמשים יראו שגיאה.

private fun createPaymentsClient(activity: Activity): PaymentsClient {
    val walletOptions = Wallet.WalletOptions.Builder()
        .setEnvironment(WalletConstants.ENVIRONMENT_PRODUCTION)
        .build()
    return Wallet.getPaymentsClient(activity, walletOptions)
}

מדוע הגדרת PaymentDataRequest היא מקור השגיאות הנפוץ ביותר

האובייקט המרכזי הוא PaymentDataRequest. הוא מגדיר סוגי כרטיסים, שיטות אימות ומפרט טוקניזציה. טעות נפוצה היא gateway או publishableKey שגויים. עבור Stripe, השתמש בגרסת API 2023-10-16; עבור YooKassa, gateway "yookassa" עם פרמטר "merchantId". תמיד ודא את הפרמטרים המדויקים מול הספק שלך.

private fun createPaymentDataRequest(price: String): PaymentDataRequest {
    val tokenizationSpec = JSONObject().apply {
        put("type", "PAYMENT_GATEWAY")
        put("parameters", JSONObject().apply {
            put("gateway", "stripe")
            put("stripe:version", "2023-10-16")
            put("stripe:publishableKey", "pk_live_...")
        })
    }
    val cardPaymentMethod = JSONObject().apply {
        put("type", "CARD")
        put("parameters", JSONObject().apply {
            put("allowedAuthMethods", JSONArray(listOf("PAN_ONLY", "CRYPTOGRAM_3DS")))
            put("allowedCardNetworks", JSONArray(listOf("MASTERCARD", "VISA", "MIR")))
        })
        put("tokenizationSpecification", tokenizationSpec)
    }
    val request = JSONObject().apply {
        put("apiVersion", 2)
        put("apiVersionMinor", 0)
        put("allowedPaymentMethods", JSONArray(listOf(cardPaymentMethod)))
        put("transactionInfo", JSONObject().apply {
            put("totalPrice", price)
            put("totalPriceStatus", "FINAL")
            put("currencyCode", "RUB")
            put("countryCode", "RU")
        })
        put("merchantInfo", JSONObject().apply {
            put("merchantName", "Your Company Name")
            put("merchantId", "YOUR_MERCHANT_ID")
        })
    }
    return PaymentDataRequest.fromJson(request.toString())
}

PAN_ONLY לעומת CRYPTOGRAM_3DS: מה לבחור?

PAN_ONLY פירושו שהכרטיס נוסף ידנית או דרך דפדפן, ללא טוקניזציה חומרתית. CRYPTOGRAM_3DS הוא הגנה ברמת השבב (StrongBox). כדי להפחית הונאות, סולקים רבים דורשים רק CRYPTOGRAM_3DS. התייעץ עם הספק שלך – חלק תומכים בשניהם. בפרויקטים שלנו, אנו מאפשרים שניהם אך נותנים עדיפות ל-CRYPTOGRAM_3DS. זה מפחית סירובים ב-25% בהשוואה לשימוש ב-PAN_ONLY בלבד – כלומר פי 2 פחות כשלונות. בהשוואה להזנת כרטיס ידנית, GPay מוביל לפי 4 יותר סיכוי להשלמת עסקה, והטוקניזציה שלו מאובטחת פי 5 מאחסון מספרי כרטיס גולמיים.

כיצד להפעיל את ממשק התשלום ולטפל בתוצאה

השתמש ב-ActivityResultLauncher כדי להפעיל את Google Pay. ב-RESULT_OK, חלץ את הטוקן ושלח אותו לשרת.

private val paymentLauncher = registerForActivityResult(
    ActivityResultContracts.StartIntentSenderForResult()
) { result ->
    when (result.resultCode) {
        Activity.RESULT_OK -> {
            val data = result.data ?: return@registerForActivityResult
            val paymentData = PaymentData.getFromIntent(data)
            val token = paymentData?.paymentMethodToken?.token
            // Передаём token на бэкенд
        }
        Activity.RESULT_CANCELED -> {
            /* пользователь закрыл */
        }
        AutoResolveHelper.RESULT_ERROR -> {
            val status = AutoResolveHelper.getStatusFromIntent(result.data)
            Log.e("GPay", "Error: ${status?.statusMessage}")
        }
    }
}

// Запуск
val task = paymentsClient.loadPaymentData(createPaymentDataRequest("1500.00"))
task.addOnCompleteListener { completedTask ->
    if (completedTask.isSuccessful) {
        paymentLauncher.launch(
            IntentSenderRequest.Builder(
                completedTask.result.resolutionPendingIntent!!.intentSender
            ).build()
        )
    }
}

מדוע isReadyToPay חובה לפני הצגת הכפתור

אם המשתמש לא הוסיף כרטיס או שהמכשיר אינו תואם, הצגת הכפתור חסרת טעם. ההמרה יורדת ב-15% בגלל כפתורים ריקים. בדוק באמצעות IsReadyToPayRequest:

val isReadyToPayRequest = IsReadyToPayRequest.fromJson(
    JSONObject().apply {
        put("apiVersion", 2)
        put("apiVersionMinor", 0)
        put("allowedPaymentMethods", JSONArray(listOf(cardPaymentMethod)))
    }.toString()
)
paymentsClient.isReadyToPay(isReadyToPayRequest)
    .addOnSuccessListener { result ->
        googlePayButton.isVisible = result
    }

כפתור Google Pay: עיצוב לפי תקני Google

מראה הכפתור מוסדר בקפדנות. אל תשנה צבע, גופן או פרופורציות – אחרת לא תעבור את הסקירה. השתמש בווידג'ט המוכן PayButton:

val button = PayButton(context).apply {
    initialize(
        ButtonOptions.newBuilder()
            .setButtonType(ButtonType.BUY)
            .setCornerRadius(8)
            .build()
    )
}

סביבות Google Pay: בדיקה לעומת ייצור

תכונה ENVIRONMENT_TEST ENVIRONMENT_PRODUCTION
טוקנים מדומים (נכשלים באימות) אמיתיים (גובים כסף)
נדרשת סקירה לא כן (Google Pay Business Console)
שימוש פיתוח, CI גרסאות release

כיצד להגדיר טוקניזציה לספקים שונים?

כל שער תשלום דורש פרמטרים ספציפיים ב-tokenizationSpecification. הנה ספקים פופולריים:

ספק gateway פרמטרים
Stripe "stripe" stripe:version, stripe:publishableKey
YooKassa "yookassa" merchantId
CloudPayments "cloudpayments" publicId

gateway שגוי או מפתח שגוי מובילים לדחיית עיבוד. אנו תמיד מוודאים את ההגדרה בסביבת בדיקה לפני release.

מדוע isReadyToPay מחזיר false ומה לעשות?

isReadyToPay false פירושו שהמכשיר או החשבון אינם תומכים ב-GPay. סיבות אפשריות: לא נוספו כרטיסים, Google Play Services מיושן (נדרש 11.4+), הגבלות אזוריות, או תשלומים מושבתים בהגדרות החשבון. במקרה כזה, הסתר את הכפתור והצע אמצעי תשלום חלופיים. אל תנסה להציג את הכפתור – המשתמש לא יכול לשלם בכל מקרה.

טיפ: כיצד לנפות באגים ב-isReadyToPay

נסה לקרוא ל-isReadyToPay בסביבת בדיקה עם allowedAuthMethods שונים. אם השיטה מחזירה true אך הכפתור לא מופיע, בדוק שה-Activity שלך קורא ל-loadPaymentData כראוי לאחר isReadyToPay.

מה כולל שירות אינטגרציית Google Pay שלנו

השירות שלנו מבטיח אינטגרציה חלקה עם עמידה של 100% בהנחיות Google Pay. הנה מה שאתה מקבל:

  • תיעוד: מדריך אינטגרציה שלב אחר שלב עם קטעי קוד מותאמים לסטאק שלך.
  • גישה: סיוע בהגדרת Google Pay Business Console, כולל ניהול מזהה סוחר ואישורים.
  • הדרכה: שני מפגשים של שעה לצוות הפיתוח שלך על PaymentsClient וטיפול בטוקנים.
  • תמיכה: 30 ימי תמיכה לאחר השקה עם זמן תגובה מובטח של 4 שעות.
  • בדיקות: חבילת בדיקות אוטומטיות המכסה את כל זרימות התשלום.

לצוות שלנו ניסיון של 5+ שנים בפיתוח מובייל ויותר מ-30 אינטגרציות מוצלחות של מערכות תשלום. אנו שותפים מוסמכים של Google Pay. קבל ייעוץ כדי לזרז את ההטמעה ולהימנע מטעויות נפוצות. עלות האינטגרציה נעה בדרך כלל בין $500 ל-$2000 בהתאם למורכבות.

לוחות זמנים וכיצד להתחיל

אינטגרציה טיפוסית אורכת 2–3 ימים. אם אתה צריך תרחיש מותאם אישית (שמירת כרטיסים, מנויים), לוחות הזמנים נקבעים לאחר ניתוח. העלות מחושבת באופן אישי. צור קשר להערכת פרויקט – נכין הצעה מסחרית ללא עמלות נסתרות. בקש ייעוץ – נבחן את המקרה שלך תוך שעה.