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 hiện bao gồm các tính năng 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 chương trình ưu đãi bên ngoài. Hướng dẫn này mô tả cách báo cáo các lựa chọn thay thế giao dịch thanh toán hoặc giao dịch chào bán 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. Cho tất cả chức năng phụ trợ dành cho nhà phát triển không dành riêng cho hệ thống thanh toán thay thế hoặc API chào bán bên ngoài, hướng dẫn của Có áp dụng 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

Tích hợp với Externaltransactions APIs để báo cáo giao dịch diễn ra bên ngoài hệ thống thanh toán của Google Play trong quốc gia được hỗ trợ, kể cả giao dịch 0 đồng khi dùng thử miễn phí mua hàng. Giao dịch trên hệ thống thanh toán thay thế hoặc chào bán bên ngoài chỉ được bắt đầu và báo cáo cho các quốc gia có người dùng đủ điều kiện khi được cho phép theo hệ thống thanh toán thay thế hoặc chương trình ưu đãi bên ngoài, nếu không lệnh gọi API sẽ bị từ chối. Quy định 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 cách khác.

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

Bạn nên 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 chào bán bên ngoài. Điều này áp dụng cho tất cả các giao dịch, bao gồm cả giao dịch ban đầu phí, gia hạn, hoàn tiền, v.v. Tất cả giao dịch đều bắt buộc phải được báo cáo trong vòng 24 giờ kể từ khi phát sinh giao dịch.

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 cung cấp bất kỳ thông tin nhận dạng cá nhân nào thông tin, thông tin độc quyền hoặc thông tin mật như một phần của mã giao dịch.

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 thông qua hệ thống thanh toán thay thế hoặc hệ thống chào bán bên ngoài, thì lệnh gọi đến API Externaltransactions sẽ là là bắt buộc. Đối với các giao dịch mua mới này, bạn cần cung cấp duy nhất externalTransactionId được liên kết với giao dịch mua trong phần phụ trợ của bạn dưới dạng truy vấn . Bạn không thể sử dụng lại externalTransactionId này trong cùng một ứng dụng mã gói.

externalTransactionToken mà ứng dụng nhận được qua UserChoiceBillingListener, AlternativeBillingOnlyReportingDetailsListener hoặc lệnh gọi lại ExternalOfferReportingDetailsListener cũng là một phần của đối với các giao dịch mua hàng một lần và giao dịch lần đầu tiên trong giao dịch mua định kỳ (chẳng hạn như gói thuê bao). Trong cả hai trường hợp, phương thức nà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 và bạn sẽ báo cáo các giao dịch (chẳng hạn như gia hạn gói thuê bao) bằng cách cung cấp một giá trị mới externalTransactionId Xem phần Báo cáo các giao dịch tiếp theo của một giao dịch mua để biết thêm 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í một 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ừ tính năng 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 nhiều gói thuê bao để được di chuyển, trải rộng trong nhiều ngày hoặc yêu cầu tăng hạn mức của Google.

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 Chương trình đối tác của Play

Nhà phát triển tham gia các chương trình đối tác như Chương trình trải nghiệm nội dung đa phương tiện của Play phải cung cấp transaction_program_code khi báo cáo giao dịch bên ngoài. Nếu bạn nhà phát triển đủ điều kiện, hãy liên hệ với Nhà quản lý phát triển kinh doanh của bạn để biết thêm thông tin về cách đặt trường này.

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ộ (trong đó số tiền giống với số tiền mà người dùng đã thanh toán trong gói thuê bao bên ngoài ban đầu giao dịch) và hoàn tiền một phần (số tiền này nhỏ hơn số tiền mà người dùng đã thanh toán trong gói thuê bao bên ngoài ban đầu giao dịch). Đố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.