راهنمای ادغام درون‌برنامه‌ای برای پرداخت‌های خارجی

این سند نحوه ادغام APIهای کتابخانه پرداخت Play را برای ارائه پرداخت‌های خارجی در برنامه‌های واجد شرایط شرح می‌دهد. برای کسب اطلاعات بیشتر در مورد این برنامه، به الزامات برنامه مراجعه کنید.

راه‌اندازی کتابخانه پرداخت بازی

وابستگی کتابخانه پرداخت Play را به برنامه اندروید خود اضافه کنید . برای استفاده از APIهای پرداخت خارجی، باید از نسخه ۸.۳ یا بالاتر استفاده کنید. اگر نیاز به مهاجرت از نسخه قبلی دارید، قبل از شروع ادغام، دستورالعمل‌های موجود در راهنمای مهاجرت را برای ارتقا دنبال کنید.

کلاینت صورتحساب را مقداردهی اولیه کنید

مراحل اولیه فرآیند ادغام، همان مراحلی است که در راهنمای ادغام صورتحساب گوگل پلی توضیح داده شده است، با این تفاوت که هنگام مقداردهی اولیه BillingClient خود، چند تغییر ایجاد می‌کنید:

  • برای نشان دادن اینکه می‌خواهید پرداخت‌های خارجی ارائه دهید، باید یک متد جدید enableBillingProgram(EnableBillingProgramParams) فراخوانی کنید.
  • برای مدیریت مواردی که کاربر تصمیم می‌گیرد در وب‌سایت یا برنامه پرداخت شما پرداخت کند، باید یک DeveloperProvidedBillingListener ثبت کنید.

مثال زیر مقداردهی اولیه یک BillingClient با این تغییرات را نشان می‌دهد:

کاتلین

val purchasesUpdatedListener =
    PurchasesUpdatedListener { billingResult, purchases ->
        // Handle new Google Play purchase.
    }

val developerProvidedBillingListener =
    DeveloperProvidedBillingListener { details ->
        // Handle user selection for developer provided billing option.
    }

val billingClient = BillingClient.newBuilder(context)
    .setListener(purchasesUpdatedListener)
    .enablePendingPurchases()
    .enableBillingProgram(
        EnableBillingProgramParams.newBuilder()
            .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
            .setDeveloperProvidedBillingListener(developerProvidedBillingListener)
            .build())
    .build()

جاوا

private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
    @Override
    public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
        // Handle new Google Play purchase.
    }
};

private DeveloperProvidedBillingListener developerProvidedBillingListener =
    new DeveloperProvidedBillingListener() {
        @Override
        public void onUserSelectedDeveloperBilling(
            DeveloperProvidedBillingDetails details) {
            // Handle user selection for developer provided billing option.
        }
    };

private BillingClient billingClient = BillingClient.newBuilder(context)
    .setListener(purchasesUpdatedListener)
    .enablePendingPurchases()
    .enableBillingProgram(
        EnableBillingProgramParams.newBuilder()
            .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
            .setDeveloperProvidedBillingListener(developerProvidedBillingListener)
            .build())
    .build();

اتصال به گوگل پلی

پس از مقداردهی اولیه BillingClient ، همانطور که در بخش «اتصال به Google Play» توضیح داده شده است، به Google Play متصل شوید.

بررسی صلاحیت کاربر

پس از اتصال به گوگل پلی، می‌توانید با فراخوانی متد isBillingProgramAvailableAsync() بررسی کنید که آیا کاربر واجد شرایط برنامه پرداخت‌های خارجی است یا خیر. این متد در صورت واجد شرایط بودن کاربر BillingResponseCode.OK را برمی‌گرداند. نمونه زیر نحوه بررسی واجد شرایط بودن را نشان می‌دهد:

کاتلین

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_PAYMENTS,
  object : BillingProgramAvailabilityListener {
    override fun onBillingProgramAvailabilityResponse(
      billingProgram: Int, billingResult: BillingResult) {
        if (billingResult.responseCode != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external payments unavailable, etc.
            return
        }

        // External payments are available. Can proceed with generating an
        // external transaction token.
})

جاوا

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_PAYMENTS,
  new BillingProgramAvailabilityListener() {
    @Override
    public void onBillingProgramAvailabilityResponse(
      int billingProgram, BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external payments unavailable, etc.
            return;
        }

        // External payments are available. Can proceed with generating an external transaction token.
      }

    });

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

نمایش محصولات موجود

