Payments Lite เป็นวิธีใหม่ในการกำหนดและจัดการการซื้อในแอพสำหรับเกมของคุณ ฟีเจอร์ใหม่นี้ช่วยให้คุณพัฒนาโซลูชั่นการชำระเงินแบบไร้เซิร์ฟเวอร์ได้ หากคุณมีเซิร์ฟเวอร์ของตัวเอง คุณอาจต้องการกำหนดและโฮสต์ผลิตภัณฑ์การชำระเงินของคุณเองในส่วนการรับชำระเงิน |
Payments Lite เป็นวิธีใหม่ในการกำหนดการซื้อในแอพสำหรับเกมของคุณโดยเป็น products
โดยตรงในแดชบอร์ดของแอพ โดยจะกำหนด ID, ชื่อ, คำอธิบาย, ราคา, สกุลเงิน และรูปภาพ จากนั้น product ID
จะถูกส่งผ่านในการเรียกใช้ JavaScript เพื่อเริ่มขั้นตอนการชำระเงิน แทน URL OG Object
ที่ขั้นตอนการชำระเงินปกติจำเป็นต้องใช้ ซึ่งช่วยให้สร้างและแก้ไขผลิตภัณฑ์ต่างๆ ได้อย่างคล่องตัวโดยไม่จำเป็นต้องทำการพุชเซิร์ฟเวอร์
หากต้องการสร้างผลิตภัณฑ์ คุณต้องไปที่ "การชำระเงินแคนวาส" ในแดชบอร์ดของแอพเพื่อแสดงส่วนย่อย "ผลิตภัณฑ์"
หากต้องการสร้างผลิตภัณฑ์ ให้คลิกปุ่ม "สร้างผลิตภัณฑ์ใหม่" ที่ด้านขวาบน ในกล่องโต้ตอบรายละเอียดสินค้า ให้ป้อน Product ID
, Title
, Description
และ Price
แล้วเลือกสกุลเงินจากเมนูดร็อปดาวน์ แล้วอัพโหลดรูปภาพขนาด 50 x 50 พิกเซลที่จะแสดงถึงผลิตภัณฑ์ของคุณ
Payments Lite จะอนุญาตให้คุณเรียกใช้กล่องโต้ตอบการชำระเงินสำหรับผลิตภัณฑ์เดียวเท่านั้น ดังนั้นหากคุณวางแผนที่จะขายสกุลเงินในเกม ผลิตภัณฑ์ของคุณควรแสดงชุดสกุลเงินด้วย
หลังจากที่กำหนดผลิตภัณฑ์ที่จะจำหน่ายในเกมของคุณแล้ว คุณควรสร้างร้านค้าในเกมด้วย ซึ่งจะช่วยให้ผู้เล่นสามารถเลือกผลิตภัณฑ์ที่สนใจจะซื้อได้ เพื่อให้แน่ใจว่าคุณใช้ข้อมูลที่ถูกต้องสำหรับผลิตภัณฑ์ที่คุณต้องการขาย คุณสามารถใช้ API รายการผลิตภัณฑ์เพื่อรับข้อมูลเกี่ยวกับผลิตภัณฑ์ได้ หากต้องการรายการผลิตภัณฑ์ คุณควรเรียกใช้ตำแหน่งข้อมูลต่อไปนี้
GET https://graph.facebook.com/APP_ID/products
โดยใช้พารามิเตอร์ต่อไปนี้
ชื่อพารามิเตอร์ | ประเภท | ค่า | จำเป็นต้องระบุหรือไม่ |
---|---|---|---|
| สตริง | รายการ ID ผลิตภัณฑ์ของแอพที่คั่นด้วยเครื่องหมายจุลภาค | ไม่จำเป็น |
ตัวอย่างการเรียกใช้และการตอบกลับ:
FB.api(
'/app/products',
'get',
function(response) {
console.log(response);
}
);
{ "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
ของอ็อบเจ็กต์ FB
ของ Facebook Javascript SDK
หากต้องการเรียกใช้กล่องโต้ตอบการชำระเงิน คุณควรระบุอ็อบเจ็กต์ JSON ให้เป็นพารามิเตอร์แรกพร้อมด้วยคีย์ต่อไปนี้
ชื่อพารามิเตอร์ | ประเภท | ค่า | จำเป็นต้องระบุหรือไม่ |
---|---|---|---|
| สตริง |
| จำเป็น |
| สตริง |
| จำเป็น |
| สตริง | ID ผลิตภัณฑ์ของคุณ | จำเป็น |
| สตริง | สตริงที่กำหนดเพย์โหลดที่ควรใช้เพื่อตรวจสอบยืนยันว่าธุรกรรมนั้นมาจากผู้พัฒนา | ไม่จำเป็น |
| จำนวนเต็ม | หากกำหนดไว้ ควรเป็น | ไม่จำเป็น |
ตัวอย่างรหัสในการเรียกใช้กล่องโต้ตอบ:
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
);
หลังจากดำเนินขั้นตอนนี้เสร็จสมบูรณ์แล้ว คุณสามารถตรวจสอบยืนยันผลลัพธ์ของธุรกรรมได้โดยระบุฟังก์ชั่นการเรียกกลับให้เป็นพารามิเตอร์ที่สองของการเรียกใช้ ระบบจะเรียกใช้ฟังก์ชั่นนี้พร้อมด้วยอ็อบเจ็กต์ที่มีข้อมูลเกี่ยวกับธุรกรรมหรือรหัสและข้อความแสดงข้อผิดพลาด
ตัวอย่างการตอบกลับที่สำเร็จ:
{ 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);
}
);
ตัวอย่างการตอบกลับ:
{ 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);
}
);
ตัวอย่างการตอบกลับที่สำเร็จ:
{ success: true, }
ข้อโต้แย้งอาจเกิดขึ้นได้หลังจากชำระเงินเสร็จสิ้นไปนานแล้ว ดังนั้นเพื่อจัดการกับข้อโต้แย้ง จึงต้องใช้องค์ประกอบของเซิร์ฟเวอร์เพื่อให้ผู้พัฒนาได้รับการแจ้งเตือนเมื่อผู้เล่นเริ่มขั้นตอนการโต้แย้ง ใน Payments Lite ซึ่งเป็นระบบการชำระเงินแบบไร้เซิร์ฟเวอร์ ข้อโต้แย้งทั้งหมดจะได้รับการคืนเงินและปิดโดยอัตโนมัติ หากต้องการรายละเอียดเกี่ยวกับวิธีการใช้การชำระเงินและจัดการกับข้อโต้แย้งโดยใช้องค์ประกอบของเซิร์ฟเวอร์ โปรดดูที่การรับชำระเงินและข้อโต้แย้ง