Payments Lite

Payments Lite เป็นวิธีใหม่ในการกำหนดและจัดการการซื้อในแอพสำหรับเกมของคุณ ฟีเจอร์ใหม่นี้ช่วยให้คุณพัฒนาโซลูชั่นการชำระเงินแบบไร้เซิร์ฟเวอร์ได้

หากคุณมีเซิร์ฟเวอร์ของตัวเอง คุณอาจต้องการกำหนดและโฮสต์ผลิตภัณฑ์การชำระเงินของคุณเองในส่วนการรับชำระเงิน

ภาพรวม

Payments Lite เป็นวิธีใหม่ในการกำหนดการซื้อในแอพสำหรับเกมของคุณโดยเป็น products โดยตรงในแดชบอร์ดของแอพ โดยจะกำหนด ID, ชื่อ, คำอธิบาย, ราคา, สกุลเงิน และรูปภาพ จากนั้น product ID จะถูกส่งผ่านในการเรียกใช้ JavaScript เพื่อเริ่มขั้นตอนการชำระเงิน แทน URL OG Object ที่ขั้นตอนการชำระเงินปกติจำเป็นต้องใช้ ซึ่งช่วยให้สร้างและแก้ไขผลิตภัณฑ์ต่างๆ ได้อย่างคล่องตัวโดยไม่จำเป็นต้องทำการพุชเซิร์ฟเวอร์

การสร้างผลิตภัณฑ์

หากต้องการสร้างผลิตภัณฑ์ คุณต้องไปที่ "การชำระเงินแคนวาส" ในแดชบอร์ดของแอพเพื่อแสดงส่วนย่อย "ผลิตภัณฑ์"

หากต้องการสร้างผลิตภัณฑ์ ให้คลิกปุ่ม "สร้างผลิตภัณฑ์ใหม่" ที่ด้านขวาบน ในกล่องโต้ตอบรายละเอียดสินค้า ให้ป้อน Product ID, Title, Description และ Price แล้วเลือกสกุลเงินจากเมนูดร็อปดาวน์ แล้วอัพโหลดรูปภาพขนาด 50 x 50 พิกเซลที่จะแสดงถึงผลิตภัณฑ์ของคุณ

Payments Lite จะอนุญาตให้คุณเรียกใช้กล่องโต้ตอบการชำระเงินสำหรับผลิตภัณฑ์เดียวเท่านั้น ดังนั้นหากคุณวางแผนที่จะขายสกุลเงินในเกม ผลิตภัณฑ์ของคุณควรแสดงชุดสกุลเงินด้วย

API รายการผลิตภัณฑ์

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

GET https://graph.facebook.com/APP_ID/products

โดยใช้พารามิเตอร์ต่อไปนี้

ชื่อพารามิเตอร์ ประเภท ค่า จำเป็นต้องระบุหรือไม่

product_ids

สตริง

รายการ ID ผลิตภัณฑ์ของแอพที่คั่นด้วยเครื่องหมายจุลภาค

ไม่จำเป็น

ตัวอย่างการเรียกใช้และการตอบกลับ:

FB.api(
  '/app/products', 
  'get', 
  function(response) {
    console.log(response);
  }
);
FB.API(
  "app/products",
  HttpMethod.GET,
  this.productCallback // callback that receives a IGraphResult
);
{
  "data": [
    {
      "title": "100 coins lite package",
      "product_id": "payments_lite_test_01",
      "product_type": "managed",
      "description": "Package of 100 coins to test Payments Lite",
      "price": "$1.00",
      "price_amount_cents": 100,
      "price_currency_code": "USD"
    },
    {
      "title": "Friend Smash!",
      "product_id": "480369938658210_premium",
      "product_type": "managed",
      "description": "One time purchase to play game",
      "price": "$0.01",
      "price_amount_cents": 1,
      "price_currency_code": "USD"
    }
  ],
  "paging": {
    "cursors": {
      "before": "QVFIUlg1cXRqcnVad05taFRVRlZAZAU2tQdWNSd0FKRDh1TTJMdGd3azVTZA3ZAZAOFgzcXZAaZAlQ1N1VMMmRmZAXpUNG9KX2tsSWhYVlB6Yko2cEotUXZAiRGgzQkFKc0lJLUQzVlJxbHVPampZAS19SWEQ4",
      "after": "QVFIUmRiSGltU1BKQnRqWTRxNkd1WktUTHFKMmxvaEwtV2dSYUtpeDJxQnN0Ri1mZAnF0TG1Ub3oyWnphSExqZAU5qQzNNZAmFrejVnSTlaRVVGMXdSSlNsNE13"
    }
  }
}

