ใช้ Google Play Billing

เผยแพร่: 2 ธันวาคม 2020

นอกจากจะช่วยให้แอปของคุณขายสินค้าดิจิทัลและการสมัครใช้บริการใน Play Store ได้แล้ว Google Play Billing ยังมีเครื่องมือสำหรับจัดการแคตตาล็อก ราคา และการสมัครใช้บริการ รวมถึงรายงานที่มีประโยชน์และขั้นตอนการชำระเงินที่ขับเคลื่อนโดย Play Store ซึ่งผู้ใช้คุ้นเคยอยู่แล้ว นี่เป็นข้อกำหนดสำหรับแอปพลิเคชันที่เผยแพร่ใน Play Store ซึ่งขายสินค้าดิจิทัล

Google Play Billing API มีคำศัพท์เป็นของตัวเอง รวมถึงคอมโพเนนต์ไคลเอ็นต์และแบ็กเอนด์ ส่วนนี้ครอบคลุม API เพียงส่วนเล็กๆ ที่ใช้สำหรับ Digital Goods API และกิจกรรมบนเว็บที่เชื่อถือได้ อย่าลืมอ่านเอกสารประกอบของ Google Play Billing และทำความเข้าใจแนวคิดของเอกสารนี้ก่อนผสานรวมเข้ากับแอปพลิเคชันเวอร์ชันที่ใช้งานจริง

ขั้นตอนพื้นฐาน

หากต้องการจัดจำหน่ายสินค้าดิจิทัลผ่าน Play Store ให้กำหนดค่าแคตตาล็อกใน Play Store และเชื่อมต่อ Play Store เป็นวิธีการชำระเงินจาก PWA

โดยทำดังนี้ในอินเทอร์เฟซ Play Store

  1. คลิกผลิตภัณฑ์ในเมนู Play Console ดูไอเทมที่ซื้อในแอปและการสมัครใช้บริการที่มีอยู่ ขั้นตอนที่ 1: ค้นหาส่วนผลิตภัณฑ์
  2. คลิกสร้างผลิตภัณฑ์เพื่อเพิ่มผลิตภัณฑ์ใหม่ ขั้นตอนที่ 2: ไปที่อินเทอร์เฟซผลิตภัณฑ์เพื่อเพิ่มผลิตภัณฑ์ใหม่
  3. เพิ่มรหัสผลิตภัณฑ์ ชื่อ คำอธิบาย และราคา สร้างรหัสผลิตภัณฑ์ที่มีความหมายและจดจำได้ง่าย เนื่องจากคุณต้องใช้รหัสดังกล่าวในภายหลัง รหัสจะเปลี่ยนแปลงไม่ได้เมื่อสร้างแล้ว ช่องที่ไม่มีข้อมูลจำนวนมากสำหรับแต่ละผลิตภัณฑ์
  4. หากสร้างการสมัครใช้บริการ คุณจะต้องระบุระยะเวลาการเรียกเก็บเงินด้วย คุณสามารถแสดงสิทธิประโยชน์ของการสมัครใช้บริการและเพิ่มฟีเจอร์ต่างๆ เช่น ช่วงทดลองใช้ฟรี ราคาช่วงแนะนำ ระยะเวลาผ่อนผัน และตัวเลือกการสมัครใช้บริการอีกครั้ง
  5. คลิกเปิดใช้งานเพื่อให้ผลิตภัณฑ์พร้อมใช้งาน

หรือจะเพิ่มผลิตภัณฑ์ด้วย Play Developers API ก็ได้หากต้องการ

เมื่อกําหนดค่าแคตตาล็อกแล้ว ขั้นตอนถัดไปคือการกําหนดค่าขั้นตอนการชำระเงินจาก PWA ใช้ Digital Goods API ร่วมกับ Payment Request API

ดึงข้อมูลราคาผลิตภัณฑ์ด้วย Digital Goods API

เมื่อใช้ Google Play Billing โปรดตรวจสอบว่าราคาที่แสดงต่อผู้ใช้ตรงกับราคาจากข้อมูลผลิตภัณฑ์ใน Store การซิงค์ราคาเหล่านั้นด้วยตนเองเป็นไปไม่ได้ ดังนั้น 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;
}

คุณสามารถตรวจหาการรองรับ Digital Goods API ได้โดยตรวจสอบว่า getDigitalGoodsService() พร้อมใช้งานบนออบเจ็กต์ window หรือไม่

จากนั้นเรียก window.getDigitalGoodsService() โดยมีตัวระบุ Google Play Billing เป็นพารามิเตอร์ ซึ่งจะแสดงอินสแตนซ์บริการสําหรับการเรียกเก็บเงินของ Google Play และผู้ให้บริการรายอื่นๆ สามารถใช้การรองรับ Digital Goods API และมีตัวระบุที่แตกต่างกันได้

สุดท้าย ให้เรียก getDetails() ในข้อมูลอ้างอิงไปยังออบเจ็กต์ Google Play Billing โดยส่ง SKU ของรายการเป็นพารามิเตอร์ เมธอดนี้จะแสดงผลออบเจ็กต์รายละเอียดที่มีทั้งราคาและค่าสกุลเงินของสินค้าที่แสดงต่อผู้ใช้ได้

เริ่มขั้นตอนการซื้อ

Payment Request API เปิดใช้ขั้นตอนการซื้อบนเว็บ และยังใช้สำหรับการผสานรวม Google Play Billing ด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของ Payment Request API หากคุณเพิ่งเริ่มใช้ Payment Request 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 ไม่มีข้อมูลเกี่ยวกับตัวตนของผู้ใช้ ด้วยเหตุนี้ คุณจึงต้องเชื่อมโยงการซื้อกับผู้ใช้ในแบ็กเอนด์และตรวจสอบว่าผู้ใช้มีสิทธิ์เข้าถึงรายการที่ซื้อ เมื่อเชื่อมโยงการซื้อกับผู้ใช้ อย่าลืมบันทึกโทเค็นการซื้อ เนื่องจากคุณอาจต้องใช้โทเค็นดังกล่าวเพื่อยืนยันว่ามีการยกเลิกหรือคืนเงินการซื้อ หรือเพื่อยืนยันว่าการสมัครใช้บริการยังใช้งานได้อยู่หรือไม่ โปรดดู Real Time Developer Notifications API และ Google Play Developer API เนื่องจากมีปลายทางสำหรับจัดการเคสเหล่านั้นในแบ็กเอนด์

ตรวจสอบการมีสิทธิ์ที่มีอยู่

ผู้ใช้อาจแลกรหัสโปรโมชันแล้วหรืออาจสมัครใช้บริการผลิตภัณฑ์ของคุณอยู่ หากต้องการยืนยันว่าผู้ใช้มีสิทธิ์ที่เหมาะสม คุณสามารถเรียกใช้คำสั่ง listPurchases() ในบริการสินค้าดิจิทัล ซึ่งจะแสดงรายการการซื้อทั้งหมดที่ลูกค้าดำเนินการในแอปของคุณ นอกจากนี้ยังเป็นตําแหน่งที่จะรับทราบการซื้อที่ยังไม่ได้รับการยอมรับเพื่อให้มั่นใจว่าผู้ใช้แลกสิทธิ์ของตนได้อย่างถูกต้อง

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