شما می‌توانید محصولات موجود را به همان روشی که با یکپارچه‌سازی سیستم پرداخت گوگل پلی نمایش می‌دهید، به کاربر نمایش دهید . وقتی کاربر محصولات موجود برای خرید را مشاهده کرد و یکی را برای خرید انتخاب کرد، جریان پرداخت‌های خارجی را همانطور که در بخش راه‌اندازی جریان پرداخت‌های خارجی توضیح داده شده است، راه‌اندازی کنید.

یک توکن تراکنش خارجی آماده کنید

برای گزارش یک تراکنش خارجی به گوگل پلی، باید یک توکن تراکنش خارجی از کتابخانه پرداخت گوگل پلی تولید کنید. هر بار که کاربر از طریق API پرداخت‌های خارجی از یک وب‌سایت یا برنامه خارجی بازدید می‌کند، باید یک توکن تراکنش خارجی جدید تولید شود. این کار را می‌توان با فراخوانی API createBillingProgramReportingDetailsAsync انجام داد. این توکن باید بلافاصله قبل از فراخوانی launchBillingFlow تولید شود.

کاتلین

val params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .build()

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  object : BillingProgramReportingDetailsListener {
    override fun onCreateBillingProgramReportingDetailsResponse(
      billingResult: BillingResult,
      billingProgramReportingDetails: BillingProgramReportingDetails?) {
        if (billingResult.responseCode != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return
        }
        val externalTransactionToken =
            billingProgramReportingDetails?.externalTransactionToken
        // Persist the external transaction token locally. Pass it to
        // the external website using DeveloperBillingOptionParams when
        // launchBillingFlow is called.
    }
})

جاوا

BillingProgramReportingDetailsParams params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .build();

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  new BillingProgramReportingDetailsListener() {
    @Override
    public void onCreateBillingProgramReportingDetailsResponse(
      BillingResult billingResult,
      @Nullable BillingProgramReportingDetails
        billingProgramReportingDetails) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        String transactionToken =
          billingProgramReportingDetails.getExternalTransactionToken();

        // Persist the external transaction token locally. Pass it to
        // the external website using DeveloperBillingOptionParams when
        // launchBillingFlow is called.
      }
});

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

راه‌اندازی جریان پرداخت‌های خارجی

جریان پرداخت‌های خارجی را با فراخوانی launchBillingFlow() مشابه راه‌اندازی جریان خرید با یکپارچه‌سازی سیستم صورتحساب Google Play راه‌اندازی کنید، اما با یک پارامتر اضافی DeveloperBillingOptionParams که نشان می‌دهد برنامه شما مایل به فعال کردن جریان پرداخت‌های خارجی برای این خرید است.

DeveloperBillingOptionParams باید شامل موارد زیر باشد:

  • billingProgram روی EXTERNAL_PAYMENTS تنظیم شده است. برنامه صورتحساب
  • linkURI روی مقصد لینک تنظیم شده است
  • اگر گوگل پلی باید لینک را اجرا کند، launchMode روی LAUNCH_IN_EXTERNAL_BROWSER_OR_APP و اگر برنامه شما لینک را اجرا می‌کند، روی CALLER_WILL_LAUNCH_LINK تنظیم شده است.

وقتی برنامه شما تابع launchBillingFlow() را با DeveloperBillingOptionParams ارائه شده فراخوانی می‌کند، سیستم پرداخت گوگل پلی بررسی زیر را انجام می‌دهد:

  • سیستم بررسی می‌کند که آیا کشور گوگل پلی کاربر، کشوری است که از پرداخت‌های خارجی پشتیبانی می‌کند (یعنی یک کشور پشتیبانی‌شده). اگر کشور گوگل پلی کاربر پشتیبانی شود، گوگل پلی بررسی می‌کند که آیا پرداخت‌های خارجی بر اساس پیکربندی BillingClient فعال است و آیا DeveloperBillingOptionParams ارائه شده است یا خیر.
    • اگر پرداخت‌های خارجی فعال شده باشند، جریان خرید، تجربه کاربری انتخابی کاربر را نشان می‌دهد.
    • اگر پرداخت‌های خارجی فعال نباشند، جریان خرید، تجربه کاربری استاندارد سیستم پرداخت گوگل پلی را بدون انتخاب کاربر نشان می‌دهد.
  • اگر کشور گوگل پلی کاربر، جزو کشورهای پشتیبانی‌شده نباشد، جریان خرید، تجربه کاربری استاندارد سیستم پرداخت گوگل پلی را بدون انتخاب کاربر نشان می‌دهد.

کشور بازی کاربر، یک کشور پشتیبانی‌شده است

