از Google Play Billing استفاده کنید

تاریخ انتشار: 2 دسامبر 2020

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

Google Play Billing API اصطلاحات خاص خود را دارد و شامل مولفه های مشتری و باطن است. این بخش تنها بخش کوچکی از API را پوشش می‌دهد که مخصوص استفاده از Digital Goods API و Trusted Web Activity است. مطمئن شوید که اسناد صورت‌حساب Google Play را بخوانید و مفاهیم آن را قبل از ادغام در یک برنامه تولیدی درک کنید.

جریان اساسی

برای ارائه کالاهای دیجیتال با فروشگاه Play، کاتالوگ خود را در Play Store پیکربندی کنید و Play Store را به عنوان یک روش پرداخت از PWA خود وصل کنید.

می توانید این کار را در رابط کاربری Play Store به صورت زیر انجام دهید:

  1. در منوی Play Console روی محصولات کلیک کنید. محصولات و اشتراک های درون برنامه ای موجود خود را مشاهده کنید. مرحله 1: بخش محصولات را پیدا کنید.
  2. برای افزودن محصول جدید روی ایجاد محصول کلیک کنید. مرحله 2: برای افزودن محصولات جدید از رابط محصولات بازدید کنید.
  3. شناسه محصول، نام، توضیحات و قیمت را اضافه کنید. همانطور که بعداً به آن‌ها نیاز دارید، شناسه‌های محصول معنی‌دار و قابل یادآوری ایجاد کنید. شناسه ها پس از ایجاد قابل تغییر نیستند. تعداد زیادی فیلد خالی برای هر محصول.
  4. در صورت ایجاد اشتراک، باید یک دوره صورتحساب را نیز مشخص کنید. می‌توانید مزایای اشتراک خود را فهرست کنید و ویژگی‌هایی مانند دوره آزمایشی رایگان، قیمت‌های اولیه، مهلت و گزینه اشتراک مجدد را اضافه کنید.
  5. برای در دسترس قرار دادن محصول روی Activate کلیک کنید.

در صورت تمایل، می‌توانید محصولات خود را با Play Developers API اضافه کنید.

هنگامی که کاتالوگ شما پیکربندی شد، مرحله بعدی پیکربندی جریان پرداخت از PWA است. از ترکیبی از Digital Goods API و Payment Request API استفاده کنید.

با Digital Goods API قیمت محصول را دریافت کنید

هنگام استفاده از صورت‌حساب Google Play، مطمئن شوید که قیمت نمایش داده شده به کاربران با قیمت فهرست فروشگاه مطابقت دارد. همگام‌سازی دستی این قیمت‌ها غیرممکن است، بنابراین Digital Goods API راهی را برای برنامه کاربردی وب فراهم می‌کند تا از ارائه‌دهنده پرداخت اصلی برای قیمت‌ها پرس و جو کند:

// The SKU for the product, as defined in the Play Store interface
async function populatePrice(sku) {
  try {
    // Check if the Digital Goods API is supported by the browser.
    if (window.getDigitalGoodsService) {
      // The Digital Goods API can be supported by other Payments provider.
      // In this case, we're retrieving the Google Play Billing provider.
      const service =
          await window.getDigitalGoodsService("https://play.google.com/billing");

      // Fetch product details using the `getDetails()` method.
      const details = await service.getDetails([sku]);

      if (details.length === 0) {
        console.log(`Could not get SKU: "${sku}".`);
        return false;
      }

      // The details contain both the price and the currenncy.
      item = details[0];
      const value = item.price.value;
      const currency = item.price.currency;

      const formattedPrice = new Intl.NumberFormat(navigator.language, {
        style: 'currency', currency: currency }).format(value);

      // Display the price to the user.
      document.getElementById("price").innerHTML = formattedPrice;
    } else {
      console.error("Could not get price for SKU \"" + sku + "\".");
    }
  } catch (error) {
    console.log(error);
  }
  return false;
}

می‌توانید با بررسی اینکه getDigitalGoodsService() در شی window موجود است، پشتیبانی از Digital Goods API را شناسایی کنید.

سپس window.getDigitalGoodsService() با شناسه صورتحساب Google Play به عنوان پارامتر فراخوانی کنید. این یک نمونه سرویس را برای صورت‌حساب Google Play برمی‌گرداند و سایر فروشندگان می‌توانند از Digital Goods API پشتیبانی کنند و شناسه‌های مختلفی داشته باشند.

در نهایت، getDetails() در مرجع شیء صورتحساب Google Play که SKU مورد را به عنوان پارامتر ارسال می کند، فراخوانی کنید. این روش یک شیء جزئیات را که شامل قیمت و ارز موردی است که می تواند به کاربر نمایش داده شود، برمی گرداند.

جریان خرید را شروع کنید

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

برای استفاده از API با Google Play Billing، باید یک ابزار پرداخت اضافه کنید که دارای روشی به نام https://play.google.com/billing است. SKU را به عنوان بخشی از داده های ابزار اضافه کنید:

const supportedInstruments = [{
  supportedMethods: "https://play.google.com/billing",
  data: {
    sku: sku
  }
}];

سپس طبق معمول یک شیء PaymentRequest بسازید و طبق معمول از API استفاده کنید

const request = new PaymentRequest(supportedInstruments, details);

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

پس از تکمیل تراکنش، از Digital Goods API برای تایید پرداخت استفاده کنید. شی پاسخ از PaymentRequest حاوی رمزی است که می توانید از آن برای تأیید تراکنش استفاده کنید:

const response = await request.show();
const token = response.details.token;
const service = await window.getDigitalGoodsService("https://play.google.com/billing");
await service.acknowledge(token, 'onetime');

Digital Goods API و Payment Request API اطلاعاتی درباره هویت کاربر ندارند. در نتیجه، این به شما بستگی دارد که خرید را به کاربر در باطن خود مرتبط کنید و اطمینان حاصل کنید که آنها به موارد خریداری شده دسترسی دارند. هنگامی که خرید را به یک کاربر مرتبط می کنید، به یاد داشته باشید که رمز خرید را ذخیره کنید، زیرا ممکن است برای بررسی اینکه آیا خرید لغو شده است یا بازپرداخت شده است، یا اینکه اشتراک هنوز فعال است، به آن نیاز داشته باشید. API Real Time Developer Notifications و Google Play Developer API را بررسی کنید زیرا آنها نقاط پایانی را برای رسیدگی به این موارد در باطن شما ارائه می دهند.

حقوق موجود را بررسی کنید

کاربر ممکن است یک کد تبلیغاتی را بازخرید کرده باشد یا ممکن است اشتراک موجودی برای محصول شما داشته باشد. برای تأیید اینکه کاربر دارای حقوق مناسب است، می‌توانید دستور listPurchases() را در سرویس کالاهای دیجیتال فراخوانی کنید. این همه خریدهایی را که مشتری شما در برنامه شما انجام داده است برمی گرداند. این همچنین مکانی برای تأیید هرگونه خرید تأیید نشده است تا اطمینان حاصل شود که کاربر به درستی از حقوق خود استفاده می کند.

const purchases = await itemService.listPurchases();
for (p of purchases) {
  if (!p.acknowledged) {
    await itemService.acknowledge(p.purchaseToken, 'onetime');
  }
}