Hướng dẫn tích hợp phần phụ trợ để kiếm tiền bên ngoài Google Play Billing

API Nhà phát triển Google Play nay được bổ sung chức năng để báo cáo các giao dịch thực hiện qua hệ thống thanh toán thay thế hoặc hệ thống ưu đãi bên ngoài. Hướng dẫn này mô tả cách báo cáo các giao dịch thực hiện qua hệ thống thanh toán thay thế hoặc mặt hàng bên ngoài.

Trong phần phụ trợ có thể có một vài thành phần cần thiết để xử lý các giao dịch mua hàng trong ứng dụng. Để tạo các thành phần như vậy, bạn cần thiết lập quy trình tích hợp phần phụ trợ theo chỉ dẫn trong phần Định cấu hình API Nhà phát triển Google Play. Đối với mọi chức năng phụ trợ khác dành cho nhà phát triển nhưng không liên quan đến hệ thống thanh toán thay thế hoặc API mặt hàng bên ngoài, hãy xem hướng dẫn trong Tài liệu về hệ thống thanh toán của Google Play.

Báo cáo giao dịch mới bên ngoài cho Google Play

Hãy tích hợp với Externaltransactions APIs để báo cáo các giao dịch do người dùng tại những quốc gia được hỗ trợ thực hiện bên ngoài hệ thống thanh toán của Google Play (kể cả giao dịch 0 đồng khi mua bản dùng thử miễn phí). Bạn chỉ nên bắt đầu và báo cáo các giao dịch trên hệ thống thanh toán thay thế hoặc hệ thống ưu đãi bên ngoài đối với những quốc gia của người dùng đủ điều kiện theo quy định được cho phép trong các chương trình thanh toán thay thế hoặc ưu đãi bên ngoài, nếu không lệnh gọi API sẽ bị từ chối. Chính sách này áp dụng cho tất cả các giao dịch, bao gồm cả giao dịch mua mới, gia hạn, nạp tiền, nâng cấp, hạ cấp và nhiều loại giao dịch khác.

Báo cáo giao dịch bên ngoài

Bạn phải gọi Externaltransactions API để báo cáo giao dịch bên ngoài sau khi khoản thanh toán được uỷ quyền thông qua hệ thống thanh toán thay thế hoặc hệ thống ưu đãi bên ngoài. API này áp dụng cho tất cả giao dịch, bao gồm cả các khoản phí ban đầu, gia hạn, hoàn tiền và các giao dịch khác. Bạn phải báo cáo tất cả giao dịch trong vòng 24 giờ kể từ khi giao dịch phát sinh.

Mỗi giao dịch bên ngoài sẽ được báo cáo bằng một mã giao dịch bên ngoài. Đối với các giao dịch mua định kỳ (chẳng hạn như các gói thuê bao tự động gia hạn), bạn cần gửi mã giao dịch bên ngoài liên kết với giao dịch đầu tiên trong giao dịch mua định kỳ dưới dạng tham số cho mọi giao dịch tiếp theo (kể cả giao dịch hoàn tiền). Việc này sẽ ghi lại chuỗi giao dịch của giao dịch mua ban đầu đó. Khi sản phẩm thay đổi (chẳng hạn như khi nâng cấp/hạ cấp) hoặc nếu giao dịch mua định kỳ bị huỷ hay hết hạn và sau đó, người dùng mua lại cùng một sản phẩm, thì bạn sẽ gửi một mã giao dịch bên ngoài mới cho những giao dịch mua như vậy. Bạn không được đưa bất kỳ thông tin nhận dạng cá nhân, thông tin mật hoặc thông tin thuộc quyền sở hữu riêng nào vào mã giao dịch bên ngoài này.

Báo cáo giao dịch mua mới

Mỗi khi thực hiện thành công một giao dịch mua mới trong hệ thống thanh toán thay thế hoặc hệ thống ưu đãi bên ngoài, bạn bắt buộc phải gọi Externaltransactions API. Đối với các giao dịch mua mới này, bạn cần cung cấp một externalTransactionId duy nhất liên kết với giao dịch mua trong phần phụ trợ dưới dạng một tham số truy vấn. Bạn không thể sử dụng lại externalTransactionId này trong cùng một mã gói của ứng dụng.