کشور بازی کاربر، کشور پشتیبانی‌شده نیست

پرداخت‌های خارجی فعال شده‌اند ( تنظیمات BillingClient و راه‌اندازی BillingFlow )

کاربر، تجربه کاربری انتخاب‌شده توسط خودش را می‌بیند

کاربر تجربه کاربری استاندارد سیستم پرداخت گوگل پلی را می‌بیند

پرداخت‌های خارجی فعال نیستند (یا در طول راه‌اندازی BillingClient فعال نشده‌اند یا DeveloperBillingOptionParams برای launchBillingFlow ارائه نشده است)

کاربر تجربه کاربری استاندارد سیستم پرداخت گوگل پلی را می‌بیند

کاربر تجربه کاربری استاندارد سیستم پرداخت گوگل پلی را می‌بیند

قطعه کد زیر نحوه ساخت DeveloperBillingOptionParams را نشان می‌دهد:

کاتلین

val developerBillingOptionParams =
    DeveloperBillingOptionParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .setLinkUri("https://www.example.com/external/purchase")
        .setLaunchMode(
            DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
        .build()

جاوا

DeveloperBillingOptionParams developerBillingOptionParams =
    DeveloperBillingOptionParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .setLinkUri("https://www.example.com/external/purchase")
        .setLaunchMode(
            DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
        .build();

مدیریت انتخاب کاربر

نحوه مدیریت بقیه مراحل خرید بسته به اینکه کاربر سیستم پرداخت گوگل پلی را انتخاب کرده یا پرداخت در وب‌سایت شما، متفاوت است.

وقتی کاربر تصمیم می‌گیرد در وب‌سایت شما یا در یک اپلیکیشن پرداخت، پرداخت کند

اگر کاربر تصمیم به پرداخت در وب‌سایت شما بگیرد، گوگل پلی DeveloperProvidedBillingListener را فراخوانی می‌کند تا به برنامه اطلاع دهد که کاربر تصمیم به پرداخت در وب‌سایت شما یا در یک برنامه پرداخت گرفته است. به طور خاص، متد onUserSelectedDeveloperBilling() فراخوانی می‌شود.

اگر برنامه شما launchMode روی LAUNCH_IN_EXTERNAL_BROWSER_OR_APP تنظیم کند، گوگل پلی لینک را اجرا خواهد کرد. اگر launchMode روی CALLER_WILL_LAUNCH_LINK تنظیم شده باشد، برنامه شما مسئول اجرای لینک است. هنگام اتصال کاربران به یک برنامه پرداخت، شما مسئول بررسی این هستید که آیا کاربر برنامه پرداخت را از قبل روی دستگاه خود نصب کرده است یا خیر.

از این توکن برای گزارش هرگونه تراکنش ناشی از این انتخاب، همانطور که در راهنمای ادغام backend توضیح داده شده است، استفاده کنید.

وقتی کاربر سیستم پرداخت گوگل پلی را انتخاب می‌کند

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

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

مدیریت تغییرات در اشتراک

برای توسعه‌دهندگانی که از پرداخت‌های خارجی استفاده می‌کنند، خریدها باید یا از طریق سیستم صورتحساب گوگل پلی پردازش شوند یا بسته به انتخاب کاربر، با یک externalTransactionId گزارش شوند. تغییرات در اشتراک‌های موجود که از طریق وب‌سایت توسعه‌دهنده پردازش شده‌اند، می‌توانند از طریق همان سیستم صورتحساب تا زمان انقضا انجام شوند.

این بخش نحوه مدیریت برخی از سناریوهای رایج تغییر اشتراک را شرح می‌دهد.

جریان‌های ارتقا و تنزل رتبه

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

افزونه‌هایی که به اشتراک موجود وابسته هستند، از روش پرداخت یکسانی استفاده می‌کنند و هزینه‌های دوره‌ای را هماهنگ می‌کنند، به عنوان ارتقا در نظر گرفته می‌شوند. برای سایر افزونه‌ها، کاربران باید بتوانند سیستم پرداخت مورد نظر خود را انتخاب کنند. همانطور که در راه‌اندازی جریان پرداخت‌های خارجی توضیح داده شده است، با استفاده از launchBillingFlow() یک تجربه خرید جدید را آغاز کنید.

اشتراک‌هایی که از طریق وب‌سایت توسعه‌دهنده یا یک برنامه پرداخت خریداری شده‌اند

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

برای انجام این کار، وقتی کاربر درخواست ارتقا یا تنزل رتبه می‌دهد، تابع launchBillingFlow() را فراخوانی کنید. به جای تعیین پارامترهای دیگر در زیر شیء SubscriptionUpdateParams ، از setOriginalExternalTransactionId() استفاده کنید و شناسه تراکنش خارجی را برای خرید اصلی ارائه دهید.

DeveloperBillingOptionParams نیز باید در این فراخوانی ارائه شوند. با توجه به اینکه انتخاب کاربر برای خرید اصلی برای ارتقا و تنزل رتبه حفظ می‌شود، این صفحه انتخاب کاربر را نمایش نمی‌دهد. شما باید یک توکن تراکنش خارجی جدید برای این تراکنش همانطور که در اینجا توضیح داده شده است، ایجاد کنید.

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

اشتراک‌های خریداری‌شده از طریق سیستم پرداخت گوگل پلی

به طور مشابه، کاربرانی که اشتراک فعلی خود را از طریق سیستم پرداخت گوگل پلی خریداری کرده‌اند، پس از انتخاب کاربر، باید از طریق جریان استاندارد پرداخت گوگل پلی به آنها نشان داده شود. DeveloperBillingOptionParams نباید در فراخوانی launchBillingFlow تنظیم شود.

لغو و بازیابی اشتراک

کاربران باید بتوانند اشتراک خود را در هر زمانی لغو کنند . هنگامی که کاربر اشتراکی را لغو می‌کند، پایان اشتراک ممکن است تا پایان دوره پرداخت به تعویق بیفتد. به عنوان مثال، اگر کاربری اشتراک ماهانه را در نیمه ماه لغو کند، می‌تواند تا حدود ۲ هفته باقی مانده به سرویس دسترسی داشته باشد تا زمانی که دسترسی او حذف شود. در طول این دوره، اشتراک هنوز از نظر فنی فعال است، بنابراین کاربر می‌تواند از سرویس استفاده کند.

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

اشتراک‌های خریداری شده از طریق وب‌سایت توسعه‌دهنده

اگر برای اشتراک لغو شده، شناسه تراکنش خارجی دارید، نیازی به فراخوانی launchBillingFlow() برای بازیابی اشتراک نیست، بنابراین نباید برای این نوع فعال‌سازی استفاده شود. اگر کاربری اشتراک خود را در حالی که هنوز در دوره فعال اشتراک لغو شده است، بازیابی کند، در آن زمان هیچ تراکنشی انجام نمی‌شود؛ شما می‌توانید گزارش تمدید اشتراک را پس از انقضای چرخه فعلی و تمدید بعدی ادامه دهید. این شامل مواردی می‌شود که کاربر به عنوان بخشی از بازیابی، اعتبار یا قیمت تمدید ویژه دریافت می‌کند (به عنوان مثال، یک پیشنهاد ویژه برای تشویق کاربر به ادامه اشتراک خود).

اشتراک‌های خریداری‌شده از طریق سیستم پرداخت گوگل پلی

به‌طورکلی، کاربران می‌توانند اشتراک‌های خود را در سیستم صورتحساب گوگل پلی بازیابی کنند. برای اشتراک‌های لغو شده‌ای که در ابتدا در سیستم صورتحساب گوگل پلی خریداری شده‌اند، کاربر می‌تواند در حین فعال بودن اشتراک، از طریق ویژگی «اشتراک مجدد» گوگل پلی، لغو لغو را لغو کند. در این صورت، شما یک اعلان توسعه‌دهنده بلادرنگ SUBSCRIPTION_RESTARTED در پنل مدیریت خود دریافت می‌کنید و توکن خرید جدیدی صادر نمی‌شود - توکن اصلی برای ادامه اشتراک استفاده می‌شود. برای یادگیری نحوه مدیریت بازیابی در سیستم صورتحساب گوگل پلی، به بخش «بازیابی‌ها» در راهنمای مدیریت اشتراک مراجعه کنید.

همچنین می‌توانید با فراخوانی launchBillingFlow() از داخل برنامه، عملیات بازیابی را در سیستم پرداخت گوگل پلی آغاز کنید. برای توضیح نحوه انجام این کار، به بخش «قبل از انقضای اشتراک - درون برنامه‌ای» مراجعه کنید. در مورد کاربرانی که برای خرید اصلی (که لغو شده اما هنوز فعال است) از جریان انتخاب کاربر عبور کرده‌اند، سیستم به طور خودکار انتخاب آنها را تشخیص داده و رابط کاربری را برای بازیابی این خریدها نمایش می‌دهد. از آنها خواسته می‌شود که خرید مجدد اشتراک را از طریق گوگل پلی تأیید کنند، اما نیازی به عبور مجدد از جریان انتخاب کاربر ندارند. در این حالت، یک توکن خرید جدید برای کاربر صادر می‌شود. بک‌اند شما یک اعلان توسعه‌دهنده بلادرنگ SUBSCRIPTION_PURCHASED دریافت می‌کند و مقدار linkedPurchaseToken برای وضعیت خرید جدید مانند حالت ارتقا یا تنزل رتبه تنظیم می‌شود، با توکن خرید قدیمی برای اشتراکی که لغو شده است.

اشتراک‌های مجدد

اگر اشتراکی به طور کامل منقضی شود، چه به دلیل لغو اشتراک باشد و چه به دلیل کاهش پرداخت بدون امکان بازیابی (تاریخ انقضای حساب کاربری)، کاربر برای شروع مجدد اشتراک باید دوباره مشترک شود.

همچنین می‌توان با پردازش مشابه ثبت نام استاندارد، اشتراک مجدد را از طریق برنامه فعال کرد. کاربران باید بتوانند سیستم صورتحساب مورد نظر خود را انتخاب کنند. در این مورد، می‌توان تابع launchBillingFlow() را فراخوانی کرد، همانطور که در launch the external payment flow توضیح داده شده است.

مدیریت پاسخ

وقتی خطایی رخ می‌دهد، متدهای isBillingProgramAvailableAsync() ، createBillingProgramReportingDetailsAsync() ، launchBillingFlow() ممکن است BillingResponseCode دیگری غیر از BillingResponseCode.OK ارائه دهند. مدیریت این کدهای پاسخ را به صورت زیر در نظر بگیرید:

  • BillingResponseCode.ERROR : این یک خطای داخلی است. تراکنش را ادامه ندهید یا وب‌سایت خارجی را باز نکنید. با فراخوانی API دوباره امتحان کنید.
  • BillingResponseCode.FEATURE_NOT_SUPPORTED : رابط‌های برنامه‌نویسی کاربردی (API) پرداخت‌های خارجی توسط فروشگاه Play در دستگاه فعلی پشتیبانی نمی‌شوند. تراکنش را ادامه ندهید یا وب‌سایت خارجی را باز نکنید.
  • BillingResponseCode.DEVELOPER_ERROR : خطایی در درخواست وجود دارد. قبل از ادامه، از پیام اشکال‌زدایی برای شناسایی و اصلاح خطا استفاده کنید.
  • BillingResponseCode.USER_CANCELED : با باز کردن وب‌سایت یا برنامه خارجی ادامه ندهید. برای نمایش کادر محاوره‌ای اطلاعات به کاربر، دفعه بعد که سعی می‌کنید کاربر را به خارج از برنامه هدایت کنید، دوباره launchBillingFlow() را فراخوانی کنید.
  • BillingResponseCode.BILLING_UNAVAILABLE : این تراکنش واجد شرایط پرداخت‌های خارجی نیست و بنابراین پرداخت صورتحساب توسعه‌دهنده تحت این برنامه در دسترس نخواهد بود. این یا به این دلیل است که کاربر در کشور واجد شرایط این برنامه نیست یا حساب شما با موفقیت در این برنامه ثبت نشده است. اگر مورد دوم باشد، وضعیت ثبت نام خود را در کنسول توسعه‌دهندگان Play بررسی کنید.
  • BillingResponseCode.NETWORK_ERROR ، BillingResponseCode.SERVICE_DISCONNECTED ، BillingResponseCode.SERVICE_UNAVAILABLE : اینها خطاهای گذرا هستند که باید با یک سیاست تلاش مجدد مناسب مدیریت شوند. در مورد SERVICE_DISCONNECTED ، قبل از تلاش مجدد، اتصال با Google Play را دوباره برقرار کنید.

لینک‌های پرداخت خارجی را آزمایش کنید

برای آزمایش ادغام پرداخت‌های خارجی شما، باید از آزمایش‌کنندگان مجوز استفاده شود. برای تراکنش‌هایی که توسط حساب‌های آزمایش‌کننده مجوز آغاز شده‌اند، صورتحسابی برای شما صادر نخواهد شد. برای اطلاعات بیشتر در مورد پیکربندی آزمایش‌کنندگان مجوز، به بخش «آزمایش صورتحساب درون‌برنامه‌ای با مجوز برنامه» مراجعه کنید.

مراحل بعدی

پس از اتمام یکپارچه‌سازی درون‌برنامه‌ای، آماده یکپارچه‌سازی backend خود هستید.