Thanh toán nhanh

Thanh toán nhanh là cách mới để xác định và quản lý giao dịch mua hàng trong ứng dụng của game. Tính năng mới này cho phép bạn phát triển một giải pháp thanh toán không cần máy chủ.

Nếu có máy chủ riêng, bạn nên xác định và lưu trữ các sản phẩm thanh toán của chính mình trong bài viết Nhận thanh toán.

Tổng quan

Thanh toán nhanh là cách mới để xác định giao dịch mua hàng trong ứng dụng của game như products trực tiếp trong Bảng điều khiển ứng dụng, chỉ định ID, tên, nội dung mô tả, giá, đơn vị tiền tệ và hình ảnh. Sau đó, product ID được chuyển vào lệnh gọi JavaScript để bắt đầu quy trình thanh toán thay vì URL OG Object mà quy trình thanh toán thông thường yêu cầu. Việc này cho phép đơn giản hóa quy trình tạo và sửa đổi sản phẩm mà không cần đẩy lên máy chủ.

Tạo sản phẩm

Để tạo sản phẩm, bạn cần điều hướng đến phần Thanh toán Canvas trong Bảng điều khiển ứng dụng để mở phần phụ Sản phẩm.

Để tạo sản phẩm, hãy nhấp vào nút Tạo sản phẩm mới ở trên cùng bên phải. Trong hộp thoại Chi tiết sản phẩm, hãy nhập Product ID, Title, DescriptionPrice, chọn đơn vị tiền tệ trong menu thả xuống rồi tải lên hình ảnh 50x50 px hiển thị sản phẩm của bạn.

Thanh toán nhanh sẽ chỉ cho phép gọi Hộp thoại thanh toán cho một sản phẩm. Vì vậy, nếu bạn đang lên kế hoạch bán đơn vị tiền tệ trong game, sản phẩm của bạn phải phản ánh một gói đơn vị tiền tệ.

API Danh sách sản phẩm

Sau khi đã xác định sản phẩm sẽ bán trong game, bạn nên xây dựng cửa hàng trong game của mình. Việc này sẽ cho phép người chơi chọn sản phẩm mà họ muốn mua. Để đảm bảo rằng bạn đang sử dụng thông tin chính xác cho sản phẩm mà mình muốn bán, bạn có thể sử dụng API Danh sách sản phẩm để lấy thông tin về sản phẩm. Để lấy danh sách sản phẩm, bạn cần gọi điểm cuối sau:

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

Với các thông số sau:

Tên thông số Loại Giá trị Bắt buộc

product_ids

Chuỗi

Danh sách ID sản phẩm của ứng dụng được phân tách bằng dấu phẩy

Không

Lệnh gọi và phản hồi mẫu:

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"
    }
  }
}

Nếu bạn đã đặt cấu hình hơn 25 sản phẩm, phản hồi sẽ chỉ trả về 25 sản phẩm đầu tiên. Bạn có thể tham khảo https://developers.facebook.com/docs/graph-api/using-graph-api#paging để biết thông tin về cách tìm nạp phần còn lại.

Gọi giao diện người dùng

Sau khi người dùng chọn sản phẩm, bạn nên nhắc họ hoàn tất giao dịch mua hàng bằng cách gọi hộp thoại Thanh toán. Bạn có thể thực hiện việc này qua hàm ui của đối tượng FB Facebook Javascript SDK.

Để gọi hộp thoại Thanh toán, bạn nên cung cấp đối tượng JSON làm thông số đầu tiên với các khóa sau:

Tên thông số Loại Giá trị Bắt buộc

method

Chuỗi

pay

action

Chuỗi

purchaseiap

product_id

Chuỗi

ID sản phẩm của bạn

developer_payload

Chuỗi

Chuỗi xác định phần tải dữ liệu sẽ được dùng để xác minh rằng giao dịch do nhà phát triển bắt đầu.

Không

quantity

Số nguyên

Nếu được xác định, giá trị này phải luôn là 1.

Không

Mã mẫu để gọi hộp thoại:

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
);