externalTransactionToken mà ứng dụng nhận được thông qua lệnh gọi lại UserChoiceBillingListener, AlternativeBillingOnlyReportingDetailsListener hoặc ExternalOfferReportingDetailsListener cũng là bắt buộc trong nội dung yêu cầu đối với giao dịch mua hàng một lần và giao dịch lần đầu đối với giao dịch mua định kỳ (chẳng hạn như gói thuê bao). Trong cả hai trường hợp, đây được gọi là giao dịch ban đầu. Sau giao dịch ban đầu, externalTransactionToken không còn cần thiết nữa, và bạn sẽ báo cáo các giao dịch tiếp theo (chẳng hạn như gia hạn gói thuê bao) bằng cách đưa ra một externalTransactionId mới riêng biệt. Xem phần Báo cáo giao dịch tiếp theo của một giao dịch mua để biết thêm thông tin chi tiết về cách báo cáo các giao dịch tiếp theo.

Ví dụ:

  1. Nhà phát triển định cấu hình và bật hệ thống thanh toán thay thế trong ứng dụng của mình.
  2. Người dùng 1 ở Hàn Quốc (một quốc gia được hỗ trợ) đang tìm cách mua product1 với giá 12634,1 KRW/tháng, với ưu đãi dùng thử miễn phí một tháng.
  3. Ứng dụng sẽ bắt đầu quy trình mua bằng ProductDetails cho product1 và ưu đãi mà người dùng đã chọn.
  4. Người dùng 1 chọn hệ thống thanh toán thay thế của nhà phát triển.
  5. UserChoiceBillingListener nhận giá trị my_token dưới dạng externalTransactionToken.
  6. Sau đó, nhà phát triển sẽ gửi thông tin liên quan đến phần phụ trợ của họ (giá trị externalTransactionToken và sản phẩm đang được mua). Sau đó, họ sẽ bắt đầu quy trình mua đối với product1 trong hệ thống thanh toán thay thế. Giao dịch này sẽ được gán một mã giao dịch duy nhất ở phía nhà phát triển, dùng để báo cáo cho Google Play: 123-456-789. Mã giao dịch là bắt buộc, mặc dù người dùng sẽ nhận được một bản dùng thử miễn phí.
  7. Sau khi giao dịch mua được thực hiện trong hệ thống thanh toán thay thế, nhà phát triển sẽ báo cáo giao dịch này cho Google Play bằng yêu cầu sau đây. Ban đầu, giá trị này được báo cáo là giao dịch trị giá 0 đồng vì người dùng được sử dụng miễn phí 1 tháng.
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=123-456-789

Body
 {
"originalPreTaxAmount" : {
   "priceMicros": "0",
   "currency": "KRW"
 },
 "originalTaxAmount" : {
   "priceMicros": "0",
   "currency": "KRW"
 },
"transactionTime" : "2022-02-22T12:45:00Z",
 "recurringTransaction" : {
   "externalTransactionToken": "my_token",
   "externalSubscription" {
     "subscriptionType": "RECURRING"
   }
 },
 "userTaxAddress" : {
   "regionCode": "KR"
 }
}

Nếu giao dịch với một người dùng cư trú ở Ấn Độ nơi có mức thuế thay đổi theo khu vực hành chính (chẳng hạn như tiểu bang hoặc tỉnh), hãy nhớ đưa khu vực đó vào bên dưới userTaxAddress. Tham khảo danh sách các chuỗi được xác định trước trong hướng dẫn tham chiếu API cho khu vực hành chính áp dụng.

POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=123-456-789