หากคุณกำหนดค่าผลิตภัณฑ์มากกว่า 25 รายการ การตอบกลับจะส่งคืนเฉพาะ 25 รายการแรก คุณสามารถดูข้อมูลเกี่ยวกับวิธีดึงข้อมูลส่วนที่เหลือได้ที่ https://developers.facebook.com/docs/graph-api/using-graph-api#paging

การเรียกใช้ UI

เมื่อผู้ใช้เลือกผลิตภัณฑ์แล้ว คุณควรแจ้งให้ผู้ใช้ดำเนินการซื้อให้เสร็จสมบูรณ์โดยเรียกใช้กล่องโต้ตอบการชำระเงิน โดยสามารถทำได้ผ่านทางฟังก์ชั่น ui ของอ็อบเจ็กต์ FB ของ Facebook Javascript SDK

หากต้องการเรียกใช้กล่องโต้ตอบการชำระเงิน คุณควรระบุอ็อบเจ็กต์ JSON ให้เป็นพารามิเตอร์แรกพร้อมด้วยคีย์ต่อไปนี้

ชื่อพารามิเตอร์ ประเภท ค่า จำเป็นต้องระบุหรือไม่

method

สตริง

pay

จำเป็น

action

สตริง

purchaseiap

จำเป็น

product_id

สตริง

ID ผลิตภัณฑ์ของคุณ

จำเป็น

developer_payload

สตริง

สตริงที่กำหนดเพย์โหลดที่ควรใช้เพื่อตรวจสอบยืนยันว่าธุรกรรมนั้นมาจากผู้พัฒนา

ไม่จำเป็น

quantity

จำนวนเต็ม

หากกำหนดไว้ ควรเป็น 1 เสมอ

ไม่จำเป็น

ตัวอย่างรหัสในการเรียกใช้กล่องโต้ตอบ:

FB.ui(
  {
    method: 'pay',
    action: 'purchaseiap',
    product_id: 'com.fb.friendsmash.coins.10',
    developer_payload: 'this_is_a_test_payload'
  },
  response => (console.log(response)) // Callback function
);
FB.PayWithProductId(
  "com.fb.friendsmash.coins.10",
  "purchaseiap",
  1,
  null, null, null, null, null,
  this.payCallback  // Callback function that receives an IPayResult
);

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

ตัวอย่างการตอบกลับที่สำเร็จ:

{
  app_id: 241431489326925,
  developer_payload: "this_is_a_test_payload",
  payment_id: 860496004080598,
  product_id: "com.fb.friendsmash.coins.10",
  purchase_time: 1473719771,
  purchase_token: "10157567446205226",
  signed_request: "M3fQFj6MlK7WJi597QgCvMlMLh7fl_...",
}

ตัวอย่างธุรกรรมที่มีข้อผิดพลาด:

{
  error_code: 1383010, 
  error_message: "User canceled the order."
}

การแสดงรายการซื้อของผู้เล่น

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

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

ตัวอย่างเช่น โดยใช้การเรียกใช้ดังต่อไปนี้