Sau khi hoàn tất quy trình, bạn có thể xác minh kết quả của giao dịch bằng cách cung cấp hàm gọi lại làm thông số thứ hai của lệnh gọi. Hàm này sẽ được gọi bằng một đối tượng chứa thông tin về giao dịch hoặc mã lỗi và thông báo:

Ví dụ về phản hồi thành công:

{
  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_...",
}

Ví dụ về giao dịch bị lỗi:

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

Liệt kê giao dịch mua hàng của người chơi

Thanh toán nhanh cho phép liệt kê và sử dụng mặt hàng đã mua như một hình thức xác minh và quản lý mua hàng. Nghĩa là hệ thống sẽ ngăn người chơi mua các sản phẩm không sử dụng được trong game. Cách làm tốt nhất là bạn nên kiểm tra giao dịch mua hàng của người chơi hiện tại sau khi game tải xong để xác minh rằng không có mặt hàng đã mua nào đang chờ sử dụng.

Để liệt kê giao dịch mua hàng của người chơi hiện tại, bạn có thể sử dụng điểm cuối /APP_ID/purchases của ứng dụng cùng với mã truy cập dành cho người dùng. Lệnh gọi này sẽ trả về danh sách tất cả mặt hàng đã mua không được sử dụng của người chơi hiện tại, cùng với thông tin mua hàng tương ứng của họ.

Ví dụ: sử dụng lệnh gọi sau:

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
);

Phản hồi mẫu:

{
  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...",
    }
  }
}

Để biết thêm thông tin về signed_request được trả về trong phản hồi này, vui lòng xem phần này.

Nếu bạn có hơn 25 giao dịch mua hàng, phản hồi sẽ chỉ trả về 25 giao dịch đầu tiên. Bạn có thể tham khảo https://developers.facebook.com/docs/graph-api/using-graph-api#paging để biết thông tin về cách tìm nạp phần còn lại.

Kể từ API Đồ thị v11.0, trường consumed sẽ được đổi tên thành is_consumed.

Sử dụng mặt hàng đã mua

Sau khi sản phẩm được mua và bạn đã xác minh rằng đó là giao dịch mua hàng hợp pháp bằng yêu cầu đã ký và phần tải dữ liệu của nhà phát triển, bạn phải trao mặt hàng hoặc đơn vị tiền tệ đã mua cho người chơi. Tại thời điểm này, nếu sản phẩm đã mua sử dụng được (tức là đơn vị tiền tệ, mặt hàng sử dụng một lần, v.v.), bạn phải đánh dấu mặt hàng đã mua này là đã sử dụng để cho phép người dùng mua bản sao khác của mặt hàng đó. Với những sản phẩm không sử dụng được (tức là mở khóa chức năng đặc biệt, chương trình VIP đặc biệt, v.v.), bạn phải đánh dấu là không được sử dụng để ngăn người dùng mua cùng một mặt hàng nhiều lần.

Để sử dụng một mặt hàng đã mua, bạn phải dùng purchase_token được cung cấp trong lệnh gọi lại JavaScript hoặc trong danh sách giao dịch mua hàng của người chơi được thảo luận ở phần trước. Để sử dụng mặt hàng đã mua, bạn cần gọi điểm cuối API Đồ thị sau:

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

Ví dụ: sử dụng 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
);

Ví dụ về phản hồi thành công:

{
  success: true,
}

Tranh chấp

Tranh chấp có thể xảy ra muộn hơn nhiều sau khi lần thanh toán ban đầu hoàn tất. Do đó, bạn cần phải xử lý một thành phần máy chủ tranh chấp để nhà phát triển có thể nhận được thông báo khi người chơi bắt đầu quy trình tranh chấp. Trong Thanh toán nhanh - một hệ thống thanh toán không cần máy chủ, mọi tranh chấp sẽ tự động được hoàn tiền và đóng lại. Để biết chi tiết về cách triển khai Thanh toán và xử lý tranh chấp với thành phần máy chủ, hãy xem bài viết Nhận thanh toánTranh chấp.