Body
 {
"originalPreTaxAmount" : {
   "priceMicros": "0",
   "currency": "INR"
 },
 "originalTaxAmount" : {
   "priceMicros": "0",
   "currency": "INR"
 },
"transactionTime" : "2023-11-01T12:45:00Z",
 "recurringTransaction" : {
   "externalTransactionToken": "my_token",
   "externalSubscription" {
     "subscriptionType": "RECURRING"
   }
 },
 "userTaxAddress" : {
   # Tax varies in India based on state, so include that information in
   # administrativeArea
   "regionCode": "IN"
   "administrativeArea": "KERALA"
 }
}

Báo cáo các giao dịch tiếp theo của một giao dịch mua

Trong một số trường hợp, người dùng thực hiện nhiều khoản thanh toán được liên kết với cùng một giao dịch mua bên ngoài (ví dụ: gia hạn gói thuê bao hoặc nạp tiền gói trả trước). Bạn có thể báo cáo các giao dịch tiếp theo bằng cách sử dụng cùng một API trong Externaltransactions. Như mô tả trong phần Báo cáo giao dịch mua mới, bạn không cần externalTransactionToken cho các giao dịch tiếp theo. Thay vào đó, một externalTransactionId mới duy nhất sẽ được gửi dưới dạng tham số truy vấn cho mỗi giao dịch gia hạn hoặc nạp tiền, kèm theo mã của giao dịch ban đầu có trong trường initialExternalTransactionId.

Tiếp nối ví dụ trước:

  1. Lần gia hạn đầu tiên của người dùng 1 diễn ra trên hệ thống thanh toán thay thế. Mã giao dịch ban đầu là 123-456-789.
  2. Đối với giao dịch mới này, nhà phát triển sẽ báo cáo việc lặp lại giao dịch trong tham số truy vấn URL ở dạng mã giao dịch bên ngoài, đồng thời tham chiếu đến mã giao dịch bên ngoài của giao dịch ban đầu trong trường initialExternalTransactionId.

Ví dụ về yêu cầu:

POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=abc-def-ghi

Body
 {
"originalPreTaxAmount" : {
   "priceMicros": "12634000000",
   "currency": "KRW"
 },
 "originalTaxAmount" : {
   "priceMicros": "1263000000",
   "currency": "KRW"
 },
"transactionTime" : "2022-02-22T12:45:00Z",
 "recurringTransaction" : {
   "initialExternalTransactionId": "123-456-789",

   "externalSubscription" {
     "subscriptionType": "RECURRING"
   }
 },
 "userTaxAddress" : {
   "regionCode": "KR"
 }
}

Báo cáo giao dịch nâng cấp hoặc hạ cấp

Khi người dùng có một gói thuê bao, để báo cáo một giao dịch nâng cấp hoặc hạ cấp trong hệ thống thanh toán thay thế, hãy sử dụng cùng một điểm cuối và hàm trong Externaltransactions API, qua đó gửi externalTransactionToken được cung cấp cho ứng dụng để thực hiện giao dịch nâng cấp hoặc hạ cấp đó. Phương thức này hoạt động tương tự như cách báo cáo giao dịch mua mới.

Chuyển từ báo cáo thủ công về giao dịch qua hệ thống thanh toán thay thế

Để di chuyển các gói thuê bao đang hoạt động được bắt đầu khi bạn cung cấp hệ thống thanh toán thay thế (không có tính năng báo cáo tự động), hãy tạo một giao dịch mới có mức phí bằng 0 thông qua trường migratedTransactionProgram thay vì chỉ định initialExternalTransactionId hoặc externalTransactionToken. Đặt transactionTime thành thời điểm khi người dùng bắt đầu đăng ký cho mỗi gói thuê bao đang hoạt động. Sau đó, hãy báo cáo từng giao dịch tiếp theo của các gói thuê bao này như bình thường thông qua API, cung cấp initialExternalTransactionId đã dùng ở trên để tạo giao dịch gia hạn. Sau khi di chuyển gói thuê bao, bạn sẽ không cần báo cáo các giao dịch tiếp theo của gói thuê bao này theo cách thủ công nữa, miễn là các giao dịch đó được báo cáo thông qua các phương thức tự động được mô tả trên trang này.