FB.api(
  '/app/purchases',
  'get',
  {access_token: 'ACCESS_TOKEN'},      // user access token
   payload => {        // callback function
     console.log('purchases payload:');
     console.log(payload);
   }
);
FB.API(
  "/app/purchases?access_token=YOUR_ACCESS_TOKEN",
  HttpMethod.GET,
  this.purchasesCallback // callback that receives a IGraphResult
);

ตัวอย่างการตอบกลับ:

{
  data: [
    {
      app_id: 241431489326925,
      developer_payload: "this_is_a_test_payload",
      payment_id: 860496004080598,
      product_id: "com.fb.friendsmash.coin",
      purchase_time: 1473719771,
      purchase_token: "10157567446205226",
      signed_request: "M3fQFj6MlK7WJi597QgCvMlMLh7fl_...",
    },
    {
      ...
    }
  ],
  paging: {
    cursors: {
      after: "M3fQFj6MlK7WJi597QgCvMlMLh7fl...",
      before: "M3fQFj6MlK7WJi597QgCvMlMLh7...",
    }
  }
}

หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ sign_request ที่ส่งคืนมาจากการตอบกลับนี้ โปรดดูที่ส่วนนี้

หากคุณมีการซื้อมากกว่า 25 รายการ การตอบกลับจะส่งคืนเฉพาะ 25 รายการแรก คุณสามารถดูข้อมูลเกี่ยวกับวิธีดึงข้อมูลส่วนที่เหลือได้ที่ https://developers.facebook.com/docs/graph-api/using-graph-api#paging

สำหรับ API กราฟตั้งแต่เวอร์ชั่น 11.0 เป็นต้นไป ช่อง consumed จะเปลี่ยนชื่อเป็น is_consumed

การใช้การซื้อ

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

หากต้องการใช้การซื้อ คุณต้องใช้ purchase_token ซึ่งระบุไว้ในการเรียกกลับ JavaScript หรือในรายการซื้อของผู้เล่นที่กล่าวไว้ในหัวข้อล่าสุด หากต้องการใช้การซื้อ คุณควรเรียกตำแหน่งข้อมูลของ API กราฟดังต่อไปนี้

POST	https://graph.facebook.com/PURCHASE_TOKEN/consume

ตัวอย่าง โดยใช้ Facebook JavaScript SDK:

FB.api(
  '/' + PURCHASE_TOKEN + '/consume',    // Replace the PURCHASE_TOKEN
  'post',
  {access_token: access_token},         // Replace with a user access token
  result => {
    console.log('consuming product', productId, 'with purchase token', purchaseToken);
    console.log('Result:');
    console.log(result);
  }
);
FB.API(
  "/YOUR_PURCHASE_TOKEN/consume?access_token=YOUR_ACCESS_TOKEN",
  HttpMethod.POST,
  this.consumeCallback // callback that receives a IGraphResult
);

ตัวอย่างการตอบกลับที่สำเร็จ:

{
  success: true,
}

ข้อโต้แย้ง

ข้อโต้แย้งอาจเกิดขึ้นได้หลังจากชำระเงินเสร็จสิ้นไปนานแล้ว ดังนั้นเพื่อจัดการกับข้อโต้แย้ง จึงต้องใช้องค์ประกอบของเซิร์ฟเวอร์เพื่อให้ผู้พัฒนาได้รับการแจ้งเตือนเมื่อผู้เล่นเริ่มขั้นตอนการโต้แย้ง ใน Payments Lite ซึ่งเป็นระบบการชำระเงินแบบไร้เซิร์ฟเวอร์ ข้อโต้แย้งทั้งหมดจะได้รับการคืนเงินและปิดโดยอัตโนมัติ หากต้องการรายละเอียดเกี่ยวกับวิธีการใช้การชำระเงินและจัดการกับข้อโต้แย้งโดยใช้องค์ประกอบของเซิร์ฟเวอร์ โปรดดูที่การรับชำระเงินและข้อโต้แย้ง