Trong khi di chuyển gói thuê bao, hãy lưu ý đến các giới hạn về hạn mức được áp dụng để đảm bảo việc di chuyển không làm vượt quá hạn mức. Nếu cần di chuyển nhiều gói thuê bao, hãy thực hiện việc này trong nhiều ngày hoặc yêu cầu tăng hạn mức.

Bạn chỉ có thể sử dụng trường migratedTransactionProgram khi di chuyển từ báo cáo thủ công. Tính năng báo cáo thủ công sẽ không được dùng nữa khi không còn được hỗ trợ.

Ví dụ về yêu cầu:

# Note that the externalTransactionId specified here will used to report subsequent
# transactions.

POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=abc-def-ghi

Body
 {
 # Be sure to set the price to 0 for this transaction since it does not reflect
 # an actual subscription renewal.
 "originalPreTaxAmount" : {
   "priceMicros": "0",
   "currency": "KRW"
 },
 "originalTaxAmount" : {
   "priceMicros": "0",
   "currency": "KRW"
 },

 # The transaction time should be set to when the user signed up for this
 # subscription.
 "transactionTime" : "2022-02-22T12:45:00Z",
  "recurringTransaction" : {
    "migratedTransactionProgram": "USER_CHOICE_BILLING",

    "externalSubscription" {
      "subscriptionType": "RECURRING"
    }
  },
 "userTaxAddress" : {
   "regionCode": "KR"
 }
}

Báo cáo hoàn tiền cho giao dịch mua trên Google Play

Hãy tích hợp với API Externaltransactions để báo cáo các giao dịch được hoàn tiền cho người dùng bên ngoài hệ thống thanh toán của Google Play. Để Play xác định chính xác giao dịch nào được hoàn tiền, bạn phải thêm externalTransactionId tương ứng của giao dịch đã báo cáo trước đó trong các tham số URL.

Khi báo cáo các giao dịch hoàn tiền cho giao dịch mua gói thuê bao, hãy tham chiếu đến externalTransactionId của giao dịch định kỳ cụ thể của gói thuê bao đang được hoàn tiền.

Ví dụ: Giả sử một gói thuê bao có các giao dịch sau:

  • Giao dịch ban đầu có mã giao dịch bên ngoài là ABC.1234-5678-9012-34567
  • Giao dịch định kỳ đầu tiên có mã giao dịch bên ngoài là ABC.1234-5678-9012-34567..0
  • Giao dịch định kỳ thứ hai có mã giao dịch bên ngoài là ABC.1234-5678-9012-34567..1

Để báo cáo về việc hoàn tiền cho tất cả các giao dịch của gói thuê bao đó, bạn cần thực hiện 3 yêu cầu hoàn tiền riêng biệt: 1 yêu cầu cho giao dịch ban đầu và 2 yêu cầu cho các giao dịch tiếp theo.

Phương thức này chấp nhận cả giao dịch hoàn tiền toàn bộ (số tiền hoàn bằng với số tiền mà người dùng đã thanh toán trong giao dịch bên ngoài ban đầu) và giao dịch hoàn tiền một phần (số tiền hoàn nhỏ hơn số tiền mà người dùng đã thanh toán trong giao dịch bên ngoài ban đầu). Đối với giao dịch hoàn tiền một phần, bạn cần chỉ định số tiền trước thuế được hoàn lại.

Hạn mức API

API Externaltransactions phải tuân theo hạn mức API hằng ngày cho tất cả lệnh gọi, giống như mọi điểm cuối khác trong API Nhà phát triển Google Play.

Ngoài ra, Externaltransactions API có giới hạn là 1.200 truy vấn mỗi phút (QPM) trên các lệnh gọi đến Externaltransactions.createexternaltransaction hoặc Externaltransactions.refundexternaltransaction. Các lệnh gọi đến Externaltransactions.getexternaltransaction sẽ không được tính vào giới hạn 1.200 QPM này.